diff options
| author | vaxerski <vaxry@vaxry.net> | 2025-05-27 21:26:47 +0200 |
|---|---|---|
| committer | vaxerski <vaxry@vaxry.net> | 2025-05-27 21:26:47 +0200 |
| commit | 9b327ddfd1ad4cfef7a04a178e9f0aed16e95e0a (patch) | |
| tree | 5b7f8ca87395cf579b5bff55305c04d1c3c01fbe /src/helpers/Monitor.cpp | |
| parent | 24915a3a9b0bb8c4dc8b5a365cc0bc3a03ee36f0 (diff) | |
monitor: mark 0, 0 presentation timestamps as invalid
fixes #10562
Diffstat (limited to 'src/helpers/Monitor.cpp')
| -rw-r--r-- | src/helpers/Monitor.cpp | 15 |
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); }); |
