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&
6262int 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
7171int 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;
8383PresentEvent const * gModifiedPresent = nullptr ;
8484PresentEvent 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 ()); }
9292void 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}
101101void 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}
115115void 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}
124124void 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}
141141void 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}
157157void 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}
168168void PrintPresentFlags (uint32_t flags)
169169{
170- if (flags & DXGI_PRESENT_TEST) printf ( " TEST" );
170+ if (flags & DXGI_PRESENT_TEST) wprintf ( L " TEST" );
171171}
172172
173173void 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
178178void 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
184184void 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
213213void 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()
305305void 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