diff --git a/packages/react-native/ReactCommon/yoga/yoga/algorithm/CalculateLayout.cpp b/packages/react-native/ReactCommon/yoga/yoga/algorithm/CalculateLayout.cpp index 81a5f3b8a0b6..3f7416d6711f 100644 --- a/packages/react-native/ReactCommon/yoga/yoga/algorithm/CalculateLayout.cpp +++ b/packages/react-native/ReactCommon/yoga/yoga/algorithm/CalculateLayout.cpp @@ -2266,6 +2266,10 @@ bool calculateLayoutInternal( (performLayout ? layoutMarkerData.cachedLayouts : layoutMarkerData.cachedMeasures) += 1; } else { + // Track cache misses for computing hit rates + (performLayout ? layoutMarkerData.layoutCacheMisses + : layoutMarkerData.measureCacheMisses) += 1; + calculateLayoutImpl( node, availableWidth, diff --git a/packages/react-native/ReactCommon/yoga/yoga/event/event.h b/packages/react-native/ReactCommon/yoga/yoga/event/event.h index 587c1cd06367..d9f5a63bca58 100644 --- a/packages/react-native/ReactCommon/yoga/yoga/event/event.h +++ b/packages/react-native/ReactCommon/yoga/yoga/event/event.h @@ -41,6 +41,10 @@ struct LayoutData { uint32_t maxMeasureCache = 0; int cachedLayouts = 0; int cachedMeasures = 0; + // Cache misses occur when a cached result is not found and layout must be + // recalculated. Track these to compute cache hit rates. + int layoutCacheMisses = 0; + int measureCacheMisses = 0; int measureCallbacks = 0; std::array(LayoutPassReason::COUNT)> measureCallbackReasonsCount;