Merge "Use measure caches during force layout traversal" into main
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 442ea66..75be729 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_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 @@
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 @@
sToolkitSetFrameRateReadOnlyFlagValue = toolkitSetFrameRateReadOnly();
sToolkitMetricsForFrameRateDecisionFlagValue = toolkitMetricsForFrameRateDecision();
+ sUseMeasureCacheDuringForceLayoutFlagValue = enableUseMeasureCacheDuringForceLayout();
}
/**
@@ -27417,7 +27425,13 @@
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 0000000..a74b06a
--- /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
+}