From 9af5c3f254aa5e886de5697d3bd6470c93ec01d0 Mon Sep 17 00:00:00 2001 From: Joshua Ashton Date: Sat, 5 Sep 2020 17:59:30 +0100 Subject: [PATCH] Cleanup vblankmanager Keep everything on the same timescale. Avoid using floats here when we can just use integer maths. Add demarcations. Misc. cleanup. --- src/vblankmanager.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/vblankmanager.cpp b/src/vblankmanager.cpp index eefd67e..0c001dd 100644 --- a/src/vblankmanager.cpp +++ b/src/vblankmanager.cpp @@ -19,16 +19,14 @@ static Display *g_nestedDpy; std::atomic g_lastVblank; -float g_flVblankDrawBufferMS = 5.0; +uint64_t g_uVblankDrawBufferNS = 5'000'000; void vblankThreadRun( void ) { while ( true ) { - uint64_t lastVblank = g_lastVblank; - uint64_t nsecInterval = uint64_t(1.0 / g_nOutputRefresh * 1000.0 * 1000.0 * 1000.0); - - lastVblank -= (uint64_t)(g_flVblankDrawBufferMS * 1000 * 1000); + uint64_t lastVblank = g_lastVblank - g_uVblankDrawBufferNS; + uint64_t nsecInterval = 1'000'000'000ul / g_nOutputRefresh; uint64_t now = get_time_in_nanos(); uint64_t targetPoint = lastVblank + nsecInterval; @@ -58,7 +56,7 @@ void vblankThreadRun( void ) gpuvis_trace_printf( "sent vblank\n" ); // Get on the other side of it now - sleep_for_nanos( (uint64_t)((g_flVblankDrawBufferMS + 1.0) * 1000 * 1000) ); + sleep_for_nanos( g_uVblankDrawBufferNS + 1'000'000 ); } }