diff --git a/common/include/common/debug.h b/common/include/common/debug.h index 6c5cb55f..302ee17a 100644 --- a/common/include/common/debug.h +++ b/common/include/common/debug.h @@ -36,6 +36,7 @@ enum DebugLevel DEBUG_LEVEL_INFO, DEBUG_LEVEL_WARN, DEBUG_LEVEL_ERROR, + DEBUG_LEVEL_TRACE, DEBUG_LEVEL_FIXME, DEBUG_LEVEL_FATAL }; @@ -43,6 +44,7 @@ enum DebugLevel extern const char ** debug_lookup; void debug_init(void); +void debug_enableTracing(void); // platform specific debug initialization void platform_debugInit(void); @@ -81,6 +83,9 @@ void debug_warn(const char * file, unsigned int line, const char * function, void debug_error(const char * file, unsigned int line, const char * function, const char * format, ...) __attribute__((format (printf, 4, 5))); +void debug_trace(const char * file, unsigned int line, const char * function, + const char * format, ...) __attribute__((format (printf, 4, 5))); + #define STRIPPATH(s) ( \ sizeof(s) > 2 && (s)[sizeof(s)- 3] == DIRECTORY_SEPARATOR ? (s) + sizeof(s) - 2 : \ sizeof(s) > 3 && (s)[sizeof(s)- 4] == DIRECTORY_SEPARATOR ? (s) + sizeof(s) - 3 : \ @@ -112,6 +117,7 @@ void debug_error(const char * file, unsigned int line, const char * function, #define DEBUG_INFO(fmt, ...) DEBUG_PRINT(DEBUG_LEVEL_INFO, fmt, ##__VA_ARGS__) #define DEBUG_WARN(fmt, ...) DEBUG_PRINT(DEBUG_LEVEL_WARN, fmt, ##__VA_ARGS__) #define DEBUG_ERROR(fmt, ...) DEBUG_PRINT(DEBUG_LEVEL_ERROR, fmt, ##__VA_ARGS__) +#define DEBUG_TRACE(fmt, ...) DEBUG_PRINT(DEBUG_LEVEL_TRACE, fmt, ##__VA_ARGS__) #define DEBUG_FIXME(fmt, ...) DEBUG_PRINT(DEBUG_LEVEL_FIXME, fmt, ##__VA_ARGS__) #define DEBUG_FATAL(fmt, ...) do { \ DEBUG_BREAK(); \ diff --git a/common/src/debug.c b/common/src/debug.c index fcd1878d..6b264a8c 100644 --- a/common/src/debug.c +++ b/common/src/debug.c @@ -25,6 +25,7 @@ #include static uint64_t startTime; +static bool traceEnabled = false; void debug_init(void) { @@ -32,9 +33,17 @@ void debug_init(void) platform_debugInit(); } +void debug_enableTracing(void) +{ + traceEnabled = true; +} + inline static void debug_levelVA(enum DebugLevel level, const char * file, unsigned int line, const char * function, const char * format, va_list va) { + if (level == DEBUG_LEVEL_TRACE && !traceEnabled) + return; + const char * f = strrchr(file, DIRECTORY_SEPARATOR); if (!f) f = file; @@ -94,3 +103,12 @@ void debug_error(const char * file, unsigned int line, const char * function, debug_levelVA(DEBUG_LEVEL_ERROR, file, line, function, format, va); va_end(va); } + +void debug_trace(const char * file, unsigned int line, const char * function, + const char * format, ...) +{ + va_list va; + va_start(va, format); + debug_levelVA(DEBUG_LEVEL_INFO, file, line, function, format, va); + va_end(va); +} diff --git a/common/src/platform/linux/debug.c b/common/src/platform/linux/debug.c index ccbd19fb..cd541569 100644 --- a/common/src/platform/linux/debug.c +++ b/common/src/platform/linux/debug.c @@ -27,6 +27,7 @@ #define COLOR_RED "\033[0;31m" #define COLOR_CYAN "\033[0;36m" #define COLOR_WHITE "\033[0;37m" +#define COLOR_GREY "\033[0;90m" const char ** debug_lookup = NULL; @@ -38,6 +39,7 @@ void platform_debugInit(void) COLOR_RESET "[I] ", // DEBUG_LEVEL_INFO COLOR_YELLOW "[W] ", // DEBUG_LEVEL_WARN COLOR_RED "[E] ", // DEBUG_LEVEL_ERROR + COLOR_GREY "[T] ", // DEBUG_LEVEL_TRACE COLOR_CYAN "[F] ", // DEBUG_LEVEL_FIXME COLOR_WHITE "[!] " // DEBUG_LEVEL_FATAL }; @@ -48,6 +50,7 @@ void platform_debugInit(void) "[I] ", // DEBUG_LEVEL_INFO "[W] ", // DEBUG_LEVEL_WARN "[E] ", // DEBUG_LEVEL_ERROR + "[T] ", // DEBUG_LEVEL_TRACE "[F] ", // DEBUG_LEVEL_FIXME "[!] " // DEBUG_LEVEL_FATAL }; diff --git a/common/src/platform/windows/debug.c b/common/src/platform/windows/debug.c index 6b8fc7e0..0dfa9a97 100644 --- a/common/src/platform/windows/debug.c +++ b/common/src/platform/windows/debug.c @@ -30,6 +30,7 @@ void platform_debugInit(void) "[I] ", // DEBUG_LEVEL_INFO "[W] ", // DEBUG_LEVEL_WARN "[E] ", // DEBUG_LEVEL_ERROR + "[T] ", // DEBUG_LEVEL_TRACE "[F] ", // DEBUG_LEVEL_FIXME "[!] " // DEBUG_LEVEL_FATAL }; diff --git a/host/platform/Windows/capture/D12/backend/dd.c b/host/platform/Windows/capture/D12/backend/dd.c index 3da73021..3082e86b 100644 --- a/host/platform/Windows/capture/D12/backend/dd.c +++ b/host/platform/Windows/capture/D12/backend/dd.c @@ -143,6 +143,8 @@ static bool d12_dd_init( // create a DirectX11 context comRef_defineLocal(ID3D11Device , d11device); comRef_defineLocal(ID3D11DeviceContext, d11context); + + DEBUG_TRACE("D3D11CreateDevice"); hr = D3D11CreateDevice( *_adapter, D3D_DRIVER_TYPE_UNKNOWN, @@ -215,6 +217,7 @@ static bool d12_dd_init( // we try this twice in case we still get an error on re-initialization for (int i = 0; i < 2; ++i) { + DEBUG_TRACE("IDXGIOutput1_DuplicateOutput"); hr = IDXGIOutput1_DuplicateOutput(*output1, *(IUnknown **)d11device, dup); if (SUCCEEDED(hr)) break; @@ -233,6 +236,7 @@ static bool d12_dd_init( // we try this twice in case we still get an error on re-initialization for (int i = 0; i < 2; ++i) { + DEBUG_TRACE("IDXGIOutput5_DuplicateOutput1"); hr = IDXGIOutput5_DuplicateOutput1( *output5, *(IUnknown **)d11device, @@ -310,12 +314,14 @@ static bool d12_dd_deinit(D12Backend * instance) if (this->release) { + DEBUG_TRACE("IDXGIOutputDuplication_ReleaseFrame"); IDXGIOutputDuplication_ReleaseFrame(*this->dup); this->release = false; } if (this->desktop) { + DEBUG_TRACE("CloseDesktop"); CloseDesktop(this->desktop); this->desktop = NULL; } @@ -466,14 +472,17 @@ static ID3D12Resource * d12_dd_fetch(D12Backend * instance, static void d12_dd_openDesktop(DDInstance * this) { + DEBUG_TRACE("OpenInputDesktop"); this->desktop = OpenInputDesktop(0, FALSE, GENERIC_READ); if (!this->desktop) DEBUG_WINERROR("Failed to open the desktop", GetLastError()); else { + DEBUG_TRACE("SetThreadDesktop"); if (!SetThreadDesktop(this->desktop)) { DEBUG_WINERROR("Failed to set the thread desktop", GetLastError()); + DEBUG_TRACE("CloseDesktop"); CloseDesktop(this->desktop); this->desktop = NULL; } diff --git a/host/platform/Windows/src/platform.c b/host/platform/Windows/src/platform.c index 1dcbddd5..8b524d4f 100644 --- a/host/platform/Windows/src/platform.c +++ b/host/platform/Windows/src/platform.c @@ -571,6 +571,9 @@ bool app_init(void) const char * logFile = option_get_string("os", "logFile"); const bool ods = option_get_bool ("os", "ods" ); + if (ods) + debug_enableTracing(); + // redirect stderr to a file if (logFile && strcmp(logFile, "stderr") != 0) {