From f450c677e794d6bc46409332c8515e64977f1eb7 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Tue, 12 Nov 2013 14:03:40 -0800 Subject: [PATCH] Don't print a frame-time report for the first frame after glXMakeCurrent Fips was already dropping the first frame's report (waiting for another frame to go by to ensure that all the queries are available in order to compute deltas). But we were getting wildly out-of-range frame timings for later frames when the application switched contexts, (since fips was subtracting query values obtained in one context frome value obtained in another context). We fix this by dropping one frame-time report at every context change. We may very well want to use a different time source to obtain frame times, since (for DOTA 2 at least) the reports from the dropped frames would be particularly interesting to see (such as large frames compiling many shaders or uploading a lot of texture data). At least we're no longer getting the wild numbers that throw off the graph scale so badly. --- metrics.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/metrics.c b/metrics.c index 7b2a558..8f96133 100644 --- a/metrics.c +++ b/metrics.c @@ -74,6 +74,9 @@ typedef struct op_metrics struct metrics { + /* Flag to indicate first frame is being processed. */ + bool first_frame; + /* Description of all available peformance counters, counter * groups, their names and IDs, etc. */ metrics_info_t *info; @@ -144,6 +147,8 @@ metrics_create (metrics_info_t *info) metrics->info = info; + metrics->first_frame = true; + metrics->op = 0; metrics->timer_begun_id = 0; @@ -852,10 +857,12 @@ metrics_end_frame_pre_swap (metrics_t *metrics) glGetQueryObjectui64v (metrics->swap_end_timestamp_id, GL_QUERY_RESULT, &swap_end_timestamp); - - if (frames == 0) { + + if (metrics->first_frame) { /* Print header */ printf ("# frame: Frame_Number Frame_Time_milliseconds Frame_latency_milliseconds CPU_load GPU_load\n"); + + metrics->first_frame = false; } else { /* Subtract previous frame's times to get frame times. */ frame_time_ns = subtract_timestamp (swap_end_timestamp, -- 2.43.0