Loading core/java/android/view/View.java +6 −2 Original line number Diff line number Diff line Loading @@ -34061,10 +34061,14 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } private float convertVelocityToFrameRate(float velocityPps) { // From UXR study, premium experience is: // 1500+ dp/s: 120fps // 0 - 1500 dp/s: 80fps // OEMs are likely to modify this to balance battery and user experience for their // specific device. float density = mAttachInfo.mDensity; float velocityDps = velocityPps / density; // Choose a frame rate in increments of 10fps return Math.min(MAX_FRAME_RATE, 60f + (10f * (float) Math.floor(velocityDps / 300f))); return (velocityDps >= 1500f) ? MAX_FRAME_RATE : 80f; } /** core/tests/coretests/src/android/view/ViewFrameRateTest.java +3 −3 Original line number Diff line number Diff line Loading @@ -164,7 +164,7 @@ public class ViewFrameRateTest { mActivityRule.runOnUiThread(() -> { mMovingView.setFrameContentVelocity(1f); mMovingView.invalidate(); runAfterDraw(() -> assertEquals(60f, mViewRoot.getLastPreferredFrameRate(), 0f)); runAfterDraw(() -> assertEquals(80f, mViewRoot.getLastPreferredFrameRate(), 0f)); }); waitForAfterDraw(); } Loading @@ -190,7 +190,7 @@ public class ViewFrameRateTest { frameLayout.setFrameContentVelocity(1f); mMovingView.offsetTopAndBottom(100); frameLayout.invalidate(); runAfterDraw(() -> assertEquals(60f, mViewRoot.getLastPreferredFrameRate(), 0f)); runAfterDraw(() -> assertEquals(80f, mViewRoot.getLastPreferredFrameRate(), 0f)); }); waitForAfterDraw(); } Loading Loading @@ -435,7 +435,7 @@ public class ViewFrameRateTest { runAfterDraw(() -> { assertEquals(FRAME_RATE_CATEGORY_LOW, mViewRoot.getLastPreferredFrameRateCategory()); assertEquals(60f, mViewRoot.getLastPreferredFrameRate()); assertEquals(80f, mViewRoot.getLastPreferredFrameRate()); }); }); waitForAfterDraw(); Loading Loading
core/java/android/view/View.java +6 −2 Original line number Diff line number Diff line Loading @@ -34061,10 +34061,14 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } private float convertVelocityToFrameRate(float velocityPps) { // From UXR study, premium experience is: // 1500+ dp/s: 120fps // 0 - 1500 dp/s: 80fps // OEMs are likely to modify this to balance battery and user experience for their // specific device. float density = mAttachInfo.mDensity; float velocityDps = velocityPps / density; // Choose a frame rate in increments of 10fps return Math.min(MAX_FRAME_RATE, 60f + (10f * (float) Math.floor(velocityDps / 300f))); return (velocityDps >= 1500f) ? MAX_FRAME_RATE : 80f; } /**
core/tests/coretests/src/android/view/ViewFrameRateTest.java +3 −3 Original line number Diff line number Diff line Loading @@ -164,7 +164,7 @@ public class ViewFrameRateTest { mActivityRule.runOnUiThread(() -> { mMovingView.setFrameContentVelocity(1f); mMovingView.invalidate(); runAfterDraw(() -> assertEquals(60f, mViewRoot.getLastPreferredFrameRate(), 0f)); runAfterDraw(() -> assertEquals(80f, mViewRoot.getLastPreferredFrameRate(), 0f)); }); waitForAfterDraw(); } Loading @@ -190,7 +190,7 @@ public class ViewFrameRateTest { frameLayout.setFrameContentVelocity(1f); mMovingView.offsetTopAndBottom(100); frameLayout.invalidate(); runAfterDraw(() -> assertEquals(60f, mViewRoot.getLastPreferredFrameRate(), 0f)); runAfterDraw(() -> assertEquals(80f, mViewRoot.getLastPreferredFrameRate(), 0f)); }); waitForAfterDraw(); } Loading Loading @@ -435,7 +435,7 @@ public class ViewFrameRateTest { runAfterDraw(() -> { assertEquals(FRAME_RATE_CATEGORY_LOW, mViewRoot.getLastPreferredFrameRateCategory()); assertEquals(60f, mViewRoot.getLastPreferredFrameRate()); assertEquals(80f, mViewRoot.getLastPreferredFrameRate()); }); }); waitForAfterDraw(); Loading