Merge "[hwui] Update dispatchFrameCallbacks to be called with timeUntilDeadline/4 instead of timeUntilDeadline * 0.25f" into udc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
308baeb632
@@ -133,12 +133,23 @@ void RenderThread::frameCallback(int64_t vsyncId, int64_t frameDeadline, int64_t
|
|||||||
if (timeLord().vsyncReceived(frameTimeNanos, frameTimeNanos, vsyncId, frameDeadline,
|
if (timeLord().vsyncReceived(frameTimeNanos, frameTimeNanos, vsyncId, frameDeadline,
|
||||||
frameInterval) &&
|
frameInterval) &&
|
||||||
!mFrameCallbackTaskPending) {
|
!mFrameCallbackTaskPending) {
|
||||||
ATRACE_NAME("queue mFrameCallbackTask");
|
|
||||||
mFrameCallbackTaskPending = true;
|
mFrameCallbackTaskPending = true;
|
||||||
|
|
||||||
nsecs_t timeUntilDeadline = frameDeadline - frameTimeNanos;
|
using SteadyClock = std::chrono::steady_clock;
|
||||||
nsecs_t runAt = (frameTimeNanos + (timeUntilDeadline * 0.25f));
|
using Nanos = std::chrono::nanoseconds;
|
||||||
queue().postAt(runAt, [=]() { dispatchFrameCallbacks(); });
|
using toNsecs_t = std::chrono::duration<nsecs_t, std::nano>;
|
||||||
|
using toFloatMillis = std::chrono::duration<float, std::milli>;
|
||||||
|
|
||||||
|
const auto frameTimeTimePoint = SteadyClock::time_point(Nanos(frameTimeNanos));
|
||||||
|
const auto deadlineTimePoint = SteadyClock::time_point(Nanos(frameDeadline));
|
||||||
|
|
||||||
|
const auto timeUntilDeadline = deadlineTimePoint - frameTimeTimePoint;
|
||||||
|
const auto runAt = (frameTimeTimePoint + (timeUntilDeadline / 4));
|
||||||
|
|
||||||
|
ATRACE_FORMAT("queue mFrameCallbackTask to run after %.2fms",
|
||||||
|
toFloatMillis(runAt - SteadyClock::now()).count());
|
||||||
|
queue().postAt(toNsecs_t(runAt.time_since_epoch()).count(),
|
||||||
|
[=]() { dispatchFrameCallbacks(); });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user