Skip to content

Commit 7e6cb46

Browse files
Merge pull request #328 from android/bw/moreJankstats
Add more jank tracking
2 parents f27365f + ee2e3db commit 7e6cb46

File tree

7 files changed

+30
-14
lines changed
  • app/src/main/java/com/google/samples/apps/nowinandroid/ui
  • core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui
  • feature
    • author/src/main/java/com/google/samples/apps/nowinandroid/feature/author
    • bookmarks/src/main/java/com/google/samples/apps/nowinandroid/feature/bookmarks
    • foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou
    • interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests
    • topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic

7 files changed

+30
-14
lines changed

app/src/main/java/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ import com.google.samples.apps.nowinandroid.core.designsystem.icon.Icon.Drawable
3333
import com.google.samples.apps.nowinandroid.core.designsystem.icon.Icon.ImageVectorIcon
3434
import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons
3535
import com.google.samples.apps.nowinandroid.core.navigation.NiaNavigationDestination
36-
import com.google.samples.apps.nowinandroid.core.ui.JankMetricDisposableEffect
36+
import com.google.samples.apps.nowinandroid.core.ui.TrackDisposableJank
3737
import com.google.samples.apps.nowinandroid.feature.bookmarks.R as bookmarksR
3838
import com.google.samples.apps.nowinandroid.feature.bookmarks.navigation.BookmarksDestination
3939
import com.google.samples.apps.nowinandroid.feature.foryou.R as forYouR
@@ -141,7 +141,7 @@ class NiaAppState(
141141
*/
142142
@Composable
143143
private fun NavigationTrackingSideEffect(navController: NavHostController) {
144-
JankMetricDisposableEffect(navController) { metricsHolder ->
144+
TrackDisposableJank(navController) { metricsHolder ->
145145
val listener = NavController.OnDestinationChangedListener { _, destination, _ ->
146146
metricsHolder.state?.putState("Navigation", destination.route.toString())
147147
}

core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/JankStatsExtensions.kt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,10 @@ fun rememberMetricsStateHolder(): Holder {
4646
/**
4747
* Convenience function to work with [PerformanceMetricsState] state. The side effect is
4848
* re-launched if any of the [keys] value is not equal to the previous composition.
49-
* @see JankMetricDisposableEffect if you need to work with DisposableEffect to cleanup added state.
49+
* @see TrackDisposableJank if you need to work with DisposableEffect to cleanup added state.
5050
*/
5151
@Composable
52-
fun JankMetricEffect(
52+
fun TrackJank(
5353
vararg keys: Any?,
5454
reportMetric: suspend CoroutineScope.(state: Holder) -> Unit
5555
) {
@@ -64,7 +64,7 @@ fun JankMetricEffect(
6464
* The side effect is re-launched if any of the [keys] value is not equal to the previous composition.
6565
*/
6666
@Composable
67-
fun JankMetricDisposableEffect(
67+
fun TrackDisposableJank(
6868
vararg keys: Any?,
6969
reportMetric: DisposableEffectScope.(state: Holder) -> DisposableEffectResult
7070
) {
@@ -74,9 +74,12 @@ fun JankMetricDisposableEffect(
7474
}
7575
}
7676

77+
/**
78+
* Track jank while scrolling anything that's scrollable.
79+
*/
7780
@Composable
7881
fun TrackScrollJank(scrollableState: ScrollableState, stateName: String) {
79-
JankMetricEffect(scrollableState) { metricsHolder ->
82+
TrackJank(scrollableState) { metricsHolder ->
8083
snapshotFlow { scrollableState.isScrollInProgress }.collect { isScrollInProgress ->
8184
metricsHolder.state?.apply {
8285
if (isScrollInProgress) {

feature/author/src/main/java/com/google/samples/apps/nowinandroid/feature/author/AuthorScreen.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import androidx.compose.foundation.layout.windowInsetsBottomHeight
3030
import androidx.compose.foundation.layout.windowInsetsTopHeight
3131
import androidx.compose.foundation.lazy.LazyColumn
3232
import androidx.compose.foundation.lazy.LazyListScope
33+
import androidx.compose.foundation.lazy.rememberLazyListState
3334
import androidx.compose.foundation.shape.CircleShape
3435
import androidx.compose.material.icons.Icons.Filled
3536
import androidx.compose.material.icons.filled.ArrowBack
@@ -59,6 +60,7 @@ import com.google.samples.apps.nowinandroid.core.model.data.SaveableNewsResource
5960
import com.google.samples.apps.nowinandroid.core.model.data.previewAuthors
6061
import com.google.samples.apps.nowinandroid.core.model.data.previewNewsResources
6162
import com.google.samples.apps.nowinandroid.core.ui.DevicePreviews
63+
import com.google.samples.apps.nowinandroid.core.ui.TrackScrollJank
6264
import com.google.samples.apps.nowinandroid.core.ui.newsResourceCardItems
6365

6466
@OptIn(ExperimentalLifecycleComposeApi::class)
@@ -91,9 +93,12 @@ internal fun AuthorScreen(
9193
onBookmarkChanged: (String, Boolean) -> Unit,
9294
modifier: Modifier = Modifier,
9395
) {
96+
val scrollableState = rememberLazyListState()
97+
TrackScrollJank(scrollableState = scrollableState, stateName = "author:column")
9498
LazyColumn(
9599
modifier = modifier,
96-
horizontalAlignment = Alignment.CenterHorizontally
100+
horizontalAlignment = Alignment.CenterHorizontally,
101+
state = scrollableState
97102
) {
98103
item {
99104
Spacer(Modifier.windowInsetsTopHeight(WindowInsets.safeDrawing))

feature/bookmarks/src/main/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreen.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import androidx.compose.foundation.layout.wrapContentSize
3131
import androidx.compose.foundation.lazy.grid.GridCells.Adaptive
3232
import androidx.compose.foundation.lazy.grid.GridItemSpan
3333
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
34+
import androidx.compose.foundation.lazy.grid.rememberLazyGridState
3435
import androidx.compose.material3.ExperimentalMaterial3Api
3536
import androidx.compose.material3.Scaffold
3637
import androidx.compose.material3.TopAppBarDefaults
@@ -48,6 +49,7 @@ import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaLoadi
4849
import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaTopAppBar
4950
import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons
5051
import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState
52+
import com.google.samples.apps.nowinandroid.core.ui.TrackScrollJank
5153
import com.google.samples.apps.nowinandroid.core.ui.newsFeed
5254

5355
@OptIn(ExperimentalLifecycleComposeApi::class)
@@ -87,11 +89,14 @@ fun BookmarksScreen(
8789
containerColor = Color.Transparent,
8890
contentWindowInsets = WindowInsets(0, 0, 0, 0)
8991
) { innerPadding ->
92+
val scrollableState = rememberLazyGridState()
93+
TrackScrollJank(scrollableState = scrollableState, stateName = "bookmarks:grid")
9094
LazyVerticalGrid(
9195
columns = Adaptive(300.dp),
9296
contentPadding = PaddingValues(16.dp),
9397
horizontalArrangement = Arrangement.spacedBy(32.dp),
9498
verticalArrangement = Arrangement.spacedBy(24.dp),
99+
state = scrollableState,
95100
modifier = modifier
96101
.fillMaxSize()
97102
.testTag("bookmarks:feed")

feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreen.kt

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -175,10 +175,8 @@ fun ForYouScreen(
175175
}
176176
}
177177

178-
val tag = "forYou:feed"
179-
180-
val lazyGridState = rememberLazyGridState()
181-
TrackScrollJank(scrollableState = lazyGridState, stateName = tag)
178+
val state = rememberLazyGridState()
179+
TrackScrollJank(scrollableState = state, stateName = "forYou:feed")
182180

183181
val notConnected = stringResource(R.string.for_you_not_connected)
184182
LaunchedEffect(isOffline) {
@@ -198,7 +196,7 @@ fun ForYouScreen(
198196
.consumedWindowInsets(innerPadding)
199197
.fillMaxSize()
200198
.testTag("forYou:feed"),
201-
state = lazyGridState
199+
state = state
202200
) {
203201
interestsSelection(
204202
interestsSelectionState = interestsSelectionState,

feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/InterestsScreen.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ import com.google.samples.apps.nowinandroid.core.model.data.FollowableTopic
4141
import com.google.samples.apps.nowinandroid.core.model.data.previewAuthors
4242
import com.google.samples.apps.nowinandroid.core.model.data.previewTopics
4343
import com.google.samples.apps.nowinandroid.core.ui.DevicePreviews
44-
import com.google.samples.apps.nowinandroid.core.ui.JankMetricDisposableEffect
44+
import com.google.samples.apps.nowinandroid.core.ui.TrackDisposableJank
4545

4646
@OptIn(ExperimentalLifecycleComposeApi::class)
4747
@Composable
@@ -65,7 +65,7 @@ fun InterestsRoute(
6565
modifier = modifier
6666
)
6767

68-
JankMetricDisposableEffect(tabState) { metricsHolder ->
68+
TrackDisposableJank(tabState) { metricsHolder ->
6969
metricsHolder.state?.putState("Interests:TabState", "currentIndex:${tabState.currentIndex}")
7070

7171
onDispose {

feature/topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic/TopicScreen.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import androidx.compose.foundation.layout.windowInsetsBottomHeight
3030
import androidx.compose.foundation.layout.windowInsetsTopHeight
3131
import androidx.compose.foundation.lazy.LazyColumn
3232
import androidx.compose.foundation.lazy.LazyListScope
33+
import androidx.compose.foundation.lazy.rememberLazyListState
3334
import androidx.compose.material.icons.Icons.Filled
3435
import androidx.compose.material.icons.filled.ArrowBack
3536
import androidx.compose.material3.Icon
@@ -56,6 +57,7 @@ import com.google.samples.apps.nowinandroid.core.model.data.SaveableNewsResource
5657
import com.google.samples.apps.nowinandroid.core.model.data.previewNewsResources
5758
import com.google.samples.apps.nowinandroid.core.model.data.previewTopics
5859
import com.google.samples.apps.nowinandroid.core.ui.DevicePreviews
60+
import com.google.samples.apps.nowinandroid.core.ui.TrackScrollJank
5961
import com.google.samples.apps.nowinandroid.core.ui.newsResourceCardItems
6062
import com.google.samples.apps.nowinandroid.feature.topic.R.string
6163
import com.google.samples.apps.nowinandroid.feature.topic.TopicUiState.Loading
@@ -90,7 +92,10 @@ internal fun TopicScreen(
9092
onBookmarkChanged: (String, Boolean) -> Unit,
9193
modifier: Modifier = Modifier,
9294
) {
95+
val state = rememberLazyListState()
96+
TrackScrollJank(scrollableState = state, stateName = "topic:screen")
9397
LazyColumn(
98+
state = state,
9499
modifier = modifier,
95100
horizontalAlignment = Alignment.CenterHorizontally
96101
) {

0 commit comments

Comments
 (0)