MCPcopy Create free account
hub / github.com/Overload-Technologies/Overload / SetupVsync

Function SetupVsync

Dependencies/tracy/client/TracySysTrace.cpp:246–331  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

244}
245
246static void SetupVsync()
247{
248#if _WIN32_WINNT >= _WIN32_WINNT_WINBLUE && !defined(__MINGW32__)
249 const auto psz = sizeof( EVENT_TRACE_PROPERTIES ) + MAX_PATH;
250 s_propVsync = (EVENT_TRACE_PROPERTIES*)tracy_malloc( psz );
251 memset( s_propVsync, 0, sizeof( EVENT_TRACE_PROPERTIES ) );
252 s_propVsync->LogFileMode = EVENT_TRACE_REAL_TIME_MODE;
253 s_propVsync->Wnode.BufferSize = psz;
254#ifdef TRACY_TIMER_QPC
255 s_propVsync->Wnode.ClientContext = 1;
256#else
257 s_propVsync->Wnode.ClientContext = 3;
258#endif
259 s_propVsync->LoggerNameOffset = sizeof( EVENT_TRACE_PROPERTIES );
260 strcpy( ((char*)s_propVsync) + sizeof( EVENT_TRACE_PROPERTIES ), "TracyVsync" );
261
262 auto backup = tracy_malloc( psz );
263 memcpy( backup, s_propVsync, psz );
264
265 const auto controlStatus = ControlTraceA( 0, "TracyVsync", s_propVsync, EVENT_TRACE_CONTROL_STOP );
266 if( controlStatus != ERROR_SUCCESS && controlStatus != ERROR_WMI_INSTANCE_NOT_FOUND )
267 {
268 tracy_free( backup );
269 tracy_free( s_propVsync );
270 return;
271 }
272
273 memcpy( s_propVsync, backup, psz );
274 tracy_free( backup );
275
276 const auto startStatus = StartTraceA( &s_traceHandleVsync, "TracyVsync", s_propVsync );
277 if( startStatus != ERROR_SUCCESS )
278 {
279 tracy_free( s_propVsync );
280 return;
281 }
282
283 EVENT_FILTER_EVENT_ID fe = {};
284 fe.FilterIn = TRUE;
285 fe.Count = 1;
286 fe.Events[0] = 0x0011; // VSyncDPC_Info
287
288 EVENT_FILTER_DESCRIPTOR desc = {};
289 desc.Ptr = (ULONGLONG)&fe;
290 desc.Size = sizeof( fe );
291 desc.Type = EVENT_FILTER_TYPE_EVENT_ID;
292
293 ENABLE_TRACE_PARAMETERS params = {};
294 params.Version = ENABLE_TRACE_PARAMETERS_VERSION_2;
295 params.EnableProperty = EVENT_ENABLE_PROPERTY_IGNORE_KEYWORD_0;
296 params.SourceId = s_propVsync->Wnode.Guid;
297 params.EnableFilterDesc = &desc;
298 params.FilterDescCount = 1;
299
300 uint64_t mask = 0x4000000000000001; // Microsoft_Windows_DxgKrnl_Performance | Base
301 if( EnableTraceEx2( s_traceHandleVsync, &DxgKrnlGuid, EVENT_CONTROL_CODE_ENABLE_PROVIDER, TRACE_LEVEL_INFORMATION, mask, mask, 0, &params ) != ERROR_SUCCESS )
302 {
303 tracy_free( s_propVsync );

Callers 1

SysTraceStartFunction · 0.85

Calls 3

tracy_mallocFunction · 0.85
tracy_freeFunction · 0.85
SetThreadNameFunction · 0.85

Tested by

no test coverage detected