Merge "Updated output check when executing pm dump-profiles for Android U compatibility" into androidx-main
diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/BaselineProfiles.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/BaselineProfiles.kt
index e41a947..d839e8f 100644
--- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/BaselineProfiles.kt
+++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/BaselineProfiles.kt
@@ -27,6 +27,7 @@
import androidx.benchmark.Outputs
import androidx.benchmark.Shell
import androidx.benchmark.userspaceTrace
+import androidx.core.os.BuildCompat
import java.io.File
/**
@@ -147,7 +148,8 @@
// Don't reset for subsequent iterations
Log.d(TAG, "Killing package $packageName")
killProcessBlock()
- mode.compileImpl(packageName = packageName,
+ mode.compileImpl(
+ packageName = packageName,
killProcessBlock = killProcessBlock
) {
scope.iteration = iteration
@@ -172,7 +174,8 @@
lastProfile = unfilteredProfile
stableCount = 1
} else {
- Log.d(TAG,
+ Log.d(
+ TAG,
"Profiles stable in iteration $iteration (for $stableCount iterations)"
)
stableCount += 1
@@ -295,10 +298,22 @@
* Does not require root.
*/
@RequiresApi(33)
[email protected](BuildCompat.PrereleaseSdkCheck::class)
private fun extractProfile(packageName: String): String {
- Shell.executeScriptSilent(
- "pm dump-profiles --dump-classes-and-methods $packageName"
- )
+
+ val dumpCommand = "pm dump-profiles --dump-classes-and-methods $packageName"
+ if (BuildCompat.isAtLeastU()) {
+ // On api 34 this will produce an output like:
+ // Profile saved to '/data/misc/profman/<PACKAGE_NAME>-primary.prof.txt'
+ val stdout = Shell.executeScriptCaptureStdout(dumpCommand).trim()
+ val expected = "Profile saved to '/data/misc/profman/$packageName-primary.prof.txt'"
+ check(stdout == expected) {
+ "Expected `pm dump-profiles` stdout to be $expected but was $stdout"
+ }
+ } else {
+ // On api 33 and below this command does not produce any output
+ Shell.executeScriptSilent(dumpCommand)
+ }
val fileName = "$packageName-primary.prof.txt"
Shell.executeScriptSilent(
"mv /data/misc/profman/$fileName ${Outputs.dirUsableByAppAndShell}/"