diff options
| author | 2024-01-04 08:56:58 +0000 | |
|---|---|---|
| committer | 2024-01-04 08:56:58 +0000 | |
| commit | ccfa738ac046d13e8b30159e9a00cb87a8ad6c7c (patch) | |
| tree | f1efab5483fbfe07ea3fd27a708678ff4de845db | |
| parent | c34e586970b0f516c0c4b7b6fa8967c3bbc8117a (diff) | |
| parent | 8ba03525da913327ba66f5f861640c39806bf8f0 (diff) | |
Merge "Use measure caches during force layout traversal" into main
| -rw-r--r-- | core/java/android/view/View.java | 16 | ||||
| -rw-r--r-- | core/java/android/view/flags/view_flags.aconfig | 10 |
2 files changed, 25 insertions, 1 deletions
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 442ea661585c..75be7297001c 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.enableUseMeasureCacheDuringForceLayout; import static android.view.flags.Flags.toolkitMetricsForFrameRateDecision; import static android.view.flags.Flags.toolkitSetFrameRateReadOnly; import static android.view.flags.Flags.viewVelocityApi; @@ -955,6 +956,12 @@ public class View implements Drawable.Callback, KeyEvent.Callback, private static boolean sAlwaysRemeasureExactly = false; /** + * When true makes it possible to use onMeasure caches also when the force layout flag is + * enabled. This helps avoiding multiple measures in the same frame with the same dimensions. + */ + private static boolean sUseMeasureCacheDuringForceLayoutFlagValue; + + /** * Allow setForeground/setBackground to be called (and ignored) on a textureview, * without throwing */ @@ -2396,6 +2403,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, sToolkitSetFrameRateReadOnlyFlagValue = toolkitSetFrameRateReadOnly(); sToolkitMetricsForFrameRateDecisionFlagValue = toolkitMetricsForFrameRateDecision(); + sUseMeasureCacheDuringForceLayoutFlagValue = enableUseMeasureCacheDuringForceLayout(); } /** @@ -27417,7 +27425,13 @@ public class View implements Drawable.Callback, KeyEvent.Callback, resolveRtlPropertiesIfNeeded(); - int cacheIndex = forceLayout ? -1 : mMeasureCache.indexOfKey(key); + int cacheIndex; + if (sUseMeasureCacheDuringForceLayoutFlagValue) { + cacheIndex = mMeasureCache.indexOfKey(key); + } else { + cacheIndex = forceLayout ? -1 : mMeasureCache.indexOfKey(key); + } + if (cacheIndex < 0 || sIgnoreMeasureCache) { if (isTraversalTracingEnabled()) { Trace.beginSection(mTracingStrings.onMeasure); diff --git a/core/java/android/view/flags/view_flags.aconfig b/core/java/android/view/flags/view_flags.aconfig new file mode 100644 index 000000000000..a74b06a491e8 --- /dev/null +++ b/core/java/android/view/flags/view_flags.aconfig @@ -0,0 +1,10 @@ +package: "android.view.flags" + +flag { + name: "enable_use_measure_cache_during_force_layout" + namespace: "toolkit" + description: "Enables using the measure cache during a view force layout from the second " + "onMeasure call onwards during the same traversal." + bug: "316170253" + is_fixed_read_only: true +} |