diff options
| author | 2023-10-13 16:13:58 +0800 | |
|---|---|---|
| committer | 2023-12-20 06:16:32 +0000 | |
| commit | a57a0fb71e8e98f6c128f0cf5f64e166f019f9f2 (patch) | |
| tree | b07fef4248f9d55c75b0b30aa1b32ae577ea79e5 | |
| parent | 6300e0485d9f4d39cc7f451f9d16ddf759a3810a (diff) | |
Metirc largest view percentage each inflate frame
Bug: 301343249
Test: record_android_trace view -a*
Flag: ACONFIG android.view.flags.Flags.toolkitMetrics DEVELOPMENT
Change-Id: Icd80c9e8790a49d8efa7a4596cc2858222385618
| -rw-r--r-- | core/java/android/view/View.java | 16 | ||||
| -rw-r--r-- | core/java/android/view/ViewRootImpl.java | 15 |
2 files changed, 26 insertions, 5 deletions
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index e4b709e66fbc..ec994590e339 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -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; @@ -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); @@ -2393,6 +2395,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, | StateSet.VIEW_STATE_PRESSED); sToolkitSetFrameRateReadOnlyFlagValue = toolkitSetFrameRateReadOnly(); + sToolkitMetricsForFrameRateDecisionFlagValue = toolkitMetricsForFrameRateDecision(); } /** @@ -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) { + 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; @@ -33104,6 +33107,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } viewRootImpl.votePreferredFrameRateCategory(frameRateCateogry); } + if (sToolkitMetricsForFrameRateDecisionFlagValue) { + viewRootImpl.recordViewPercentage(sizePercentage); + } } } diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 185328277dfd..487b15c03292 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -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. @@ -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; @@ -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 @@ -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) { @@ -5058,6 +5066,7 @@ public final class ViewRootImpl implements ViewParent, if (DEBUG_FPS) { trackFPS(); } + if (sToolkitMetricsForFrameRateDecisionFlagValue) { collectFrameRateDecisionMetrics(); } @@ -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); + } } |