From 9b327ddfd1ad4cfef7a04a178e9f0aed16e95e0a Mon Sep 17 00:00:00 2001 From: vaxerski Date: Tue, 27 May 2025 21:26:47 +0200 Subject: [PATCH] monitor: mark 0, 0 presentation timestamps as invalid fixes #10562 --- src/helpers/Monitor.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp index 72a221f5..d7536a39 100644 --- a/src/helpers/Monitor.cpp +++ b/src/helpers/Monitor.cpp @@ -74,11 +74,16 @@ void CMonitor::onConnect(bool noRule) { auto E = std::any_cast(d); timespec* ts = E.when; - if (!ts) { - timespec now; - clock_gettime(CLOCK_MONOTONIC, &now); - PROTO::presentation->onPresented(m_self.lock(), Time::fromTimespec(&now), E.refresh, E.seq, E.flags); - } else + + if (ts && ts->tv_sec <= 2) { + // drop this timestamp, it's not valid. Likely drm is cringe. We can't push it further because + // a) it's wrong, b) our translations aren't 100% accurate and risk underflows + ts = nullptr; + } + + if (!ts) + PROTO::presentation->onPresented(m_self.lock(), Time::steadyNow(), E.refresh, E.seq, E.flags); + else PROTO::presentation->onPresented(m_self.lock(), Time::fromTimespec(E.when), E.refresh, E.seq, E.flags); });