Loading core/java/android/view/View.java +0 −20 Original line number Diff line number Diff line Loading @@ -50,7 +50,6 @@ import static android.view.flags.Flags.enableUseMeasureCacheDuringForceLayout; import static android.view.flags.Flags.sensitiveContentAppProtection; import static android.view.flags.Flags.toolkitFrameRateBySizeReadOnly; import static android.view.flags.Flags.toolkitMetricsForFrameRateDecision; import static android.view.flags.Flags.toolkitScrollMaxFrameRate; import static android.view.flags.Flags.toolkitSetFrameRateReadOnly; import static android.view.flags.Flags.toolkitViewgroupSetRequestedFrameRateApi; import static android.view.flags.Flags.viewVelocityApi; Loading Loading @@ -2468,8 +2467,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, toolkitFrameRateBySizeReadOnly(); private static boolean sToolkitViewGroupFrameRateApiFlagValue = toolkitViewgroupSetRequestedFrameRateApi(); private static boolean sToolkitScrollMaxFrameRateFlagValue = toolkitScrollMaxFrameRate(); // Used to set frame rate compatibility. @Surface.FrameRateCompatibility int mFrameRateCompatibility = Loading Loading @@ -34414,23 +34411,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } private float convertVelocityToFrameRate(float velocityPps) { // b/404936438 Remove this logic when 240 TE is re-enabled // or sysprop is available for scrolling if (sToolkitScrollMaxFrameRateFlagValue) { boolean has80Hz = false; if (getDisplay() != null) { for (float rate : getDisplay().getSupportedRefreshRates()) { if (Math.abs(rate - 80.0f) < 0.1f) { has80Hz = true; break; } } } if (!has80Hz) { return MAX_FRAME_RATE; } } // Internal testing has shown that this gives a premium experience: // above 300dp/s => 120fps // between 300dp/s and 125fps => 80fps core/java/android/view/flags/refresh_rate_flags.aconfig +0 −10 Original line number Diff line number Diff line Loading @@ -95,13 +95,3 @@ flag { description: "Feature flag to ennable ARR debug message" bug: "394614443" } No newline at end of file flag { name: "toolkit_scroll_max_frame_rate" namespace: "toolkit" description: "Feature flag to always return max frame rate for scrolling" bug: "404936438" metadata { purpose: PURPOSE_BUGFIX } } No newline at end of file core/tests/coretests/src/android/view/ViewFrameRateTest.java +3 −42 Original line number Diff line number Diff line Loading @@ -27,7 +27,6 @@ import static android.view.flags.Flags.FLAG_TOOLKIT_INITIAL_TOUCH_BOOST; import static android.view.flags.Flags.FLAG_TOOLKIT_SET_FRAME_RATE_READ_ONLY; import static android.view.flags.Flags.FLAG_VIEW_VELOCITY_API; import static android.view.flags.Flags.toolkitFrameRateBySizeReadOnly; import static android.view.flags.Flags.toolkitScrollMaxFrameRate; import static junit.framework.Assert.assertEquals; Loading Loading @@ -416,22 +415,9 @@ public class ViewFrameRateTest { }); waitForFrameRateCategoryToSettle(); mActivityRule.runOnUiThread(() -> { Display display = mMovingView.getDisplay(); boolean has80Hz = false; if (display != null) { for (float rate : display.getSupportedRefreshRates()) { if (Math.abs(rate - 80.0f) < 0.1f) { has80Hz = true; break; } } } float expectedFrameRate = (toolkitScrollMaxFrameRate() && !has80Hz) ? 120f : 60f; mMovingView.setFrameContentVelocity(1f); mMovingView.invalidate(); runAfterDraw(() -> assertEquals(expectedFrameRate, mViewRoot.getLastPreferredFrameRate(), 0f)); runAfterDraw(() -> assertEquals(60f, mViewRoot.getLastPreferredFrameRate(), 0f)); }); waitForAfterDraw(); } Loading @@ -450,23 +436,11 @@ public class ViewFrameRateTest { }); waitForFrameRateCategoryToSettle(); mActivityRule.runOnUiThread(() -> { Display display = mMovingView.getDisplay(); boolean has80Hz = false; if (display != null) { for (float rate : display.getSupportedRefreshRates()) { if (Math.abs(rate - 80.0f) < 0.1f) { has80Hz = true; break; } } } float expectedFrameRate = (toolkitScrollMaxFrameRate() && !has80Hz) ? 120f : 80f; float midSpeed = 200f * mMovingView.getContext().getResources().getDisplayMetrics().density; mMovingView.setFrameContentVelocity(midSpeed); mMovingView.invalidate(); runAfterDraw(() -> assertEquals(expectedFrameRate, mViewRoot.getLastPreferredFrameRate(), 0f)); runAfterDraw(() -> assertEquals(80f, mViewRoot.getLastPreferredFrameRate(), 0f)); }); waitForAfterDraw(); } Loading @@ -490,23 +464,10 @@ public class ViewFrameRateTest { }); waitForFrameRateCategoryToSettle(); mActivityRule.runOnUiThread(() -> { Display display = mMovingView.getDisplay(); boolean has80Hz = false; if (display != null) { for (float rate : display.getSupportedRefreshRates()) { if (Math.abs(rate - 80.0f) < 0.1f) { has80Hz = true; break; } } } float expectedFrameRate = (toolkitScrollMaxFrameRate() && !has80Hz) ? 120f : 60f; frameLayout.setFrameContentVelocity(1f); mMovingView.offsetTopAndBottom(100); frameLayout.invalidate(); runAfterDraw(() -> assertEquals(expectedFrameRate, mViewRoot.getLastPreferredFrameRate(), 0f)); runAfterDraw(() -> assertEquals(60f, mViewRoot.getLastPreferredFrameRate(), 0f)); }); waitForAfterDraw(); } Loading Loading
core/java/android/view/View.java +0 −20 Original line number Diff line number Diff line Loading @@ -50,7 +50,6 @@ import static android.view.flags.Flags.enableUseMeasureCacheDuringForceLayout; import static android.view.flags.Flags.sensitiveContentAppProtection; import static android.view.flags.Flags.toolkitFrameRateBySizeReadOnly; import static android.view.flags.Flags.toolkitMetricsForFrameRateDecision; import static android.view.flags.Flags.toolkitScrollMaxFrameRate; import static android.view.flags.Flags.toolkitSetFrameRateReadOnly; import static android.view.flags.Flags.toolkitViewgroupSetRequestedFrameRateApi; import static android.view.flags.Flags.viewVelocityApi; Loading Loading @@ -2468,8 +2467,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, toolkitFrameRateBySizeReadOnly(); private static boolean sToolkitViewGroupFrameRateApiFlagValue = toolkitViewgroupSetRequestedFrameRateApi(); private static boolean sToolkitScrollMaxFrameRateFlagValue = toolkitScrollMaxFrameRate(); // Used to set frame rate compatibility. @Surface.FrameRateCompatibility int mFrameRateCompatibility = Loading Loading @@ -34414,23 +34411,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } private float convertVelocityToFrameRate(float velocityPps) { // b/404936438 Remove this logic when 240 TE is re-enabled // or sysprop is available for scrolling if (sToolkitScrollMaxFrameRateFlagValue) { boolean has80Hz = false; if (getDisplay() != null) { for (float rate : getDisplay().getSupportedRefreshRates()) { if (Math.abs(rate - 80.0f) < 0.1f) { has80Hz = true; break; } } } if (!has80Hz) { return MAX_FRAME_RATE; } } // Internal testing has shown that this gives a premium experience: // above 300dp/s => 120fps // between 300dp/s and 125fps => 80fps
core/java/android/view/flags/refresh_rate_flags.aconfig +0 −10 Original line number Diff line number Diff line Loading @@ -95,13 +95,3 @@ flag { description: "Feature flag to ennable ARR debug message" bug: "394614443" } No newline at end of file flag { name: "toolkit_scroll_max_frame_rate" namespace: "toolkit" description: "Feature flag to always return max frame rate for scrolling" bug: "404936438" metadata { purpose: PURPOSE_BUGFIX } } No newline at end of file
core/tests/coretests/src/android/view/ViewFrameRateTest.java +3 −42 Original line number Diff line number Diff line Loading @@ -27,7 +27,6 @@ import static android.view.flags.Flags.FLAG_TOOLKIT_INITIAL_TOUCH_BOOST; import static android.view.flags.Flags.FLAG_TOOLKIT_SET_FRAME_RATE_READ_ONLY; import static android.view.flags.Flags.FLAG_VIEW_VELOCITY_API; import static android.view.flags.Flags.toolkitFrameRateBySizeReadOnly; import static android.view.flags.Flags.toolkitScrollMaxFrameRate; import static junit.framework.Assert.assertEquals; Loading Loading @@ -416,22 +415,9 @@ public class ViewFrameRateTest { }); waitForFrameRateCategoryToSettle(); mActivityRule.runOnUiThread(() -> { Display display = mMovingView.getDisplay(); boolean has80Hz = false; if (display != null) { for (float rate : display.getSupportedRefreshRates()) { if (Math.abs(rate - 80.0f) < 0.1f) { has80Hz = true; break; } } } float expectedFrameRate = (toolkitScrollMaxFrameRate() && !has80Hz) ? 120f : 60f; mMovingView.setFrameContentVelocity(1f); mMovingView.invalidate(); runAfterDraw(() -> assertEquals(expectedFrameRate, mViewRoot.getLastPreferredFrameRate(), 0f)); runAfterDraw(() -> assertEquals(60f, mViewRoot.getLastPreferredFrameRate(), 0f)); }); waitForAfterDraw(); } Loading @@ -450,23 +436,11 @@ public class ViewFrameRateTest { }); waitForFrameRateCategoryToSettle(); mActivityRule.runOnUiThread(() -> { Display display = mMovingView.getDisplay(); boolean has80Hz = false; if (display != null) { for (float rate : display.getSupportedRefreshRates()) { if (Math.abs(rate - 80.0f) < 0.1f) { has80Hz = true; break; } } } float expectedFrameRate = (toolkitScrollMaxFrameRate() && !has80Hz) ? 120f : 80f; float midSpeed = 200f * mMovingView.getContext().getResources().getDisplayMetrics().density; mMovingView.setFrameContentVelocity(midSpeed); mMovingView.invalidate(); runAfterDraw(() -> assertEquals(expectedFrameRate, mViewRoot.getLastPreferredFrameRate(), 0f)); runAfterDraw(() -> assertEquals(80f, mViewRoot.getLastPreferredFrameRate(), 0f)); }); waitForAfterDraw(); } Loading @@ -490,23 +464,10 @@ public class ViewFrameRateTest { }); waitForFrameRateCategoryToSettle(); mActivityRule.runOnUiThread(() -> { Display display = mMovingView.getDisplay(); boolean has80Hz = false; if (display != null) { for (float rate : display.getSupportedRefreshRates()) { if (Math.abs(rate - 80.0f) < 0.1f) { has80Hz = true; break; } } } float expectedFrameRate = (toolkitScrollMaxFrameRate() && !has80Hz) ? 120f : 60f; frameLayout.setFrameContentVelocity(1f); mMovingView.offsetTopAndBottom(100); frameLayout.invalidate(); runAfterDraw(() -> assertEquals(expectedFrameRate, mViewRoot.getLastPreferredFrameRate(), 0f)); runAfterDraw(() -> assertEquals(60f, mViewRoot.getLastPreferredFrameRate(), 0f)); }); waitForAfterDraw(); } Loading