summaryrefslogtreecommitdiff
path: root/src/helpers/Monitor.cpp
diff options
context:
space:
mode:
authorvaxerski <vaxry@vaxry.net>2025-05-27 21:26:47 +0200
committervaxerski <vaxry@vaxry.net>2025-05-27 21:26:47 +0200
commit9b327ddfd1ad4cfef7a04a178e9f0aed16e95e0a (patch)
tree5b7f8ca87395cf579b5bff55305c04d1c3c01fbe /src/helpers/Monitor.cpp
parent24915a3a9b0bb8c4dc8b5a365cc0bc3a03ee36f0 (diff)
monitor: mark 0, 0 presentation timestamps as invalid
fixes #10562
Diffstat (limited to 'src/helpers/Monitor.cpp')
-rw-r--r--src/helpers/Monitor.cpp15
1 files 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<Aquamarine::IOutput::SPresentEvent>(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);
});