-
-
Save inactive123/e7be69129d7e338ed47dd02b1c265266 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