Skip to content

Commit b63e9be

Browse files
author
REDMOND\jingf
committed
N/A
1 parent b969e24 commit b63e9be

File tree

2 files changed

+52
-48
lines changed

2 files changed

+52
-48
lines changed

Tools/WinMLRunner/src/EventTraceHelper.cpp

Lines changed: 46 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
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
1413
To capture only WinML Traces replace <keyword> with 0x1
1514
To 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

500497
void 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

553554
void 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

Tools/WinMLRunner/src/EventTraceHelper.h

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,14 @@ using namespace std;
1414
class EventTraceHelper
1515
{
1616
private:
17-
TRACEHANDLE traceHandle;
18-
TRACEHANDLE sessionHandle;
19-
PEVENT_TRACE_PROPERTIES sessionProperties;
20-
ThreadPool threadPool;
21-
static DWORD PointerSize;
22-
static CommandLineArgs commandArgs;
17+
TRACEHANDLE m_traceHandle;
18+
TRACEHANDLE m_sessionHandle;
19+
PEVENT_TRACE_PROPERTIES m_sessionProperties;
20+
ThreadPool m_threadPool;
21+
CommandLineArgs commandArgs;
2322

2423
public:
25-
EventTraceHelper(CommandLineArgs args) : sessionHandle(INVALID_PROCESSTRACE_HANDLE), threadPool(1)
24+
EventTraceHelper(CommandLineArgs args) : m_sessionHandle(INVALID_PROCESSTRACE_HANDLE), m_threadPool(1)
2625
{
2726
commandArgs = args;
2827
}

0 commit comments

Comments
 (0)