Loading core/java/android/view/ViewRootImpl.java +6 −0 Original line number Diff line number Diff line Loading @@ -2820,6 +2820,12 @@ public final class ViewRootImpl implements ViewParent, if (mAttachInfo.mThreadedRenderer != null) { mAttachInfo.mThreadedRenderer.setSurfaceControl(null, null); } // Also reset the VRR relevant values. mPreferredFrameRateCategory = FRAME_RATE_CATEGORY_DEFAULT; mLastPreferredFrameRateCategory = FRAME_RATE_CATEGORY_DEFAULT; mPreferredFrameRate = 0; mLastPreferredFrameRate = 0; } /** Loading core/tests/coretests/src/android/view/ViewRootImplTest.java +40 −1 Original line number Diff line number Diff line Loading @@ -1433,9 +1433,48 @@ public class ViewRootImplTest { waitForAfterDraw(); } @Test @RequiresFlagsEnabled({FLAG_TOOLKIT_SET_FRAME_RATE_READ_ONLY, FLAG_TOOLKIT_FRAME_RATE_FUNCTION_ENABLING_READ_ONLY, FLAG_TOOLKIT_FRAME_RATE_VIEW_ENABLING_READ_ONLY}) public void votePreferredFrameRate_resetWhenDestroyingSurface() throws Throwable { if (!ViewProperties.vrr_enabled().orElse(true)) { return; } mView = new View(sContext); WindowManager.LayoutParams wmlp = new WindowManager.LayoutParams(TYPE_APPLICATION_OVERLAY); wmlp.token = new Binder(); // Set a fake token to bypass 'is your activity running' check sInstrumentation.runOnMainSync(() -> { WindowManager wm = sContext.getSystemService(WindowManager.class); wm.addView(mView, wmlp); }); sInstrumentation.waitForIdleSync(); mViewRootImpl = mView.getViewRootImpl(); waitForFrameRateCategoryToSettle(mView); sInstrumentation.runOnMainSync(() -> { mViewRootImpl.getView().setVisibility(View.INVISIBLE); mViewRootImpl.mSurface.release(); mView.invalidate(); }); sInstrumentation.waitForIdleSync(); assertEquals(false, mViewRootImpl.mSurface.isValid()); assertEquals(FRAME_RATE_CATEGORY_DEFAULT, mViewRootImpl.getLastPreferredFrameRateCategory()); assertEquals(FRAME_RATE_CATEGORY_DEFAULT, mViewRootImpl.getPreferredFrameRateCategory()); assertEquals(0, mViewRootImpl.getLastPreferredFrameRate(), 0.1); assertEquals(0, mViewRootImpl.getPreferredFrameRate(), 0.1); } @Test @RequiresFlagsEnabled(FLAG_TOOLKIT_FRAME_RATE_VIEW_ENABLING_READ_ONLY) public void votePreferredFrameRate_velocityVotedAfterOnDraw() throws Throwable { public void votePreferredFrameRate_reset() throws Throwable { if (!ViewProperties.vrr_enabled().orElse(true)) { return; } Loading Loading
core/java/android/view/ViewRootImpl.java +6 −0 Original line number Diff line number Diff line Loading @@ -2820,6 +2820,12 @@ public final class ViewRootImpl implements ViewParent, if (mAttachInfo.mThreadedRenderer != null) { mAttachInfo.mThreadedRenderer.setSurfaceControl(null, null); } // Also reset the VRR relevant values. mPreferredFrameRateCategory = FRAME_RATE_CATEGORY_DEFAULT; mLastPreferredFrameRateCategory = FRAME_RATE_CATEGORY_DEFAULT; mPreferredFrameRate = 0; mLastPreferredFrameRate = 0; } /** Loading
core/tests/coretests/src/android/view/ViewRootImplTest.java +40 −1 Original line number Diff line number Diff line Loading @@ -1433,9 +1433,48 @@ public class ViewRootImplTest { waitForAfterDraw(); } @Test @RequiresFlagsEnabled({FLAG_TOOLKIT_SET_FRAME_RATE_READ_ONLY, FLAG_TOOLKIT_FRAME_RATE_FUNCTION_ENABLING_READ_ONLY, FLAG_TOOLKIT_FRAME_RATE_VIEW_ENABLING_READ_ONLY}) public void votePreferredFrameRate_resetWhenDestroyingSurface() throws Throwable { if (!ViewProperties.vrr_enabled().orElse(true)) { return; } mView = new View(sContext); WindowManager.LayoutParams wmlp = new WindowManager.LayoutParams(TYPE_APPLICATION_OVERLAY); wmlp.token = new Binder(); // Set a fake token to bypass 'is your activity running' check sInstrumentation.runOnMainSync(() -> { WindowManager wm = sContext.getSystemService(WindowManager.class); wm.addView(mView, wmlp); }); sInstrumentation.waitForIdleSync(); mViewRootImpl = mView.getViewRootImpl(); waitForFrameRateCategoryToSettle(mView); sInstrumentation.runOnMainSync(() -> { mViewRootImpl.getView().setVisibility(View.INVISIBLE); mViewRootImpl.mSurface.release(); mView.invalidate(); }); sInstrumentation.waitForIdleSync(); assertEquals(false, mViewRootImpl.mSurface.isValid()); assertEquals(FRAME_RATE_CATEGORY_DEFAULT, mViewRootImpl.getLastPreferredFrameRateCategory()); assertEquals(FRAME_RATE_CATEGORY_DEFAULT, mViewRootImpl.getPreferredFrameRateCategory()); assertEquals(0, mViewRootImpl.getLastPreferredFrameRate(), 0.1); assertEquals(0, mViewRootImpl.getPreferredFrameRate(), 0.1); } @Test @RequiresFlagsEnabled(FLAG_TOOLKIT_FRAME_RATE_VIEW_ENABLING_READ_ONLY) public void votePreferredFrameRate_velocityVotedAfterOnDraw() throws Throwable { public void votePreferredFrameRate_reset() throws Throwable { if (!ViewProperties.vrr_enabled().orElse(true)) { return; } Loading