diff options
-rw-r--r-- | libs/hwui/renderthread/TimeLord.cpp | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/libs/hwui/renderthread/TimeLord.cpp b/libs/hwui/renderthread/TimeLord.cpp index 406066c92bab..a43fcdc6e202 100644 --- a/libs/hwui/renderthread/TimeLord.cpp +++ b/libs/hwui/renderthread/TimeLord.cpp @@ -15,22 +15,28 @@ */ #include "TimeLord.h" #include <limits> +#include "FrameInfo.h" namespace android { namespace uirenderer { namespace renderthread { -TimeLord::TimeLord() : mFrameIntervalNanos(milliseconds_to_nanoseconds(16)), - mFrameTimeNanos(0), - mFrameIntendedTimeNanos(0), - mFrameVsyncId(-1), - mFrameDeadline(std::numeric_limits<int64_t>::max()){} +TimeLord::TimeLord() + : mFrameIntervalNanos(milliseconds_to_nanoseconds(16)) + , mFrameTimeNanos(0) + , mFrameIntendedTimeNanos(0) + , mFrameVsyncId(UiFrameInfoBuilder::INVALID_VSYNC_ID) + , mFrameDeadline(std::numeric_limits<int64_t>::max()) {} bool TimeLord::vsyncReceived(nsecs_t vsync, nsecs_t intendedVsync, int64_t vsyncId, int64_t frameDeadline, nsecs_t frameInterval) { if (intendedVsync > mFrameIntendedTimeNanos) { mFrameIntendedTimeNanos = intendedVsync; - mFrameVsyncId = vsyncId; + + // The intendedVsync might have been advanced to account for scheduling + // jitter. Since we don't have a way to advance the vsync id we just + // reset it. + mFrameVsyncId = (vsyncId > mFrameVsyncId) ? vsyncId : UiFrameInfoBuilder::INVALID_VSYNC_ID; mFrameDeadline = frameDeadline; if (frameInterval > 0) { mFrameIntervalNanos = frameInterval; |