diff --git a/src/gpgmm/common/EventMessage.cpp b/src/gpgmm/common/EventMessage.cpp index e0a96bfd3..bb74ff068 100644 --- a/src/gpgmm/common/EventMessage.cpp +++ b/src/gpgmm/common/EventMessage.cpp @@ -24,9 +24,9 @@ namespace gpgmm { MessageSeverity GetDefaultEventMessageLevel() { #if defined(NDEBUG) - return MessageSeverity::Info; + return MessageSeverity::kInfo; #else - return MessageSeverity::Debug; + return MessageSeverity::kDebug; #endif // defined(NDEBUG) } @@ -56,33 +56,33 @@ namespace gpgmm { EventMessage::~EventMessage() { const std::string description = mStream.str(); - gpgmm::Log(mSeverity) << mName << "=" << ToString(mObject) << ": " << description << " (" - << static_cast(mMessageId) << ")"; + gpgmm::Log(mSeverity, mMessageId) + << mName << "=" << ToString(mObject) << ": " << description; #if defined(GPGMM_ENABLE_ASSERT_ON_WARNING) - ASSERT(mSeverity < MessageSeverity::Warning); + ASSERT(mSeverity < MessageSeverity::kWarning); #endif if (mSeverity >= GetEventMessageLevel()) { - MessageInfo message{description, mMessageId}; - GPGMM_TRACE_EVENT_OBJECT_CALL(mName, message); + GPGMM_TRACE_EVENT_OBJECT_CALL( + mName, MessageInfo({description.c_str(), mMessageId, mSeverity})); } } EventMessage DebugEvent(const ObjectBase* object, MessageId messageId) { - return {MessageSeverity::Debug, object->GetTypename(), object, messageId}; + return {MessageSeverity::kDebug, object->GetTypename(), object, messageId}; } EventMessage InfoEvent(const ObjectBase* object, MessageId messageId) { - return {MessageSeverity::Info, object->GetTypename(), object, messageId}; + return {MessageSeverity::kInfo, object->GetTypename(), object, messageId}; } EventMessage WarnEvent(const ObjectBase* object, MessageId messageId) { - return {MessageSeverity::Warning, object->GetTypename(), object, messageId}; + return {MessageSeverity::kWarning, object->GetTypename(), object, messageId}; } EventMessage ErrorEvent(const ObjectBase* object, MessageId messageId) { - return {MessageSeverity::Error, object->GetTypename(), object, messageId}; + return {MessageSeverity::kError, object->GetTypename(), object, messageId}; } } // namespace gpgmm diff --git a/src/gpgmm/common/Message.h b/src/gpgmm/common/Message.h index f17fc5f1c..060407f5f 100644 --- a/src/gpgmm/common/Message.h +++ b/src/gpgmm/common/Message.h @@ -15,8 +15,6 @@ #ifndef GPGMM_COMMON_MESSAGE_H_ #define GPGMM_COMMON_MESSAGE_H_ -#include - namespace gpgmm { enum class MessageId { @@ -30,16 +28,17 @@ namespace gpgmm { kBudgetInvalid, }; - struct MessageInfo { - std::string Description; - MessageId ID; + enum class MessageSeverity { + kDebug, + kInfo, + kWarning, + kError, }; - enum class MessageSeverity { - Debug, - Info, - Warning, - Error, + struct MessageInfo { + const char* Description; + MessageId ID; + MessageSeverity Severity; }; } // namespace gpgmm diff --git a/src/gpgmm/d3d12/ResourceAllocatorD3D12.cpp b/src/gpgmm/d3d12/ResourceAllocatorD3D12.cpp index acd26f166..013cabda9 100644 --- a/src/gpgmm/d3d12/ResourceAllocatorD3D12.cpp +++ b/src/gpgmm/d3d12/ResourceAllocatorD3D12.cpp @@ -637,7 +637,7 @@ namespace gpgmm::d3d12 { #if !defined(GPGMM_DISABLE_SIZE_CACHE) { // Temporary suppress log messages emitted from internal cache-miss requests. - ScopedLogLevel scopedLogLevel(MessageSeverity::Info); + ScopedLogLevel scopedLogLevel(MessageSeverity::kInfo); MemoryAllocationRequest cacheRequest = {}; cacheRequest.NeverAllocate = true; diff --git a/src/gpgmm/d3d12/UtilsD3D12.cpp b/src/gpgmm/d3d12/UtilsD3D12.cpp index 21f7ad096..6ca381d72 100644 --- a/src/gpgmm/d3d12/UtilsD3D12.cpp +++ b/src/gpgmm/d3d12/UtilsD3D12.cpp @@ -23,16 +23,16 @@ namespace gpgmm::d3d12 { switch (messageSeverity) { case D3D12_MESSAGE_SEVERITY_CORRUPTION: case D3D12_MESSAGE_SEVERITY_ERROR: - return MessageSeverity::Error; + return MessageSeverity::kError; case D3D12_MESSAGE_SEVERITY_WARNING: - return MessageSeverity::Warning; + return MessageSeverity::kWarning; case D3D12_MESSAGE_SEVERITY_INFO: - return MessageSeverity::Info; + return MessageSeverity::kInfo; case D3D12_MESSAGE_SEVERITY_MESSAGE: - return MessageSeverity::Debug; + return MessageSeverity::kDebug; default: UNREACHABLE(); - return MessageSeverity::Debug; + return MessageSeverity::kDebug; } } diff --git a/src/gpgmm/utils/Log.cpp b/src/gpgmm/utils/Log.cpp index 05409fc4d..5bfd02781 100644 --- a/src/gpgmm/utils/Log.cpp +++ b/src/gpgmm/utils/Log.cpp @@ -35,9 +35,9 @@ namespace gpgmm { MessageSeverity GetDefaultLogLevel() { #if defined(NDEBUG) - return MessageSeverity::Info; + return MessageSeverity::kInfo; #else - return MessageSeverity::Debug; + return MessageSeverity::kDebug; #endif // defined(NDEBUG) } @@ -49,13 +49,13 @@ namespace gpgmm { const char* SeverityName(MessageSeverity severity) { switch (severity) { - case MessageSeverity::Debug: + case MessageSeverity::kDebug: return "Debug"; - case MessageSeverity::Info: + case MessageSeverity::kInfo: return "Info"; - case MessageSeverity::Warning: + case MessageSeverity::kWarning: return "Warning"; - case MessageSeverity::Error: + case MessageSeverity::kError: return "Error"; default: UNREACHABLE(); @@ -66,13 +66,13 @@ namespace gpgmm { #if defined(GPGMM_PLATFORM_ANDROID) android_LogPriority AndroidLogPriority(MessageSeverity severity) { switch (severity) { - case MessageSeverity::Debug: + case MessageSeverity::kDebug: return ANDROID_LOG_INFO; - case MessageSeverity::Info: + case MessageSeverity::kInfo: return ANDROID_LOG_INFO; - case MessageSeverity::Warning: + case MessageSeverity::kWarning: return ANDROID_LOG_WARN; - case MessageSeverity::Error: + case MessageSeverity::kError: return ANDROID_LOG_ERROR; default: UNREACHABLE(); @@ -95,7 +95,8 @@ namespace gpgmm { // LogMessage - LogMessage::LogMessage(MessageSeverity severity) : mSeverity(severity) { + LogMessage::LogMessage(MessageSeverity severity, MessageId messageId) + : mSeverity(severity), mMessageId(messageId) { } LogMessage::~LogMessage() { @@ -109,7 +110,7 @@ namespace gpgmm { const char* severityName = SeverityName(mSeverity); FILE* outputStream = stdout; - if (mSeverity == MessageSeverity::Warning || mSeverity == MessageSeverity::Error) { + if (mSeverity == MessageSeverity::kWarning || mSeverity == MessageSeverity::kError) { outputStream = stderr; } @@ -120,7 +121,8 @@ namespace gpgmm { if (IsDebuggerPresent()) { const std::string outputString = std::string(kLogTag) + " " + std::string(severityName) + - "(tid: " + ToString(std::this_thread::get_id()) + "): " + fullMessage + "\n"; + "(tid: " + ToString(std::this_thread::get_id()) + "): " + fullMessage + "(" + + ToString(static_cast(mMessageId)) + ")" + "\n"; OutputDebugStringA(outputString.c_str()); } #endif // defined(GPGMM_PLATFORM_WINDOWS) @@ -136,26 +138,26 @@ namespace gpgmm { fullMessage.c_str()); #else // defined(GPGMM_PLATFORM_ANDROID) // Note: we use fprintf because includes static initializers. - fprintf(outputStream, "%s %s (tid:%s): %s\n", kLogTag, severityName, - ToString(std::this_thread::get_id()).c_str(), fullMessage.c_str()); + fprintf(outputStream, "%s %s (tid:%s): %s (%d)\n", kLogTag, severityName, + ToString(std::this_thread::get_id()).c_str(), fullMessage.c_str(), mMessageId); fflush(outputStream); #endif } - LogMessage DebugLog() { - return {MessageSeverity::Debug}; + LogMessage DebugLog(MessageId messageId) { + return {MessageSeverity::kDebug, messageId}; } - LogMessage InfoLog() { - return {MessageSeverity::Info}; + LogMessage InfoLog(MessageId messageId) { + return {MessageSeverity::kInfo, messageId}; } - LogMessage WarningLog() { - return {MessageSeverity::Warning}; + LogMessage WarningLog(MessageId messageId) { + return {MessageSeverity::kWarning, messageId}; } - LogMessage ErrorLog() { - return {MessageSeverity::Error}; + LogMessage ErrorLog(MessageId messageId) { + return {MessageSeverity::kError, messageId}; } LogMessage DebugLog(const char* file, const char* function, int line) { @@ -164,19 +166,19 @@ namespace gpgmm { return message; } - LogMessage Log(const MessageSeverity& level) { - switch (level) { - case MessageSeverity::Debug: - return DebugLog(); - case MessageSeverity::Info: - return InfoLog(); - case MessageSeverity::Warning: - return WarningLog(); - case MessageSeverity::Error: - return ErrorLog(); + LogMessage Log(MessageSeverity severity, MessageId messageId) { + switch (severity) { + case MessageSeverity::kDebug: + return DebugLog(messageId); + case MessageSeverity::kInfo: + return InfoLog(messageId); + case MessageSeverity::kWarning: + return WarningLog(messageId); + case MessageSeverity::kError: + return ErrorLog(messageId); default: UNREACHABLE(); - return {level}; + return {severity, messageId}; } } diff --git a/src/gpgmm/utils/Log.h b/src/gpgmm/utils/Log.h index b2b95b45b..4d98cb598 100644 --- a/src/gpgmm/utils/Log.h +++ b/src/gpgmm/utils/Log.h @@ -57,7 +57,7 @@ namespace gpgmm { // Essentially an ostringstream that will print itself in its destructor. class LogMessage { public: - LogMessage(MessageSeverity severity); + LogMessage(MessageSeverity severity, MessageId messageId); ~LogMessage(); LogMessage(LogMessage&& other) = default; @@ -74,17 +74,18 @@ namespace gpgmm { LogMessage& operator=(const LogMessage& other) = delete; MessageSeverity mSeverity; + MessageId mMessageId; std::ostringstream mStream; }; // Short-hands to create a LogMessage with the respective severity. - LogMessage DebugLog(); - LogMessage InfoLog(); - LogMessage WarningLog(); - LogMessage ErrorLog(); + LogMessage DebugLog(MessageId messageId = MessageId::kUnknown); + LogMessage InfoLog(MessageId messageId = MessageId::kUnknown); + LogMessage WarningLog(MessageId messageId = MessageId::kUnknown); + LogMessage ErrorLog(MessageId messageId = MessageId::kUnknown); // Create a LogMessage based on severity. - LogMessage Log(const MessageSeverity& level); + LogMessage Log(MessageSeverity severity, MessageId messageId); // GPGMM_DEBUG is a helper macro that creates a DebugLog and outputs file/line/function // information diff --git a/src/tests/D3D12Test.cpp b/src/tests/D3D12Test.cpp index c2aa13236..5b7520c40 100644 --- a/src/tests/D3D12Test.cpp +++ b/src/tests/D3D12Test.cpp @@ -24,13 +24,13 @@ namespace gpgmm::d3d12 { D3D12_MESSAGE_SEVERITY GetMessageSeverity(MessageSeverity MessageSeverity) { switch (MessageSeverity) { - case MessageSeverity::Error: + case MessageSeverity::kError: return D3D12_MESSAGE_SEVERITY_ERROR; - case MessageSeverity::Warning: + case MessageSeverity::kWarning: return D3D12_MESSAGE_SEVERITY_WARNING; - case MessageSeverity::Info: + case MessageSeverity::kInfo: return D3D12_MESSAGE_SEVERITY_INFO; - case MessageSeverity::Debug: + case MessageSeverity::kDebug: return D3D12_MESSAGE_SEVERITY_MESSAGE; default: UNREACHABLE(); diff --git a/src/tests/GPGMMTest.cpp b/src/tests/GPGMMTest.cpp index ce31511dc..d0077ca9e 100644 --- a/src/tests/GPGMMTest.cpp +++ b/src/tests/GPGMMTest.cpp @@ -118,7 +118,7 @@ GPGMMTestEnvironment::GPGMMTestEnvironment(int argc, char** argv) { constexpr const char kDebugMode[] = "--debug"; size_t arglen = sizeof(kDebugMode) - 1; if (strncmp(argv[i], kDebugMode, arglen) == 0) { - mLogLevel = gpgmm::MessageSeverity::Debug; + mLogLevel = gpgmm::MessageSeverity::kDebug; continue; } @@ -128,19 +128,19 @@ GPGMMTestEnvironment::GPGMMTestEnvironment(int argc, char** argv) { const char* level = argv[i] + arglen; if (level[0] != '\0') { if (strcmp(level, "=DEBUG") == 0) { - mLogLevel = gpgmm::MessageSeverity::Debug; + mLogLevel = gpgmm::MessageSeverity::kDebug; } else if (strcmp(level, "=INFO") == 0) { - mLogLevel = gpgmm::MessageSeverity::Info; + mLogLevel = gpgmm::MessageSeverity::kInfo; } else if (strcmp(level, "=WARN") == 0) { - mLogLevel = gpgmm::MessageSeverity::Warning; + mLogLevel = gpgmm::MessageSeverity::kWarning; } else if (strcmp(level, "=ERROR") == 0) { - mLogLevel = gpgmm::MessageSeverity::Error; + mLogLevel = gpgmm::MessageSeverity::kError; } else { gpgmm::ErrorLog() << "Invalid log level " << level << ".\n"; UNREACHABLE(); } } else { - mLogLevel = gpgmm::MessageSeverity::Warning; + mLogLevel = gpgmm::MessageSeverity::kWarning; } continue; } diff --git a/src/tests/capture_replay_tests/D3D12EventTraceReplay.cpp b/src/tests/capture_replay_tests/D3D12EventTraceReplay.cpp index 25743fa72..bfbbbf195 100644 --- a/src/tests/capture_replay_tests/D3D12EventTraceReplay.cpp +++ b/src/tests/capture_replay_tests/D3D12EventTraceReplay.cpp @@ -383,7 +383,7 @@ class D3D12EventTraceReplay : public D3D12TestBase, public CaptureReplayTestWith const Json::Value& snapshot = event["args"]["snapshot"]; ASSERT_FALSE(snapshot.empty()); - if (GetLogLevel() <= gpgmm::MessageSeverity::Warning && + if (GetLogLevel() <= gpgmm::MessageSeverity::kWarning && mCaps->IsAdapterUMA() != snapshot["IsUMA"].asBool() && iterationIndex == 0) { gpgmm::WarningLog() @@ -441,7 +441,7 @@ class D3D12EventTraceReplay : public D3D12TestBase, public CaptureReplayTestWith const Json::Value& snapshot = event["args"]["snapshot"]; ASSERT_FALSE(snapshot.empty()); - if (GetLogLevel() <= gpgmm::MessageSeverity::Warning && + if (GetLogLevel() <= gpgmm::MessageSeverity::kWarning && mCaps->GetMaxResourceHeapTierSupported() < snapshot["ResourceHeapTier"].asInt() && iterationIndex == 0) {