protocols: commit and presentation timing fixes (#13174)
* move commit timing fields to surface state * fix toTimespec init * update sendQueued api * update onPresented api * set zero copy flag * send clock id * move presented calcs inside condition * use only CLOCK_MONOTONIC for commit/presentation timings * fix setSetTimestamp * do not wait for commit timing while tearing * proto config * fix config defaults
This commit is contained in:
parent
407a623801
commit
ff061d177e
14 changed files with 107 additions and 64 deletions
|
|
@ -114,10 +114,12 @@ void CMonitor::onConnect(bool noRule) {
|
|||
ts = nullptr;
|
||||
}
|
||||
|
||||
if (!ts)
|
||||
PROTO::presentation->onPresented(m_self.lock(), Time::steadyNow(), event.refresh, event.seq, event.flags);
|
||||
else
|
||||
PROTO::presentation->onPresented(m_self.lock(), Time::fromTimespec(event.when), event.refresh, event.seq, event.flags);
|
||||
if (!ts) {
|
||||
timespec mono{};
|
||||
clock_gettime(CLOCK_MONOTONIC, &mono);
|
||||
PROTO::presentation->onPresented(m_self.lock(), mono, event.refresh, event.seq, event.flags & ~Aquamarine::IOutput::AQ_OUTPUT_PRESENT_HW_CLOCK);
|
||||
} else
|
||||
PROTO::presentation->onPresented(m_self.lock(), *ts, event.refresh, event.seq, event.flags);
|
||||
|
||||
if (m_zoomAnimFrameCounter < 5) {
|
||||
m_zoomAnimFrameCounter++;
|
||||
|
|
|
|||
|
|
@ -103,7 +103,7 @@ Time::steady_tp Time::fromTimespec(const timespec* ts) {
|
|||
}
|
||||
|
||||
struct timespec Time::toTimespec(const steady_tp& tp) {
|
||||
struct timespec mono, real;
|
||||
timespec mono{}, real{};
|
||||
clock_gettime(CLOCK_MONOTONIC, &mono);
|
||||
clock_gettime(CLOCK_REALTIME, &real);
|
||||
Time::steady_tp now = Time::steadyNow();
|
||||
|
|
@ -136,3 +136,10 @@ struct timespec Time::toTimespec(const steady_tp& tp) {
|
|||
auto sum = timeadd(tpTime, diffFinal);
|
||||
return timespec{.tv_sec = sum.first, .tv_nsec = sum.second};
|
||||
}
|
||||
|
||||
Time::steady_dur Time::till(const timespec& ts) {
|
||||
timespec mono{};
|
||||
clock_gettime(CLOCK_MONOTONIC, &mono);
|
||||
const auto delay = (ts.tv_sec - mono.tv_sec) * 1000000000 + (ts.tv_nsec - mono.tv_nsec);
|
||||
return std::chrono::nanoseconds(delay);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ namespace Time {
|
|||
|
||||
steady_tp fromTimespec(const timespec*);
|
||||
struct timespec toTimespec(const steady_tp& tp);
|
||||
steady_dur till(const timespec& ts);
|
||||
|
||||
uint64_t millis(const steady_tp& tp);
|
||||
uint64_t millis(const system_tp& tp);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue