diff --git a/src/gpgmm/common/EventTraceWriter.cpp b/src/gpgmm/common/EventTraceWriter.cpp index 4801fa9d2..e966b0ab0 100644 --- a/src/gpgmm/common/EventTraceWriter.cpp +++ b/src/gpgmm/common/EventTraceWriter.cpp @@ -33,13 +33,17 @@ namespace gpgmm { } void EventTraceWriter::SetConfiguration(const std::string& traceFile, - const TraceEventPhase& ignoreMask) { + const TraceEventPhase& ignoreMask, + bool flushOnDestruct) { mTraceFile = (traceFile.empty()) ? mTraceFile : traceFile; mIgnoreMask = ignoreMask; + mFlushOnDestruct = flushOnDestruct; } EventTraceWriter::~EventTraceWriter() { - FlushQueuedEventsToDisk(); + if (mFlushOnDestruct) { + FlushQueuedEventsToDisk(); + } } void EventTraceWriter::EnqueueTraceEvent(char phase, diff --git a/src/gpgmm/common/EventTraceWriter.h b/src/gpgmm/common/EventTraceWriter.h index 00a7554e2..ed9ad36cc 100644 --- a/src/gpgmm/common/EventTraceWriter.h +++ b/src/gpgmm/common/EventTraceWriter.h @@ -30,7 +30,9 @@ namespace gpgmm { public: EventTraceWriter(); - void SetConfiguration(const std::string& traceFile, const TraceEventPhase& ignoreMask); + void SetConfiguration(const std::string& traceFile, + const TraceEventPhase& ignoreMask, + bool flushOnDestruct); ~EventTraceWriter(); @@ -54,6 +56,7 @@ namespace gpgmm { mBufferPerThread; TraceEventPhase mIgnoreMask; + bool mFlushOnDestruct = true; }; } // namespace gpgmm diff --git a/src/gpgmm/common/TraceEvent.cpp b/src/gpgmm/common/TraceEvent.cpp index 2cfb9479d..4b6adca07 100644 --- a/src/gpgmm/common/TraceEvent.cpp +++ b/src/gpgmm/common/TraceEvent.cpp @@ -33,12 +33,14 @@ namespace gpgmm { return gEventTrace.get(); } - void StartupEventTrace(const std::string& traceFile, const TraceEventPhase& ignoreMask) { + void StartupEventTrace(const std::string& traceFile, + const TraceEventPhase& ignoreMask, + bool flushOnDestruct) { #if defined(GPGMM_DISABLE_TRACING) gpgmm::WarningLog() << "Event tracing enabled but unable to record due to GPGMM_DISABLE_TRACING."; #endif - GetInstance()->SetConfiguration(traceFile, ignoreMask); + GetInstance()->SetConfiguration(traceFile, ignoreMask, flushOnDestruct); TRACE_EVENT_METADATA1(TraceEventCategory::Metadata, "thread_name", "name", "GPGMM_MainThread"); } diff --git a/src/gpgmm/common/TraceEvent.h b/src/gpgmm/common/TraceEvent.h index 571e92f89..21b7f3a62 100644 --- a/src/gpgmm/common/TraceEvent.h +++ b/src/gpgmm/common/TraceEvent.h @@ -172,7 +172,8 @@ namespace gpgmm { class PlatformTime; void StartupEventTrace(const std::string& traceFile, - const TraceEventPhase& ignoreMask); + const TraceEventPhase& ignoreMask, + bool flushOnDestruct); void ShutdownEventTrace(); diff --git a/src/gpgmm/d3d12/ResourceAllocatorD3D12.cpp b/src/gpgmm/d3d12/ResourceAllocatorD3D12.cpp index a2acec6c4..761942d34 100644 --- a/src/gpgmm/d3d12/ResourceAllocatorD3D12.cpp +++ b/src/gpgmm/d3d12/ResourceAllocatorD3D12.cpp @@ -343,8 +343,10 @@ namespace gpgmm::d3d12 { } if (newDescriptor.RecordOptions.Flags != ALLOCATOR_RECORD_FLAG_NONE) { - StartupEventTrace(descriptor.RecordOptions.TraceFile, - static_cast(~newDescriptor.RecordOptions.Flags | 0)); + StartupEventTrace( + descriptor.RecordOptions.TraceFile, + static_cast(~newDescriptor.RecordOptions.Flags | 0), + descriptor.RecordOptions.EventScope & ALLOCATOR_RECORD_SCOPE_PER_PROCESS); SetEventMessageLevel(GetLogSeverity(newDescriptor.RecordOptions.MinMessageLevel)); }