diff options
| -rw-r--r-- | core/java/android/view/ViewRootImpl.java | 4 | ||||
| -rw-r--r-- | core/tests/coretests/src/android/view/ViewFrameRateTest.java | 20 |
2 files changed, 23 insertions, 1 deletions
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 63121bd8800c..5ca79869cae9 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -4261,7 +4261,9 @@ public final class ViewRootImpl implements ViewParent, updateInfrequentCount(); setPreferredFrameRate(mPreferredFrameRate); setPreferredFrameRateCategory(mPreferredFrameRateCategory); - if (!mIsFrameRateConflicted) { + if (mPreferredFrameRate > 0 + || (mLastPreferredFrameRate != 0 && mPreferredFrameRate == 0) + ) { mHandler.removeMessages(MSG_FRAME_RATE_SETTING); mHandler.sendEmptyMessageDelayed(MSG_FRAME_RATE_SETTING, FRAME_RATE_SETTING_REEVALUATE_TIME); diff --git a/core/tests/coretests/src/android/view/ViewFrameRateTest.java b/core/tests/coretests/src/android/view/ViewFrameRateTest.java index 86413737a06b..c8793ac47896 100644 --- a/core/tests/coretests/src/android/view/ViewFrameRateTest.java +++ b/core/tests/coretests/src/android/view/ViewFrameRateTest.java @@ -564,6 +564,26 @@ public class ViewFrameRateTest { assertEquals(0f, mViewRoot.getLastPreferredFrameRate(), 0f); } + @Test + @RequiresFlagsEnabled({FLAG_TOOLKIT_SET_FRAME_RATE_READ_ONLY, + FLAG_TOOLKIT_FRAME_RATE_VIEW_ENABLING_READ_ONLY + }) + public void frameRateResetWithInvalidations() throws Throwable { + mMovingView.setRequestedFrameRate(120f); + waitForFrameRateCategoryToSettle(); + mMovingView.setRequestedFrameRate(View.REQUESTED_FRAME_RATE_CATEGORY_NORMAL); + + for (int i = 0; i < 120; i++) { + mActivityRule.runOnUiThread(() -> { + mMovingView.invalidate(); + runAfterDraw(() -> {}); + }); + waitForAfterDraw(); + } + + assertEquals(0f, mViewRoot.getLastPreferredFrameRate(), 0f); + } + private void runAfterDraw(@NonNull Runnable runnable) { Handler handler = new Handler(Looper.getMainLooper()); mAfterDrawLatch = new CountDownLatch(1); |