From 501ff9acfe9dd656c1fb6d82ec0533c3244fd88b Mon Sep 17 00:00:00 2001 From: John Reck Date: Fri, 17 Jun 2016 12:57:12 -0700 Subject: [PATCH] Avoid re-calculating vsync mid-frame Fixes: 29072773 By using computeFrameTime AnimationContext would potentially end up modifying the latest vsync if a very-slow frame was received from the UI thread. This could potentially desync animations that were RT & UI thread 'synchronized', but more significantly it would confuse the swap chain which tries to only draw one frame per vsync causing unneccessary frame drops. Change-Id: Ibd2ec3157ce32fee1eec8d56837c45a35e622895 --- libs/hwui/AnimationContext.cpp | 2 +- libs/hwui/renderthread/TimeLord.cpp | 4 ---- libs/hwui/renderthread/TimeLord.h | 1 - 3 files changed, 1 insertion(+), 6 deletions(-) diff --git a/libs/hwui/AnimationContext.cpp b/libs/hwui/AnimationContext.cpp index 097be08faaad4..5759ccd85464f 100644 --- a/libs/hwui/AnimationContext.cpp +++ b/libs/hwui/AnimationContext.cpp @@ -63,7 +63,7 @@ void AnimationContext::startFrame(TreeInfo::TraversalMode mode) { mCurrentFrameAnimations.mNextHandle = head; head->mPreviousHandle = &mCurrentFrameAnimations; } - mFrameTimeMs = mClock.computeFrameTimeMs(); + mFrameTimeMs = ns2ms(mClock.latestVsync()); } void AnimationContext::runRemainingAnimations(TreeInfo& info) { diff --git a/libs/hwui/renderthread/TimeLord.cpp b/libs/hwui/renderthread/TimeLord.cpp index f846d6a44473b..6c2575f699bb9 100644 --- a/libs/hwui/renderthread/TimeLord.cpp +++ b/libs/hwui/renderthread/TimeLord.cpp @@ -43,10 +43,6 @@ nsecs_t TimeLord::computeFrameTimeNanos() { return mFrameTimeNanos; } -nsecs_t TimeLord::computeFrameTimeMs() { - return nanoseconds_to_milliseconds(computeFrameTimeNanos()); -} - } /* namespace renderthread */ } /* namespace uirenderer */ } /* namespace android */ diff --git a/libs/hwui/renderthread/TimeLord.h b/libs/hwui/renderthread/TimeLord.h index 5464399234fb3..68a0f7f971b96 100644 --- a/libs/hwui/renderthread/TimeLord.h +++ b/libs/hwui/renderthread/TimeLord.h @@ -34,7 +34,6 @@ public: // returns true if the vsync is newer, false if it was rejected for staleness bool vsyncReceived(nsecs_t vsync); nsecs_t latestVsync() { return mFrameTimeNanos; } - nsecs_t computeFrameTimeMs(); nsecs_t computeFrameTimeNanos(); private: