Updating trace recorder to allow limiting the number of messages stored
This commit is contained in:
+9
-4
@@ -13,20 +13,24 @@
|
||||
#pragma once
|
||||
|
||||
#include <AzCore/Debug/TraceMessageBus.h>
|
||||
#include <AzCore/std/containers/list.h>
|
||||
#include <AzCore/std/string/string.h>
|
||||
|
||||
namespace AtomToolsFramework
|
||||
{
|
||||
// Records all TraceMessageBus activity to a string
|
||||
class TraceRecorder
|
||||
: private AZ::Debug::TraceMessageBus::Handler
|
||||
class TraceRecorder : private AZ::Debug::TraceMessageBus::Handler
|
||||
{
|
||||
public:
|
||||
AZ_TYPE_INFO(AtomToolsFramework::TraceRecorder, "{7B49AFD0-D0AB-4CB7-A4B5-6D88D30DCBFD}");
|
||||
|
||||
TraceRecorder();
|
||||
TraceRecorder(size_t maxMessageCount = std::numeric_limits<size_t>::max());
|
||||
~TraceRecorder();
|
||||
|
||||
//! Get the combined output of all messages
|
||||
AZStd::string GetDump() const;
|
||||
|
||||
private:
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// AZ::Debug::TraceMessageBus::Handler overrides...
|
||||
bool OnAssert(const char* /*message*/) override;
|
||||
@@ -36,6 +40,7 @@ namespace AtomToolsFramework
|
||||
bool OnPrintf(const char* /*window*/, const char* /*message*/) override;
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
AZStd::string m_messageSink;
|
||||
size_t m_maxMessageCount = std::numeric_limits<size_t>::max();
|
||||
AZStd::list<AZStd::string> m_messages;
|
||||
};
|
||||
} // namespace AtomToolsFramework
|
||||
|
||||
@@ -11,10 +11,12 @@
|
||||
*/
|
||||
|
||||
#include <AtomToolsFramework/Debug/TraceRecorder.h>
|
||||
#include <AzCore/StringFunc/StringFunc.h>
|
||||
|
||||
namespace AtomToolsFramework
|
||||
{
|
||||
TraceRecorder::TraceRecorder()
|
||||
TraceRecorder::TraceRecorder(size_t maxMessageCount)
|
||||
: m_maxMessageCount(maxMessageCount)
|
||||
{
|
||||
AZ::Debug::TraceMessageBus::Handler::BusConnect();
|
||||
}
|
||||
@@ -24,42 +26,55 @@ namespace AtomToolsFramework
|
||||
AZ::Debug::TraceMessageBus::Handler::BusDisconnect();
|
||||
}
|
||||
|
||||
AZStd::string TraceRecorder::GetDump() const
|
||||
{
|
||||
AZStd::string dump;
|
||||
AZ::StringFunc::Join(dump, m_messages.begin(), m_messages.end(), "\n");
|
||||
return dump;
|
||||
}
|
||||
|
||||
bool TraceRecorder::OnAssert(const char* message)
|
||||
{
|
||||
m_messageSink += "Assert: ";
|
||||
m_messageSink += message;
|
||||
m_messageSink += "\n";
|
||||
if (m_messages.size() < m_maxMessageCount)
|
||||
{
|
||||
m_messages.push_back(AZStd::string::format("Assert: %s", message));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool TraceRecorder::OnException(const char* message)
|
||||
{
|
||||
m_messageSink += "Exception: ";
|
||||
m_messageSink += message;
|
||||
m_messageSink += "\n";
|
||||
if (m_messages.size() < m_maxMessageCount)
|
||||
{
|
||||
m_messages.push_back(AZStd::string::format("Exception: %s", message));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool TraceRecorder::OnError(const char* /*window*/, const char* message)
|
||||
{
|
||||
m_messageSink += "Error: ";
|
||||
m_messageSink += message;
|
||||
m_messageSink += "\n";
|
||||
if (m_messages.size() < m_maxMessageCount)
|
||||
{
|
||||
m_messages.push_back(AZStd::string::format("Error: %s", message));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool TraceRecorder::OnWarning(const char* /*window*/, const char* message)
|
||||
{
|
||||
m_messageSink += "Warning: ";
|
||||
m_messageSink += message;
|
||||
m_messageSink += "\n";
|
||||
if (m_messages.size() < m_maxMessageCount)
|
||||
{
|
||||
m_messages.push_back(AZStd::string::format("Warning: %s", message));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool TraceRecorder::OnPrintf(const char* /*window*/, const char* message)
|
||||
{
|
||||
m_messageSink += message;
|
||||
m_messageSink += "\n";
|
||||
if (m_messages.size() < m_maxMessageCount)
|
||||
{
|
||||
m_messages.push_back(AZStd::string::format("%s", message));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user