From b83e941c7360ba156847ea3f1bd0f7cb94498fd3 Mon Sep 17 00:00:00 2001 From: Murat Yener Date: Wed, 28 Jun 2023 11:27:16 -0700 Subject: [PATCH] Adds ProfileViewer to log the app's Baseline Profile Compilation Status --- .../samples/apps/nowinandroid/MainActivity.kt | 42 +++++++++++++++++++ gradle/libs.versions.toml | 2 +- 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/google/samples/apps/nowinandroid/MainActivity.kt b/app/src/main/java/com/google/samples/apps/nowinandroid/MainActivity.kt index 79d556f73..6fc795d8c 100644 --- a/app/src/main/java/com/google/samples/apps/nowinandroid/MainActivity.kt +++ b/app/src/main/java/com/google/samples/apps/nowinandroid/MainActivity.kt @@ -17,6 +17,7 @@ package com.google.samples.apps.nowinandroid import android.os.Bundle +import android.util.Log import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.viewModels @@ -35,6 +36,7 @@ import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import androidx.metrics.performance.JankStats +import androidx.profileinstaller.ProfileVerifier import com.google.accompanist.systemuicontroller.rememberSystemUiController import com.google.samples.apps.nowinandroid.MainActivityUiState.Loading import com.google.samples.apps.nowinandroid.MainActivityUiState.Success @@ -47,11 +49,15 @@ import com.google.samples.apps.nowinandroid.core.model.data.DarkThemeConfig import com.google.samples.apps.nowinandroid.core.model.data.ThemeBrand import com.google.samples.apps.nowinandroid.ui.NiaApp import dagger.hilt.android.AndroidEntryPoint +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import javax.inject.Inject +private const val TAG = "MainActivity" + @OptIn(ExperimentalMaterial3WindowSizeClassApi::class) @AndroidEntryPoint class MainActivity : ComponentActivity() { @@ -133,12 +139,48 @@ class MainActivity : ComponentActivity() { override fun onResume() { super.onResume() lazyStats.get().isTrackingEnabled = true + lifecycleScope.launch { + logCompilationStatus() + } } override fun onPause() { super.onPause() lazyStats.get().isTrackingEnabled = false } + + /** + * Logs the app's Baseline Profile Compilation Status using [ProfileVerifier]. + */ + private suspend fun logCompilationStatus() { + /* + When delivering through Google Play, the baseline profile is compiled during installation. + In this case you will see the correct state logged without any further action necessary. + To verify baseline profile installation locally, you need to manually trigger baseline + profile installation. + For immediate compilation, call: + `adb shell cmd package compile -f -m speed-profile com.example.macrobenchmark.target` + You can also trigger background optimizations: + `adb shell pm bg-dexopt-job` + Both jobs run asynchronously and might take some time complete. + To see quick turnaround of the ProfileVerifier, we recommend using `speed-profile`. + If you don't do either of these steps, you might only see the profile status reported as + "enqueued for compilation" when running the sample locally. + */ + withContext(Dispatchers.IO) { + val status = ProfileVerifier.getCompilationStatusAsync().get() + Log.d(TAG, "ProfileInstaller status code: ${status.profileInstallResultCode}") + Log.d( + TAG, + when { + status.isCompiledWithProfile -> "ProfileInstaller: is compiled with profile" + status.hasProfileEnqueuedForCompilation() -> + "ProfileInstaller: Enqueued for compilation" + else -> "Profile not compiled or enqueued" + } + ) + } + } } /** diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b0046ff66..d3262ab9c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -18,7 +18,7 @@ androidxLifecycle = "2.6.0-alpha05" androidxMacroBenchmark = "1.2.0-alpha16" androidxMetrics = "1.0.0-alpha03" androidxNavigation = "2.5.3" -androidxProfileinstaller = "1.2.1" +androidxProfileinstaller = "1.3.1" androidxStartup = "1.1.1" androidxTestCore = "1.5.0" androidxTestExt = "1.1.4"