summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Chaohui Wang <chaohuiw@google.com> 2022-10-17 15:05:51 +0800
committer Chaohui Wang <chaohuiw@google.com> 2022-10-17 15:13:28 +0800
commitaba3bba3cd00ff5e4a2b9127cc0cf4faaab85c72 (patch)
tree7a2569c681043362662e8a72196458becbb80376
parent1c2241d939e8e7d73e71658a625748c15eda7daf (diff)
Add TimeMeasurer for Spa
To measure the app list first loaded time. Bug: 235727273 Test: Manual with App List page Change-Id: I4edc54edd850e2d7d3026782aa317428b13c27aa
-rw-r--r--packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/compose/TimeMeasurer.kt56
-rw-r--r--packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppList.kt3
2 files changed, 59 insertions, 0 deletions
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/compose/TimeMeasurer.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/compose/TimeMeasurer.kt
new file mode 100644
index 000000000000..b23f4e083a1e
--- /dev/null
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/compose/TimeMeasurer.kt
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+@file:OptIn(ExperimentalTime::class)
+
+package com.android.settingslib.spa.framework.compose
+
+import android.util.Log
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
+import kotlin.time.ExperimentalTime
+import kotlin.time.TimeSource
+
+const val ENABLE_MEASURE_TIME = false
+
+interface TimeMeasurer {
+ fun log(msg: String) {}
+ fun logFirst(msg: String) {}
+
+ companion object {
+ private object EmptyTimeMeasurer : TimeMeasurer
+
+ @Composable
+ fun rememberTimeMeasurer(tag: String): TimeMeasurer = remember {
+ if (ENABLE_MEASURE_TIME) TimeMeasurerImpl(tag) else EmptyTimeMeasurer
+ }
+ }
+}
+
+private class TimeMeasurerImpl(private val tag: String) : TimeMeasurer {
+ private val mark = TimeSource.Monotonic.markNow()
+ private val msgLogged = mutableSetOf<String>()
+
+ override fun log(msg: String) {
+ Log.d(tag, "Timer $msg: ${mark.elapsedNow()}")
+ }
+
+ override fun logFirst(msg: String) {
+ if (msgLogged.add(msg)) {
+ Log.d(tag, "Timer $msg: ${mark.elapsedNow()}")
+ }
+ }
+}
diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppList.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppList.kt
index 6318b4e9c186..c5ad1814a518 100644
--- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppList.kt
+++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/AppList.kt
@@ -28,6 +28,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.lifecycle.viewmodel.compose.viewModel
import com.android.settingslib.spa.framework.compose.LogCompositions
+import com.android.settingslib.spa.framework.compose.TimeMeasurer.Companion.rememberTimeMeasurer
import com.android.settingslib.spa.framework.compose.toState
import com.android.settingslib.spa.framework.theme.SettingsDimension
import com.android.settingslib.spa.widget.ui.PlaceholderTitle
@@ -66,7 +67,9 @@ private fun <T : AppRecord> AppListWidget(
listModel: AppListModel<T>,
appItem: @Composable (itemState: AppListItemModel<T>) -> Unit,
) {
+ val timeMeasurer = rememberTimeMeasurer(TAG)
appListData.value?.let { (list, option) ->
+ timeMeasurer.logFirst("app list first loaded")
if (list.isEmpty()) {
PlaceholderTitle(stringResource(R.string.no_applications))
return