-
-
Save inactive123/f6e7d9f80e1421e3648401d07c93dae7 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#define _WIN32_WINNT 0x0600 | |
#include <windows.h> | |
#include <dwmapi.h> | |
#include <stdio.h> | |
#include <inttypes.h> | |
uint64_t qpc_freq; | |
static void print_ratio(const char *name, UNSIGNED_RATIO val) | |
{ | |
printf("%s: %"PRIu32"/%"PRIu32", %.3fHz\n", | |
name, (uint32_t)val.uiNumerator, (uint32_t)val.uiDenominator, | |
(double)val.uiNumerator / (double)val.uiDenominator); | |
} | |
static void print_qpc_time_hz(const char *name, QPC_TIME time) | |
{ | |
printf("%s: %"PRIu64" qpc units, %.3fHz\n", name, (uint64_t)time, | |
(double)qpc_freq / (double)time); | |
} | |
static void print_qpc_time(const char *name, QPC_TIME time) | |
{ | |
printf("%s: %"PRIu64" qpc units\n", name, (uint64_t)time); | |
} | |
static void print_frame_count(const char *name, DWM_FRAME_COUNT frames) | |
{ | |
printf("%s: %"PRIu64" frames\n", name, (uint64_t)frames); | |
} | |
static void print_uint(const char *name, UINT i) | |
{ | |
printf("%s: %"PRIu32"\n", name, (uint32_t)i); | |
} | |
static void print_ulonglong(const char *name, ULONGLONG i) | |
{ | |
printf("%s: %"PRIu64"\n", name, (uint64_t)i); | |
} | |
int main() | |
{ | |
DWM_TIMING_INFO ti = { .cbSize = sizeof ti }; | |
QueryPerformanceFrequency((LARGE_INTEGER*)&qpc_freq); | |
printf("\e[2J"); | |
for (;;) { | |
DwmGetCompositionTimingInfo(NULL, &ti); | |
printf("\e[0;0H"); | |
print_ratio("rateRefresh", ti.rateRefresh); | |
print_qpc_time_hz("qpcRefreshPeriod", ti.qpcRefreshPeriod); | |
print_ratio("rateCompose", ti.rateCompose); | |
print_qpc_time("qpcVBlank", ti.qpcVBlank); | |
print_frame_count("cRefresh", ti.cRefresh); | |
print_uint("cDXRefresh", ti.cDXRefresh); | |
print_qpc_time("qpcCompose", ti.qpcCompose); | |
print_frame_count("cFrame", ti.cFrame); | |
print_uint("cDXPresent", ti.cDXPresent); | |
print_frame_count("cRefreshFrame", ti.cRefreshFrame); | |
print_frame_count("cFrameSubmitted", ti.cFrameSubmitted); | |
print_uint("cDXPresentSubmitted", ti.cDXPresentSubmitted); | |
print_frame_count("cFrameConfirmed", ti.cFrameConfirmed); | |
print_uint("cDXPresentConfirmed", ti.cDXPresentConfirmed); | |
print_frame_count("cRefreshConfirmed", ti.cRefreshConfirmed); | |
print_uint("cDXRefreshConfirmed", ti.cDXRefreshConfirmed); | |
print_frame_count("cFramesLate", ti.cFramesLate); | |
print_uint("cFramesOutstanding", ti.cFramesOutstanding); | |
print_frame_count("cFrameDisplayed", ti.cFrameDisplayed); | |
print_qpc_time("qpcFrameDisplayed", ti.qpcFrameDisplayed); | |
print_frame_count("cRefreshFrameDisplayed", ti.cRefreshFrameDisplayed); | |
print_frame_count("cFrameComplete", ti.cFrameComplete); | |
print_qpc_time("qpcFrameComplete", ti.qpcFrameComplete); | |
print_frame_count("cFramePending", ti.cFramePending); | |
print_qpc_time("qpcFramePending", ti.qpcFramePending); | |
print_frame_count("cFramesDisplayed", ti.cFramesDisplayed); | |
print_frame_count("cFramesComplete", ti.cFramesComplete); | |
print_frame_count("cFramesPending", ti.cFramesPending); | |
print_frame_count("cFramesAvailable", ti.cFramesAvailable); | |
print_frame_count("cFramesDropped", ti.cFramesDropped); | |
print_frame_count("cFramesMissed", ti.cFramesMissed); | |
print_frame_count("cRefreshNextDisplayed", ti.cRefreshNextDisplayed); | |
print_frame_count("cRefreshNextPresented", ti.cRefreshNextPresented); | |
print_frame_count("cRefreshesDisplayed", ti.cRefreshesDisplayed); | |
print_frame_count("cRefreshesPresented", ti.cRefreshesPresented); | |
print_frame_count("cRefreshStarted", ti.cRefreshStarted); | |
print_ulonglong("cPixelsReceived", ti.cPixelsReceived); | |
print_ulonglong("cPixelsDrawn", ti.cPixelsDrawn); | |
print_frame_count("cBuffersEmpty", ti.cBuffersEmpty); | |
fflush(stdout); | |
DwmFlush(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment