From 0f149d383720357a24517adcf6d4ea3d654ec446 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Mon, 18 Mar 2024 23:16:19 +0000 Subject: [PATCH] eee --- src/managers/FrameSchedulingManager.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/managers/FrameSchedulingManager.cpp b/src/managers/FrameSchedulingManager.cpp index 6677c651..7ef14fa4 100644 --- a/src/managers/FrameSchedulingManager.cpp +++ b/src/managers/FrameSchedulingManager.cpp @@ -141,12 +141,17 @@ void CFrameSchedulingManager::onPresent(CMonitor* pMonitor, wlr_output_event_pre float msUntilVblank = 0; if (presentationData) { - const std::chrono::system_clock::time_point LASTVBLANK{std::chrono::duration_cast( - std::chrono::seconds{presentationData->when->tv_sec} + std::chrono::nanoseconds{presentationData->when->tv_nsec})}; + timespec now; + clock_gettime(CLOCK_MONOTONIC, &now); + const std::chrono::system_clock::duration LASTVBLANK{ + std::chrono::duration_cast(std::chrono::seconds{now.tv_sec} + std::chrono::nanoseconds{now.tv_nsec}) - + std::chrono::duration_cast(std::chrono::seconds{presentationData->when->tv_sec} + + std::chrono::nanoseconds{presentationData->when->tv_nsec})}; msUntilVblank = (presentationData->refresh ? presentationData->refresh / 1000000.0 : pMonitor->refreshRate / 1000.0) - - std::chrono::duration_cast(std::chrono::system_clock::now() - LASTVBLANK).count(); + std::chrono::duration_cast(LASTVBLANK).count(); - DATA->nextVblank = LASTVBLANK + std::chrono::nanoseconds{int{presentationData->refresh ? presentationData->refresh : 1000000000 / pMonitor->refreshRate}}; + DATA->nextVblank = std::chrono::system_clock::now() + LASTVBLANK + + std::chrono::nanoseconds{int{presentationData->refresh ? presentationData->refresh : 1000000000 / pMonitor->refreshRate}}; } else msUntilVblank = std::chrono::duration_cast(DATA->nextVblank - std::chrono::system_clock::now()).count();