Loading core/java/android/view/View.java +11 −5 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import static android.view.displayhash.DisplayHashResultCallback.EXTRA_DISPLAY_H import static android.view.displayhash.DisplayHashResultCallback.EXTRA_DISPLAY_HASH_ERROR_CODE; 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.toolkitMetricsForFrameRateDecision; import static android.view.flags.Flags.toolkitSetFrameRateReadOnly; import static android.view.flags.Flags.viewVelocityApi; import static android.view.inputmethod.Flags.FLAG_HOME_SCREEN_HANDWRITING_DELEGATOR; Loading Loading @@ -2309,6 +2310,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, protected static final int[] PRESSED_ENABLED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET; private static boolean sToolkitSetFrameRateReadOnlyFlagValue; private static boolean sToolkitMetricsForFrameRateDecisionFlagValue; static { EMPTY_STATE_SET = StateSet.get(0); Loading Loading @@ -2393,6 +2395,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, | StateSet.VIEW_STATE_PRESSED); sToolkitSetFrameRateReadOnlyFlagValue = toolkitSetFrameRateReadOnly(); sToolkitMetricsForFrameRateDecisionFlagValue = toolkitMetricsForFrameRateDecision(); } /** Loading Loading @@ -33084,11 +33087,11 @@ public class View implements Drawable.Callback, KeyEvent.Callback, private void votePreferredFrameRate() { // use toolkitSetFrameRate flag to gate the change if (sToolkitSetFrameRateReadOnlyFlagValue) { ViewRootImpl viewRootImpl = getViewRootImpl(); float sizePercentage = getSizePercentage(); int frameRateCateogry = calculateFrameRateCategory(sizePercentage); if (viewRootImpl != null && sizePercentage > 0) { if (sToolkitSetFrameRateReadOnlyFlagValue) { if (mPreferredFrameRate < 0) { if (mPreferredFrameRate == REQUESTED_FRAME_RATE_CATEGORY_NO_PREFERENCE) { frameRateCateogry = FRAME_RATE_CATEGORY_NO_PREFERENCE; Loading @@ -33104,6 +33107,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } viewRootImpl.votePreferredFrameRateCategory(frameRateCateogry); } if (sToolkitMetricsForFrameRateDecisionFlagValue) { viewRootImpl.recordViewPercentage(sizePercentage); } } } core/java/android/view/ViewRootImpl.java +15 −0 Original line number Diff line number Diff line Loading @@ -827,6 +827,8 @@ public final class ViewRootImpl implements ViewParent, private boolean mInsetsAnimationRunning; private long mPreviousFrameDrawnTime = -1; // The largest view size percentage to the display size. Used on trace to collect metric. private float mLargestChildPercentage = 0.0f; /** * The resolved pointer icon type requested by this window. Loading Loading @@ -1066,6 +1068,7 @@ public final class ViewRootImpl implements ViewParent, private String mTag = TAG; private String mFpsTraceName; private String mLargestViewTraceName; private static boolean sToolkitSetFrameRateReadOnlyFlagValue; private static boolean sToolkitMetricsForFrameRateDecisionFlagValue; Loading Loading @@ -1317,6 +1320,7 @@ public final class ViewRootImpl implements ViewParent, attrs = mWindowAttributes; setTag(); mFpsTraceName = "FPS of " + getTitle(); mLargestViewTraceName = "Largest view percentage(per hundred) of " + getTitle(); if (DEBUG_KEEP_SCREEN_ON && (mClientWindowLayoutFlags & WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) != 0 Loading Loading @@ -4738,6 +4742,10 @@ public final class ViewRootImpl implements ViewParent, long fps = NANOS_PER_SEC / timeDiff; Trace.setCounter(mFpsTraceName, fps); mPreviousFrameDrawnTime = expectedDrawnTime; long percentage = (long) (mLargestChildPercentage * 100); Trace.setCounter(mLargestViewTraceName, percentage); mLargestChildPercentage = 0.0f; } private void reportDrawFinished(@Nullable Transaction t, int seqId) { Loading Loading @@ -5058,6 +5066,7 @@ public final class ViewRootImpl implements ViewParent, if (DEBUG_FPS) { trackFPS(); } if (sToolkitMetricsForFrameRateDecisionFlagValue) { collectFrameRateDecisionMetrics(); } Loading Loading @@ -12261,4 +12270,10 @@ public final class ViewRootImpl implements ViewParent, void setBackKeyCallbackForWindowlessWindow(@NonNull Predicate<KeyEvent> callback) { mWindowlessBackKeyCallback = callback; } void recordViewPercentage(float percentage) { if (!Trace.isEnabled()) return; // Record the largest view of percentage to the display size. mLargestChildPercentage = Math.max(percentage, mLargestChildPercentage); } } Loading
core/java/android/view/View.java +11 −5 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import static android.view.displayhash.DisplayHashResultCallback.EXTRA_DISPLAY_H import static android.view.displayhash.DisplayHashResultCallback.EXTRA_DISPLAY_HASH_ERROR_CODE; 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.toolkitMetricsForFrameRateDecision; import static android.view.flags.Flags.toolkitSetFrameRateReadOnly; import static android.view.flags.Flags.viewVelocityApi; import static android.view.inputmethod.Flags.FLAG_HOME_SCREEN_HANDWRITING_DELEGATOR; Loading Loading @@ -2309,6 +2310,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, protected static final int[] PRESSED_ENABLED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET; private static boolean sToolkitSetFrameRateReadOnlyFlagValue; private static boolean sToolkitMetricsForFrameRateDecisionFlagValue; static { EMPTY_STATE_SET = StateSet.get(0); Loading Loading @@ -2393,6 +2395,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, | StateSet.VIEW_STATE_PRESSED); sToolkitSetFrameRateReadOnlyFlagValue = toolkitSetFrameRateReadOnly(); sToolkitMetricsForFrameRateDecisionFlagValue = toolkitMetricsForFrameRateDecision(); } /** Loading Loading @@ -33084,11 +33087,11 @@ public class View implements Drawable.Callback, KeyEvent.Callback, private void votePreferredFrameRate() { // use toolkitSetFrameRate flag to gate the change if (sToolkitSetFrameRateReadOnlyFlagValue) { ViewRootImpl viewRootImpl = getViewRootImpl(); float sizePercentage = getSizePercentage(); int frameRateCateogry = calculateFrameRateCategory(sizePercentage); if (viewRootImpl != null && sizePercentage > 0) { if (sToolkitSetFrameRateReadOnlyFlagValue) { if (mPreferredFrameRate < 0) { if (mPreferredFrameRate == REQUESTED_FRAME_RATE_CATEGORY_NO_PREFERENCE) { frameRateCateogry = FRAME_RATE_CATEGORY_NO_PREFERENCE; Loading @@ -33104,6 +33107,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } viewRootImpl.votePreferredFrameRateCategory(frameRateCateogry); } if (sToolkitMetricsForFrameRateDecisionFlagValue) { viewRootImpl.recordViewPercentage(sizePercentage); } } }
core/java/android/view/ViewRootImpl.java +15 −0 Original line number Diff line number Diff line Loading @@ -827,6 +827,8 @@ public final class ViewRootImpl implements ViewParent, private boolean mInsetsAnimationRunning; private long mPreviousFrameDrawnTime = -1; // The largest view size percentage to the display size. Used on trace to collect metric. private float mLargestChildPercentage = 0.0f; /** * The resolved pointer icon type requested by this window. Loading Loading @@ -1066,6 +1068,7 @@ public final class ViewRootImpl implements ViewParent, private String mTag = TAG; private String mFpsTraceName; private String mLargestViewTraceName; private static boolean sToolkitSetFrameRateReadOnlyFlagValue; private static boolean sToolkitMetricsForFrameRateDecisionFlagValue; Loading Loading @@ -1317,6 +1320,7 @@ public final class ViewRootImpl implements ViewParent, attrs = mWindowAttributes; setTag(); mFpsTraceName = "FPS of " + getTitle(); mLargestViewTraceName = "Largest view percentage(per hundred) of " + getTitle(); if (DEBUG_KEEP_SCREEN_ON && (mClientWindowLayoutFlags & WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) != 0 Loading Loading @@ -4738,6 +4742,10 @@ public final class ViewRootImpl implements ViewParent, long fps = NANOS_PER_SEC / timeDiff; Trace.setCounter(mFpsTraceName, fps); mPreviousFrameDrawnTime = expectedDrawnTime; long percentage = (long) (mLargestChildPercentage * 100); Trace.setCounter(mLargestViewTraceName, percentage); mLargestChildPercentage = 0.0f; } private void reportDrawFinished(@Nullable Transaction t, int seqId) { Loading Loading @@ -5058,6 +5066,7 @@ public final class ViewRootImpl implements ViewParent, if (DEBUG_FPS) { trackFPS(); } if (sToolkitMetricsForFrameRateDecisionFlagValue) { collectFrameRateDecisionMetrics(); } Loading Loading @@ -12261,4 +12270,10 @@ public final class ViewRootImpl implements ViewParent, void setBackKeyCallbackForWindowlessWindow(@NonNull Predicate<KeyEvent> callback) { mWindowlessBackKeyCallback = callback; } void recordViewPercentage(float percentage) { if (!Trace.isEnabled()) return; // Record the largest view of percentage to the display size. mLargestChildPercentage = Math.max(percentage, mLargestChildPercentage); } }