From 299a11ec7ff845769d82f339ce451e85ea45b1c3 Mon Sep 17 00:00:00 2001 From: NachoSoto Date: Thu, 19 Oct 2023 15:19:37 -0700 Subject: [PATCH] `Paywalls`: optimize `AdaptiveComposable` This fixes the performance issue where it was constantly laying out, consuming about 10% CPU non-stop. With this change, after the initial layout, CPU usage is 0% on a paywall. --- .../revenuecatui/composables/AdaptiveComposable.kt | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/ui/revenuecatui/src/main/kotlin/com/revenuecat/purchases/ui/revenuecatui/composables/AdaptiveComposable.kt b/ui/revenuecatui/src/main/kotlin/com/revenuecat/purchases/ui/revenuecatui/composables/AdaptiveComposable.kt index 34e6de3c70..7d7c929371 100644 --- a/ui/revenuecatui/src/main/kotlin/com/revenuecat/purchases/ui/revenuecatui/composables/AdaptiveComposable.kt +++ b/ui/revenuecatui/src/main/kotlin/com/revenuecat/purchases/ui/revenuecatui/composables/AdaptiveComposable.kt @@ -27,14 +27,16 @@ internal fun RowScope.AdaptiveComposable(composables: List<@Composable () -> Uni modifier = Modifier .fillMaxWidth() .onGloballyPositioned { coordinates -> - maxSize = coordinates.size.width + if (coordinates.size.width != maxSize) { + maxSize = coordinates.size.width + } } .align(Alignment.CenterVertically), ) { // Offscreen measurement Box( Modifier - .graphicsLayer(alpha = 0.2f) + .graphicsLayer(alpha = 0.0f) .fillMaxWidth() .wrapContentWidth(unbounded = true) .align(Alignment.Center), @@ -42,8 +44,10 @@ internal fun RowScope.AdaptiveComposable(composables: List<@Composable () -> Uni composables.forEachIndexed { index, view -> Box( Modifier.layout { measurable, _ -> - val placeable = measurable.measure(Constraints()) - viewSizes[index] = placeable.width + if (viewSizes[index] == 0) { + viewSizes[index] = measurable.measure(Constraints()).width + } + layout(0, 0) {} }, ) {