11#include " EventTraceHelper.h"
22#include < direct.h>
33
4- #define LOGSESSION_NAME _T ( " winml" )
4+ #define LOGSESSION_NAME L " winml"
55
6- struct __declspec(uuid(" {BCAD6AEE-C08D-4F66-828C-4C43461A033D}" )) DXGKRNL_PROVIDER_GUID_HOLDER ;
6+ struct __declspec (uuid(" {BCAD6AEE-C08D-4F66-828C-4C43461A033D}" )) WINML_PROVIDER_GUID_HOLDER ;
77
8- static const auto DXGKRNL_PROVIDER_GUID = __uuidof(DXGKRNL_PROVIDER_GUID_HOLDER );
8+ static const auto WINML_PROVIDER_GUID = __uuidof(WINML_PROVIDER_GUID_HOLDER );
99
10- DWORD EventTraceHelper::PointerSize = 0 ;
11- CommandLineArgs EventTraceHelper::commandArgs;
10+ DWORD PointerSize = 0 ;
1211
13- /* logman update trace winml -p {BCAD6AEE-C08D-4F66-828C-4C43461A033D} <keyword> <level verbosity> -ets
12+ /* logman update trace winml -p {BCAD6AEE-C08D-4F66-828C-4C43461A033D} <keyword> <level verbosity> -ets
1413To capture only WinML Traces replace <keyword> with 0x1
1514To capture only Lotus Profiling Traces replace <keyword> with 0x2
1615 Bit 0: WinML Traces
@@ -409,8 +408,7 @@ DWORD EventTraceHelper::FormatDataForCPUFallback(_In_ const PEVENT_RECORD EventR
409408 return status;
410409 }
411410 }
412- if (commandArgs.UseGPU () &&
413- wcscmp (executionProvider.c_str (), L" CPUExecutionProvider" ) == 0 &&
411+ if (wcscmp (executionProvider.c_str (), L" CPUExecutionProvider" ) == 0 &&
414412 !operatorName.empty ())
415413 {
416414 wprintf (L" WARNING: CPU fallback detected for operator %s(%s), duration: %s\n " , operatorName.c_str (),
@@ -452,21 +450,20 @@ VOID WINAPI EventTraceHelper::EventRecordCallback(EVENT_RECORD* pEventRecord)
452450 if (ERROR_SUCCESS != status)
453451 {
454452 printf (" GetEventInformation failed with %lu\n " , status);
455- goto cleanup;
456453 }
457-
458- if (DecodingSourceTlg == pInfo->DecodingSource )
459- {
460- FormatDataForCPUFallback (pEventRecord, pInfo);
461- }
462- else // Not handling any events other than Tlg type
454+ else
463455 {
464- // Do nothing
456+ if (DecodingSourceTlg == (pInfo)->DecodingSource )
457+ {
458+ FormatDataForCPUFallback (pEventRecord, pInfo);
459+ }
460+ else // Not handling any events other than Tlg type
461+ {
462+ // Do nothing
463+ }
465464 }
466465 }
467466
468- cleanup:
469-
470467 if (pInfo)
471468 {
472469 free (pInfo);
@@ -499,26 +496,33 @@ void EventTraceHelper::ProcessEventTrace(PTRACEHANDLE traceHandle)
499496
500497void EventTraceHelper::Start ()
501498{
499+ if (!commandArgs.UseGPU ())
500+ {
501+ return ;
502+ }
502503 int bufferSize = sizeof (EVENT_TRACE_PROPERTIES) + (sizeof (LOGSESSION_NAME) + 1 ) * sizeof (wchar_t );
503- sessionProperties = static_cast <PEVENT_TRACE_PROPERTIES>(malloc (bufferSize));
504- ZeroMemory (sessionProperties , bufferSize);
504+ m_sessionProperties = static_cast <PEVENT_TRACE_PROPERTIES>(malloc (bufferSize));
505+ ZeroMemory (m_sessionProperties , bufferSize);
505506
506507 GUID guid;
507508 UuidCreate (&guid);
508- sessionProperties ->Wnode .BufferSize = static_cast <ULONG>(bufferSize);
509- sessionProperties ->Wnode .Guid = guid;
510- sessionProperties ->Wnode .ClientContext = 0 ;
511- sessionProperties ->Wnode .Flags = WNODE_FLAG_TRACED_GUID;
512- sessionProperties ->LogFileMode = EVENT_TRACE_REAL_TIME_MODE;
513- sessionProperties ->LoggerNameOffset = sizeof (EVENT_TRACE_PROPERTIES);
514-
515- auto hr = StartTrace (static_cast <PTRACEHANDLE>(&sessionHandle ), LOGSESSION_NAME, sessionProperties );
509+ m_sessionProperties ->Wnode .BufferSize = static_cast <ULONG>(bufferSize);
510+ m_sessionProperties ->Wnode .Guid = guid;
511+ m_sessionProperties ->Wnode .ClientContext = 0 ;
512+ m_sessionProperties ->Wnode .Flags = WNODE_FLAG_TRACED_GUID;
513+ m_sessionProperties ->LogFileMode = EVENT_TRACE_REAL_TIME_MODE;
514+ m_sessionProperties ->LoggerNameOffset = sizeof (EVENT_TRACE_PROPERTIES);
515+
516+ auto hr = StartTrace (static_cast <PTRACEHANDLE>(&m_sessionHandle ), LOGSESSION_NAME, m_sessionProperties );
516517 if (hr != ERROR_SUCCESS)
517518 {
518- printf (" Error starting event trace: Trace already started %s\n " , GetLastError ());
519+ printf (" Warning starting event trace: Trace already started %d\n " , GetLastError ());
520+ }
521+ else
522+ {
523+ auto status = EnableTraceEx2 (m_sessionHandle, &WINML_PROVIDER_GUID, EVENT_CONTROL_CODE_ENABLE_PROVIDER,
524+ TRACE_LEVEL_VERBOSE, 2 , 0 , 0 , nullptr );
519525 }
520- auto status = EnableTraceEx2 (sessionHandle, &DXGKRNL_PROVIDER_GUID, EVENT_CONTROL_CODE_ENABLE_PROVIDER,
521- TRACE_LEVEL_VERBOSE, 2 , 0 , 0 , nullptr );
522526
523527 EVENT_TRACE_LOGFILE loggerInfo = {};
524528
@@ -536,24 +540,25 @@ void EventTraceHelper::Start()
536540
537541 loggerInfo.LoggerName = const_cast <LPWSTR>(LOGSESSION_NAME);
538542
539- traceHandle = OpenTrace (&loggerInfo);
540- if (traceHandle == INVALID_PROCESSTRACE_HANDLE)
543+ m_traceHandle = OpenTrace (&loggerInfo);
544+ if (m_traceHandle == INVALID_PROCESSTRACE_HANDLE)
541545 {
542546 printf (" Error opening event trace: OpenTrace failed with %lu\n " , GetLastError ());
543547 throw std::runtime_error (" Unable to open trace" );
544548 }
545549
546- if (pHeader->PointerSize != sizeof (PVOID))
547- pHeader = (PTRACE_LOGFILE_HEADER)((PUCHAR)pHeader + 2 * (pHeader->PointerSize - sizeof (PVOID)));
548-
549- PTRACEHANDLE pt = static_cast <PTRACEHANDLE>(&traceHandle);
550- threadPool.SubmitWork (ProcessEventTrace, pt);
550+ PTRACEHANDLE pt = static_cast <PTRACEHANDLE>(&m_traceHandle);
551+ m_threadPool.SubmitWork (ProcessEventTrace, pt);
551552}
552553
553554void EventTraceHelper::Stop ()
554555{
555- auto status = CloseTrace (traceHandle);
556- status = ControlTrace (sessionHandle, nullptr , sessionProperties, EVENT_TRACE_CONTROL_STOP);
557- status = EnableTraceEx2 (sessionHandle, &DXGKRNL_PROVIDER_GUID, EVENT_CONTROL_CODE_DISABLE_PROVIDER, 0 , 0 , 0 , 0 , nullptr );
556+ if (!commandArgs.UseGPU ())
557+ {
558+ return ;
559+ }
560+ auto status = CloseTrace (m_traceHandle);
561+ status = ControlTrace (m_sessionHandle, nullptr , m_sessionProperties, EVENT_TRACE_CONTROL_STOP);
562+ status = EnableTraceEx2 (m_sessionHandle, &WINML_PROVIDER_GUID, EVENT_CONTROL_CODE_DISABLE_PROVIDER, 0 , 0 , 0 , 0 , nullptr );
558563}
559564
0 commit comments