diff options
| -rw-r--r-- | core/java/android/view/ViewRootImpl.java | 7 | ||||
| -rw-r--r-- | core/tests/coretests/src/android/view/ViewRootImplTest.java | 26 |
2 files changed, 10 insertions, 23 deletions
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 3bc682961eb0..c7ca16b6d1bd 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -12565,6 +12565,13 @@ public final class ViewRootImpl implements ViewParent, case FRAME_RATE_CATEGORY_HIGH -> mFrameRateCategoryHighCount = FRAME_RATE_CATEGORY_COUNT; } + + // If it's currently an intermittent update, + // we should keep mPreferredFrameRateCategory as NORMAL + if (intermittentUpdateState() == INTERMITTENT_STATE_INTERMITTENT) { + return; + } + if (mFrameRateCategoryHighCount > 0) { mPreferredFrameRateCategory = FRAME_RATE_CATEGORY_HIGH; } else if (mFrameRateCategoryHighHintCount > 0) { diff --git a/core/tests/coretests/src/android/view/ViewRootImplTest.java b/core/tests/coretests/src/android/view/ViewRootImplTest.java index 9afc4be20eee..5caf77dbdcff 100644 --- a/core/tests/coretests/src/android/view/ViewRootImplTest.java +++ b/core/tests/coretests/src/android/view/ViewRootImplTest.java @@ -28,7 +28,6 @@ import static android.view.Surface.FRAME_RATE_CATEGORY_HIGH; import static android.view.Surface.FRAME_RATE_CATEGORY_HIGH_HINT; import static android.view.Surface.FRAME_RATE_CATEGORY_LOW; import static android.view.Surface.FRAME_RATE_CATEGORY_NORMAL; -import static android.view.Surface.FRAME_RATE_CATEGORY_NO_PREFERENCE; import static android.view.Surface.FRAME_RATE_COMPATIBILITY_FIXED_SOURCE; import static android.view.Surface.FRAME_RATE_COMPATIBILITY_GTE; import static android.view.View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; @@ -1165,34 +1164,15 @@ public class ViewRootImplTest { }); waitForAfterDraw(); - // reset the frame rate category counts - for (int i = 0; i < 5; i++) { - sInstrumentation.runOnMainSync(() -> { - mView.setRequestedFrameRate(View.REQUESTED_FRAME_RATE_CATEGORY_NO_PREFERENCE); - mView.invalidate(); - }); - sInstrumentation.waitForIdleSync(); - } - // In transition from frequent update to infrequent update Thread.sleep(delay); sInstrumentation.runOnMainSync(() -> { - mView.setRequestedFrameRate(View.REQUESTED_FRAME_RATE_CATEGORY_NO_PREFERENCE); mView.invalidate(); - runAfterDraw(() -> { - assertEquals(FRAME_RATE_CATEGORY_NO_PREFERENCE, - mViewRootImpl.getLastPreferredFrameRateCategory()); - }); - }); - waitForAfterDraw(); - Thread.sleep(delay); - sInstrumentation.runOnMainSync(() -> { - mView.setRequestedFrameRate(View.REQUESTED_FRAME_RATE_CATEGORY_DEFAULT); - mView.invalidate(); - runAfterDraw(() -> assertEquals(FRAME_RATE_CATEGORY_NO_PREFERENCE, + int expected = toolkitFrameRateDefaultNormalReadOnly() + ? FRAME_RATE_CATEGORY_NORMAL : FRAME_RATE_CATEGORY_HIGH; + runAfterDraw(() -> assertEquals(expected, mViewRootImpl.getLastPreferredFrameRateCategory())); }); - waitForAfterDraw(); // Infrequent update Thread.sleep(delay); |