Skip to content

Commit 338ce6b

Browse files
Fix --debug_verbose_trace to use wprintf()
1 parent 083cea9 commit 338ce6b

File tree

2 files changed

+102
-102
lines changed

2 files changed

+102
-102
lines changed

PresentData/Debug.cpp

Lines changed: 86 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (C) 2019-2023 Intel Corporation
1+
// Copyright (C) 2019-2024 Intel Corporation
22
// SPDX-License-Identifier: MIT
33

44
#include "Debug.hpp"
@@ -62,15 +62,15 @@ void InitializeTimestampInfo(LARGE_INTEGER* firstTimestamp, LARGE_INTEGER const&
6262
int PrintTime(uint64_t value)
6363
{
6464
return value == 0
65-
? printf("0")
65+
? wprintf(L"0")
6666
: value < (uint64_t) gFirstTimestamp->QuadPart
67-
? printf("-%s", AddCommas(ConvertTimestampDeltaToNs((uint64_t) gFirstTimestamp->QuadPart - value)))
68-
: printf("%s", AddCommas(ConvertTimestampToNs(value)));
67+
? wprintf(L"-%hs", AddCommas(ConvertTimestampDeltaToNs((uint64_t) gFirstTimestamp->QuadPart - value)))
68+
: wprintf(L"%hs", AddCommas(ConvertTimestampToNs(value)));
6969
}
7070

7171
int PrintTimeDelta(uint64_t value)
7272
{
73-
return printf("%s", value == 0 ? "0" : AddCommas(ConvertTimestampDeltaToNs(value)));
73+
return wprintf(L"%hs", value == 0 ? "0" : AddCommas(ConvertTimestampDeltaToNs(value)));
7474
}
7575

7676

@@ -83,115 +83,115 @@ bool gVerboseTraceEnabled = false;
8383
PresentEvent const* gModifiedPresent = nullptr;
8484
PresentEvent gOriginalPresentValues;
8585

86-
void PrintU32(uint32_t value) { printf("%u", value); }
87-
void PrintU64(uint64_t value) { printf("%llu", value); }
88-
void PrintU64x(uint64_t value) { printf("0x%llx", value); }
89-
void PrintBool(bool value) { printf("%s", value ? "true" : "false"); }
90-
void PrintString(std::string const& value) { printf("%s", value.c_str()); }
91-
void PrintWString(std::wstring const& value) { printf("%ls", value.c_str()); }
86+
void PrintU32(uint32_t value) { wprintf(L"%u", value); }
87+
void PrintU64(uint64_t value) { wprintf(L"%llu", value); }
88+
void PrintU64x(uint64_t value) { wprintf(L"0x%llx", value); }
89+
void PrintBool(bool value) { wprintf(L"%hs", value ? "true" : "false"); }
90+
void PrintString(std::string const& value) { wprintf(L"%hs", value.c_str()); }
91+
void PrintWString(std::wstring const& value) { wprintf(L"%s", value.c_str()); }
9292
void PrintRuntime(Runtime value)
9393
{
9494
switch (value) {
95-
case Runtime::DXGI: printf("DXGI"); break;
96-
case Runtime::D3D9: printf("D3D9"); break;
97-
case Runtime::Other: printf("Other"); break;
98-
default: printf("Unknown (%u)", value); assert(false); break;
95+
case Runtime::DXGI: wprintf(L"DXGI"); break;
96+
case Runtime::D3D9: wprintf(L"D3D9"); break;
97+
case Runtime::Other: wprintf(L"Other"); break;
98+
default: wprintf(L"Unknown (%u)", value); assert(false); break;
9999
}
100100
}
101101
void PrintPresentMode(PresentMode value)
102102
{
103103
switch (value) {
104-
case PresentMode::Unknown: printf("Unknown"); break;
105-
case PresentMode::Hardware_Legacy_Flip: printf("Hardware_Legacy_Flip"); break;
106-
case PresentMode::Hardware_Legacy_Copy_To_Front_Buffer: printf("Hardware_Legacy_Copy_To_Front_Buffer"); break;
107-
case PresentMode::Hardware_Independent_Flip: printf("Hardware_Independent_Flip"); break;
108-
case PresentMode::Composed_Flip: printf("Composed_Flip"); break;
109-
case PresentMode::Composed_Copy_GPU_GDI: printf("Composed_Copy_GPU_GDI"); break;
110-
case PresentMode::Composed_Copy_CPU_GDI: printf("Composed_Copy_CPU_GDI"); break;
111-
case PresentMode::Hardware_Composed_Independent_Flip: printf("Hardware_Composed_Independent_Flip"); break;
112-
default: printf("Unknown (%u)", value); assert(false); break;
104+
case PresentMode::Unknown: wprintf(L"Unknown"); break;
105+
case PresentMode::Hardware_Legacy_Flip: wprintf(L"Hardware_Legacy_Flip"); break;
106+
case PresentMode::Hardware_Legacy_Copy_To_Front_Buffer: wprintf(L"Hardware_Legacy_Copy_To_Front_Buffer"); break;
107+
case PresentMode::Hardware_Independent_Flip: wprintf(L"Hardware_Independent_Flip"); break;
108+
case PresentMode::Composed_Flip: wprintf(L"Composed_Flip"); break;
109+
case PresentMode::Composed_Copy_GPU_GDI: wprintf(L"Composed_Copy_GPU_GDI"); break;
110+
case PresentMode::Composed_Copy_CPU_GDI: wprintf(L"Composed_Copy_CPU_GDI"); break;
111+
case PresentMode::Hardware_Composed_Independent_Flip: wprintf(L"Hardware_Composed_Independent_Flip"); break;
112+
default: wprintf(L"Unknown (%u)", value); assert(false); break;
113113
}
114114
}
115115
void PrintPresentResult(PresentResult value)
116116
{
117117
switch (value) {
118-
case PresentResult::Unknown: printf("Unknown"); break;
119-
case PresentResult::Presented: printf("Presented"); break;
120-
case PresentResult::Discarded: printf("Discarded"); break;
121-
default: printf("Unknown (%u)", value); assert(false); break;
118+
case PresentResult::Unknown: wprintf(L"Unknown"); break;
119+
case PresentResult::Presented: wprintf(L"Presented"); break;
120+
case PresentResult::Discarded: wprintf(L"Discarded"); break;
121+
default: wprintf(L"Unknown (%u)", value); assert(false); break;
122122
}
123123
}
124124
void PrintPresentHistoryModel(uint32_t model)
125125
{
126126
using namespace Microsoft_Windows_DxgKrnl;
127127
switch (model) {
128-
case PresentModel::D3DKMT_PM_UNINITIALIZED: printf("UNINITIALIZED"); break;
129-
case PresentModel::D3DKMT_PM_REDIRECTED_GDI: printf("REDIRECTED_GDI"); break;
130-
case PresentModel::D3DKMT_PM_REDIRECTED_FLIP: printf("REDIRECTED_FLIP"); break;
131-
case PresentModel::D3DKMT_PM_REDIRECTED_BLT: printf("REDIRECTED_BLT"); break;
132-
case PresentModel::D3DKMT_PM_REDIRECTED_VISTABLT: printf("REDIRECTED_VISTABLT"); break;
133-
case PresentModel::D3DKMT_PM_SCREENCAPTUREFENCE: printf("SCREENCAPTUREFENCE"); break;
134-
case PresentModel::D3DKMT_PM_REDIRECTED_GDI_SYSMEM: printf("REDIRECTED_GDI_SYSMEM"); break;
135-
case PresentModel::D3DKMT_PM_REDIRECTED_COMPOSITION: printf("REDIRECTED_COMPOSITION"); break;
136-
case PresentModel::D3DKMT_PM_SURFACECOMPLETE: printf("SURFACECOMPLETE"); break;
137-
case PresentModel::D3DKMT_PM_FLIPMANAGER: printf("FLIPMANAGER"); break;
138-
default: printf("Unknown (%u)", model); assert(false); break;
128+
case PresentModel::D3DKMT_PM_UNINITIALIZED: wprintf(L"UNINITIALIZED"); break;
129+
case PresentModel::D3DKMT_PM_REDIRECTED_GDI: wprintf(L"REDIRECTED_GDI"); break;
130+
case PresentModel::D3DKMT_PM_REDIRECTED_FLIP: wprintf(L"REDIRECTED_FLIP"); break;
131+
case PresentModel::D3DKMT_PM_REDIRECTED_BLT: wprintf(L"REDIRECTED_BLT"); break;
132+
case PresentModel::D3DKMT_PM_REDIRECTED_VISTABLT: wprintf(L"REDIRECTED_VISTABLT"); break;
133+
case PresentModel::D3DKMT_PM_SCREENCAPTUREFENCE: wprintf(L"SCREENCAPTUREFENCE"); break;
134+
case PresentModel::D3DKMT_PM_REDIRECTED_GDI_SYSMEM: wprintf(L"REDIRECTED_GDI_SYSMEM"); break;
135+
case PresentModel::D3DKMT_PM_REDIRECTED_COMPOSITION: wprintf(L"REDIRECTED_COMPOSITION"); break;
136+
case PresentModel::D3DKMT_PM_SURFACECOMPLETE: wprintf(L"SURFACECOMPLETE"); break;
137+
case PresentModel::D3DKMT_PM_FLIPMANAGER: wprintf(L"FLIPMANAGER"); break;
138+
default: wprintf(L"Unknown (%u)", model); assert(false); break;
139139
}
140140
}
141141
void PrintQueuePacketType(uint32_t type)
142142
{
143143
using namespace Microsoft_Windows_DxgKrnl;
144144
switch (type) {
145-
case QueuePacketType::DXGKETW_RENDER_COMMAND_BUFFER: printf("RENDER"); break;
146-
case QueuePacketType::DXGKETW_DEFERRED_COMMAND_BUFFER: printf("DEFERRED"); break;
147-
case QueuePacketType::DXGKETW_SYSTEM_COMMAND_BUFFER: printf("SYSTEM"); break;
148-
case QueuePacketType::DXGKETW_MMIOFLIP_COMMAND_BUFFER: printf("MMIOFLIP"); break;
149-
case QueuePacketType::DXGKETW_WAIT_COMMAND_BUFFER: printf("WAIT"); break;
150-
case QueuePacketType::DXGKETW_SIGNAL_COMMAND_BUFFER: printf("SIGNAL"); break;
151-
case QueuePacketType::DXGKETW_DEVICE_COMMAND_BUFFER: printf("DEVICE"); break;
152-
case QueuePacketType::DXGKETW_SOFTWARE_COMMAND_BUFFER: printf("SOFTWARE"); break;
153-
case QueuePacketType::DXGKETW_PAGING_COMMAND_BUFFER: printf("PAGING"); break;
154-
default: printf("Unknown (%u)", type); assert(false); break;
145+
case QueuePacketType::DXGKETW_RENDER_COMMAND_BUFFER: wprintf(L"RENDER"); break;
146+
case QueuePacketType::DXGKETW_DEFERRED_COMMAND_BUFFER: wprintf(L"DEFERRED"); break;
147+
case QueuePacketType::DXGKETW_SYSTEM_COMMAND_BUFFER: wprintf(L"SYSTEM"); break;
148+
case QueuePacketType::DXGKETW_MMIOFLIP_COMMAND_BUFFER: wprintf(L"MMIOFLIP"); break;
149+
case QueuePacketType::DXGKETW_WAIT_COMMAND_BUFFER: wprintf(L"WAIT"); break;
150+
case QueuePacketType::DXGKETW_SIGNAL_COMMAND_BUFFER: wprintf(L"SIGNAL"); break;
151+
case QueuePacketType::DXGKETW_DEVICE_COMMAND_BUFFER: wprintf(L"DEVICE"); break;
152+
case QueuePacketType::DXGKETW_SOFTWARE_COMMAND_BUFFER: wprintf(L"SOFTWARE"); break;
153+
case QueuePacketType::DXGKETW_PAGING_COMMAND_BUFFER: wprintf(L"PAGING"); break;
154+
default: wprintf(L"Unknown (%u)", type); assert(false); break;
155155
}
156156
}
157157
void PrintDmaPacketType(uint32_t type)
158158
{
159159
using namespace Microsoft_Windows_DxgKrnl;
160160
switch (type) {
161-
case DmaPacketType::DXGKETW_CLIENT_RENDER_BUFFER: printf("CLIENT_RENDER"); break;
162-
case DmaPacketType::DXGKETW_CLIENT_PAGING_BUFFER: printf("CLIENT_PAGING"); break;
163-
case DmaPacketType::DXGKETW_SYSTEM_PAGING_BUFFER: printf("SYSTEM_PAGING"); break;
164-
case DmaPacketType::DXGKETW_SYSTEM_PREEMTION_BUFFER: printf("SYSTEM_PREEMTION"); break;
165-
default: printf("Unknown (%u)", type); assert(false); break;
161+
case DmaPacketType::DXGKETW_CLIENT_RENDER_BUFFER: wprintf(L"CLIENT_RENDER"); break;
162+
case DmaPacketType::DXGKETW_CLIENT_PAGING_BUFFER: wprintf(L"CLIENT_PAGING"); break;
163+
case DmaPacketType::DXGKETW_SYSTEM_PAGING_BUFFER: wprintf(L"SYSTEM_PAGING"); break;
164+
case DmaPacketType::DXGKETW_SYSTEM_PREEMTION_BUFFER: wprintf(L"SYSTEM_PREEMTION"); break;
165+
default: wprintf(L"Unknown (%u)", type); assert(false); break;
166166
}
167167
}
168168
void PrintPresentFlags(uint32_t flags)
169169
{
170-
if (flags & DXGI_PRESENT_TEST) printf("TEST");
170+
if (flags & DXGI_PRESENT_TEST) wprintf(L"TEST");
171171
}
172172

173173
void PrintEventHeader(EVENT_HEADER const& hdr)
174174
{
175-
printf("%16s %5u %5u ", AddCommas(ConvertTimestampToNs(hdr.TimeStamp.QuadPart)), hdr.ProcessId, hdr.ThreadId);
175+
wprintf(L"%16hs %5u %5u ", AddCommas(ConvertTimestampToNs(hdr.TimeStamp.QuadPart)), hdr.ProcessId, hdr.ThreadId);
176176
}
177177

178178
void PrintEventHeader(EVENT_HEADER const& hdr, char const* name)
179179
{
180180
PrintEventHeader(hdr);
181-
printf("%s\n", name);
181+
wprintf(L"%hs\n", name);
182182
}
183183

184184
void PrintEventHeader(EVENT_RECORD* eventRecord, EventMetadata* metadata, char const* name, std::initializer_list<void*> props)
185185
{
186186
assert((props.size() % 2) == 0);
187187

188188
PrintEventHeader(eventRecord->EventHeader);
189-
printf("%s", name);
189+
wprintf(L"%hs", name);
190190
for (auto ii = props.begin(), ie = props.end(); ii != ie; ++ii) {
191191
auto propName = (wchar_t const*) *ii; ++ii;
192192
auto propFunc = *ii;
193193

194-
printf(" %ls=", propName);
194+
wprintf(L" %s=", propName);
195195

196196
if (propFunc == PrintBool) PrintBool(metadata->GetEventData<uint32_t>(eventRecord, propName) != 0);
197197
else if (propFunc == PrintU32) PrintU32(metadata->GetEventData<uint32_t>(eventRecord, propName));
@@ -207,7 +207,7 @@ void PrintEventHeader(EVENT_RECORD* eventRecord, EventMetadata* metadata, char c
207207
else if (propFunc == PrintPresentHistoryModel) PrintPresentHistoryModel(metadata->GetEventData<uint32_t>(eventRecord, propName));
208208
else assert(false);
209209
}
210-
printf("\n");
210+
wprintf(L"\n");
211211
}
212212

213213
void FlushModifiedPresent()
@@ -219,11 +219,11 @@ void FlushModifiedPresent()
219219
#define FLUSH_MEMBER(_Fn, _Name) \
220220
if (gModifiedPresent->_Name != gOriginalPresentValues._Name) { \
221221
if (changedCount++ == 0) { \
222-
printf("%*sp%llu", 17 + 6 + 6, "", gModifiedPresent->Id); \
222+
wprintf(L"%*hsp%llu", 17 + 6 + 6, "", gModifiedPresent->Id); \
223223
} \
224-
printf(" " #_Name "="); \
224+
wprintf(L" " L#_Name L"="); \
225225
_Fn(gOriginalPresentValues._Name); \
226-
printf("->"); \
226+
wprintf(L"->"); \
227227
_Fn(gModifiedPresent->_Name); \
228228
}
229229
FLUSH_MEMBER(PrintTime, PresentStopTime)
@@ -254,7 +254,7 @@ void FlushModifiedPresent()
254254
#undef FLUSH_MEMBER
255255

256256
if (changedCount > 0) {
257-
printf("\n");
257+
wprintf(L"\n");
258258
}
259259

260260
gModifiedPresent = nullptr;
@@ -305,7 +305,7 @@ bool IsVerboseTraceEnabled()
305305
void DebugAssertImpl(wchar_t const* msg, wchar_t const* file, int line)
306306
{
307307
if (IsVerboseTraceEnabled()) {
308-
printf("ASSERTION FAILED: %ls(%d): %ls\n", file, line, msg);
308+
wprintf(L"ASSERTION FAILED: %s(%d): %s\n", file, line, msg);
309309
} else {
310310
#ifndef NDEBUG
311311
_wassert(msg, file, line);
@@ -320,7 +320,7 @@ void VerboseTraceEventImpl(PMTraceConsumer* pmConsumer, EVENT_RECORD* eventRecor
320320
static bool isFirstEventTraced = true;
321321
if (isFirstEventTraced) {
322322
isFirstEventTraced = false;
323-
printf(" Time (ns) PID TID EVENT\n");
323+
wprintf(L" Time (ns) PID TID EVENT\n");
324324
}
325325

326326
FlushModifiedPresent();
@@ -400,7 +400,7 @@ void VerboseTraceEventImpl(PMTraceConsumer* pmConsumer, EVENT_RECORD* eventRecor
400400
case VSyncDPC_Info::Id: {
401401
auto FlipFenceId = metadata->GetEventData<uint64_t>(eventRecord, L"FlipFenceId");
402402
PrintEventHeader(hdr);
403-
printf("VSyncDPC_Info SubmitSequence=%llu FlipId=0x%llx\n",
403+
wprintf(L"VSyncDPC_Info SubmitSequence=%llu FlipId=0x%llx\n",
404404
FlipFenceId >> 32,
405405
FlipFenceId & 0xffffffffll);
406406
break;
@@ -417,30 +417,30 @@ void VerboseTraceEventImpl(PMTraceConsumer* pmConsumer, EVENT_RECORD* eventRecor
417417
auto FlipSubmitSequence = desc[1].GetArray<uint64_t>(FlipEntryCount);
418418

419419
PrintEventHeader(hdr);
420-
printf("%s", hdr.EventDescriptor.Id == HSyncDPCMultiPlane_Info::Id ? "HSyncDPCMultiPlane_Info" : "VSyncDPCMultiPlane_Info");
420+
wprintf(L"%hs", hdr.EventDescriptor.Id == HSyncDPCMultiPlane_Info::Id ? "HSyncDPCMultiPlane_Info" : "VSyncDPCMultiPlane_Info");
421421
for (uint32_t i = 0; i < FlipEntryCount; ++i) {
422-
if (i > 0) printf("\n ");
423-
printf(" SubmitSequence[%u]=%llu FlipId[%u]=0x%llx",
422+
if (i > 0) wprintf(L"\n ");
423+
wprintf(L" SubmitSequence[%u]=%llu FlipId[%u]=0x%llx",
424424
i, FlipSubmitSequence[i] >> 32,
425425
i, FlipSubmitSequence[i] & 0xffffffffll);
426426
}
427-
printf("\n");
427+
wprintf(L"\n");
428428
break;
429429
}
430430
case MMIOFlipMultiPlaneOverlay_Info::Id: {
431431
auto FlipSubmitSequence = metadata->GetEventData<uint64_t>(eventRecord, L"FlipSubmitSequence");
432432
PrintEventHeader(hdr);
433-
printf("DXGKrnl_MMIOFlipMultiPlaneOverlay_Info SubmitSequence=%llu FlipId=0x%llx",
433+
wprintf(L"DXGKrnl_MMIOFlipMultiPlaneOverlay_Info SubmitSequence=%llu FlipId=0x%llx",
434434
FlipSubmitSequence >> 32,
435435
FlipSubmitSequence & 0xffffffffll);
436436
if (hdr.EventDescriptor.Version >= 2) {
437437
switch (metadata->GetEventData<uint32_t>(eventRecord, L"FlipEntryStatusAfterFlip")) {
438-
case FlipEntryStatus::FlipWaitVSync: printf(" FlipWaitVSync"); break;
439-
case FlipEntryStatus::FlipWaitComplete: printf(" FlipWaitComplete"); break;
440-
case FlipEntryStatus::FlipWaitHSync: printf(" FlipWaitHSync"); break;
438+
case FlipEntryStatus::FlipWaitVSync: wprintf(L" FlipWaitVSync"); break;
439+
case FlipEntryStatus::FlipWaitComplete: wprintf(L" FlipWaitComplete"); break;
440+
case FlipEntryStatus::FlipWaitHSync: wprintf(L" FlipWaitHSync"); break;
441441
}
442442
}
443-
printf("\n");
443+
wprintf(L"\n");
444444
break;
445445
}
446446
}
@@ -491,25 +491,25 @@ void VerboseTraceEventImpl(PMTraceConsumer* pmConsumer, EVENT_RECORD* eventRecor
491491
auto NewState = desc[3].GetData<uint32_t>();
492492

493493
PrintEventHeader(hdr);
494-
printf("Win32K_TokenStateChanged");
494+
wprintf(L"Win32K_TokenStateChanged");
495495

496496
auto presentId = LookupPresentId(pmConsumer, CompositionSurfaceLuid, PresentCount, BindId);
497497
if (presentId == 0) {
498-
printf(" (unknown present)");
498+
wprintf(L" (unknown present)");
499499
} else {
500-
printf(" p%llu", presentId);
500+
wprintf(L" p%llu", presentId);
501501
}
502502

503503
switch (NewState) {
504-
case TokenState::Completed: printf(" NewState=Completed"); break;
505-
case TokenState::InFrame: printf(" NewState=InFrame"); break;
506-
case TokenState::Confirmed: printf(" NewState=Confirmed"); break;
507-
case TokenState::Retired: printf(" NewState=Retired"); break;
508-
case TokenState::Discarded: printf(" NewState=Discarded"); break;
509-
default: printf(" NewState=Unknown (%u)", NewState); assert(false); break;
504+
case TokenState::Completed: wprintf(L" NewState=Completed"); break;
505+
case TokenState::InFrame: wprintf(L" NewState=InFrame"); break;
506+
case TokenState::Confirmed: wprintf(L" NewState=Confirmed"); break;
507+
case TokenState::Retired: wprintf(L" NewState=Retired"); break;
508+
case TokenState::Discarded: wprintf(L" NewState=Discarded"); break;
509+
default: wprintf(L" NewState=Unknown (%u)", NewState); assert(false); break;
510510
}
511511

512-
printf("\n");
512+
wprintf(L"\n");
513513
} break;
514514
}
515515
return;

0 commit comments

Comments
 (0)