From dc97d15a8cc3060b935d18bc3b84c9e5b66b715f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Mlynari=C4=8D?= Date: Mon, 23 May 2022 14:40:03 +0200 Subject: [PATCH] Add JankMetricEffect Change-Id: I8a5d90188b52ec1c11eec1c2724dda1332615768 --- .../core/ui/JankStatsExtensions.kt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/core-ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/JankStatsExtensions.kt b/core-ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/JankStatsExtensions.kt index 9bc9e9eeb..3d606b6a3 100644 --- a/core-ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/JankStatsExtensions.kt +++ b/core-ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/JankStatsExtensions.kt @@ -17,9 +17,11 @@ package com.google.samples.apps.nowinandroid.core.ui import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalView import androidx.metrics.performance.PerformanceMetricsState +import kotlinx.coroutines.CoroutineScope /** * Retrieves [PerformanceMetricsState.MetricsStateHolder] from current [LocalView] and @@ -34,3 +36,19 @@ fun rememberMetricsStateHolder(): PerformanceMetricsState.MetricsStateHolder { PerformanceMetricsState.getForHierarchy(localView) } } + +/** + * Convenience function to work with [PerformanceMetricsState] state. The side effect is + * re-launched if any of the [keys] value is not equal to the previous composition. + * @see JankMetricDisposableEffect if you need to work with DisposableEffect to cleanup added state. + */ +@Composable +fun JankMetricEffect( + vararg keys: Any?, + reportMetric: suspend CoroutineScope.(state: PerformanceMetricsState.MetricsStateHolder) -> Unit +) { + val metrics = rememberMetricsStateHolder() + LaunchedEffect(metrics, *keys) { + reportMetric(metrics) + } +}