tracing-perfetto: Restricting SDK to R+
Restricting tracing-perfetto to API 30+ due to using sideloaded tracebox
in Benchmark on APIs below 30 and different configuration requirements
as a result (e.g. socket address).
Bug: 234351579
Bug: 233890537
Test: n/a
Change-Id: Ib6ce8cec75c7d555492ff076c38c25e79fbc056a
diff --git a/benchmark/benchmark-common/src/main/java/androidx/benchmark/perfetto/PerfettoCapture.kt b/benchmark/benchmark-common/src/main/java/androidx/benchmark/perfetto/PerfettoCapture.kt
index 9e6a901..395b23e 100644
--- a/benchmark/benchmark-common/src/main/java/androidx/benchmark/perfetto/PerfettoCapture.kt
+++ b/benchmark/benchmark-common/src/main/java/androidx/benchmark/perfetto/PerfettoCapture.kt
@@ -94,6 +94,7 @@
* Enables Perfetto SDK tracing in an app if present. Provides required binary dependencies to
* the app if they're missing and the [provideBinariesIfMissing] parameter is set to `true`.
*/
+ @RequiresApi(Build.VERSION_CODES.R) // TODO(234351579): Support API < 30
fun enableAndroidxTracingPerfetto(
targetPackage: String,
provideBinariesIfMissing: Boolean
diff --git a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoSdkHandshakeTest.kt b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoSdkHandshakeTest.kt
index 2a06a94..cc5cb21 100644
--- a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoSdkHandshakeTest.kt
+++ b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoSdkHandshakeTest.kt
@@ -16,6 +16,8 @@
package androidx.benchmark.macro.perfetto
+import android.os.Build
+import androidx.annotation.RequiresApi
import androidx.benchmark.Shell
import androidx.benchmark.macro.MacrobenchmarkScope
import androidx.benchmark.macro.Packages
@@ -33,12 +35,14 @@
import org.junit.runners.Parameterized.Parameters
private const val tracingPerfettoVersion = "1.0.0-alpha01" // TODO(224510255): get by 'reflection'
+private const val minSupportedSdk = Build.VERSION_CODES.R // TODO(234351579): Support API < 30
@RunWith(Parameterized::class)
/**
* End-to-end test verifying the process of enabling Perfetto SDK tracing using a broadcast.
* @see [androidx.tracing.perfetto.TracingReceiver]
*/
+@RequiresApi(Build.VERSION_CODES.R) // TODO(234351579): Support API < 30
class PerfettoSdkHandshakeTest(private val testConfig: TestConfig) {
private val perfettoCapture = PerfettoCapture()
private val targetPackage = Packages.TARGET
@@ -78,6 +82,7 @@
@Test
fun test_enable() {
assumeTrue(isAbiSupported())
+ assumeTrue(Build.VERSION.SDK_INT >= minSupportedSdk)
// start the process if required to already be running when the handshake starts
if (testConfig.packageAlive) enablePackage()
@@ -107,8 +112,9 @@
}
@Test
- fun test_detectUnsupported() {
+ fun test_detectUnsupported_abi() {
assumeTrue(!isAbiSupported())
+ assumeTrue(Build.VERSION.SDK_INT >= minSupportedSdk)
if (testConfig.packageAlive) enablePackage()
@@ -118,10 +124,26 @@
shouldProvideBinaries(testConfig.sdkDelivery)
)
} catch (e: IllegalStateException) {
- assertThat(e.message).contains("Unsupported ABI")
+ assertThat(e.message).ignoringCase().contains("Unsupported ABI")
}
}
+ @Test
+ fun test_detectUnsupported_sdk() {
+ assumeTrue(isAbiSupported())
+ assumeTrue(Build.VERSION.SDK_INT < minSupportedSdk)
+
+ if (testConfig.packageAlive) enablePackage()
+
+ val response =
+ perfettoCapture.enableAndroidxTracingPerfetto(
+ targetPackage,
+ shouldProvideBinaries(testConfig.sdkDelivery)
+ )
+
+ assertThat(response).ignoringCase().contains("SDK version not supported")
+ }
+
private fun enablePackage() {
scope.pressHome()
scope.startActivityAndWait()
diff --git a/compose/integration-tests/macrobenchmark/src/androidTest/java/androidx/compose/integration/macrobenchmark/TrivialTracingBenchmark.kt b/compose/integration-tests/macrobenchmark/src/androidTest/java/androidx/compose/integration/macrobenchmark/TrivialTracingBenchmark.kt
index 2da52f3..60e7dc3 100644
--- a/compose/integration-tests/macrobenchmark/src/androidTest/java/androidx/compose/integration/macrobenchmark/TrivialTracingBenchmark.kt
+++ b/compose/integration-tests/macrobenchmark/src/androidTest/java/androidx/compose/integration/macrobenchmark/TrivialTracingBenchmark.kt
@@ -39,7 +39,7 @@
@get:Rule
val benchmarkRule = MacrobenchmarkRule()
- @RequiresApi(Build.VERSION_CODES.Q)
+ @RequiresApi(Build.VERSION_CODES.R) // TODO(234351579): Support API < 30
@OptIn(ExperimentalMetricApi::class)
@Test
fun test_composable_names_present_in_trace() {
diff --git a/tracing/tracing-perfetto/src/androidTest/java/androidx/tracing/perfetto/test/TracingTest.kt b/tracing/tracing-perfetto/src/androidTest/java/androidx/tracing/perfetto/test/TracingTest.kt
index b14f359..05d31ff 100644
--- a/tracing/tracing-perfetto/src/androidTest/java/androidx/tracing/perfetto/test/TracingTest.kt
+++ b/tracing/tracing-perfetto/src/androidTest/java/androidx/tracing/perfetto/test/TracingTest.kt
@@ -16,6 +16,8 @@
package androidx.tracing.perfetto.test
+import android.os.Build
+import androidx.annotation.RequiresApi
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import androidx.tracing.perfetto.Tracing
@@ -25,6 +27,7 @@
@SmallTest
@RunWith(AndroidJUnit4::class)
+@RequiresApi(Build.VERSION_CODES.R) // TODO(234351579): Support API < 30
class TracingTest {
@Test
fun test_endToEnd_binaryDependenciesPresent() {
diff --git a/tracing/tracing-perfetto/src/main/java/androidx/tracing/perfetto/Tracing.kt b/tracing/tracing-perfetto/src/main/java/androidx/tracing/perfetto/Tracing.kt
index 8bde634..95ac19f 100644
--- a/tracing/tracing-perfetto/src/main/java/androidx/tracing/perfetto/Tracing.kt
+++ b/tracing/tracing-perfetto/src/main/java/androidx/tracing/perfetto/Tracing.kt
@@ -15,7 +15,9 @@
*/
package androidx.tracing.perfetto
+import android.os.Build
import android.util.JsonWriter
+import androidx.annotation.RequiresApi
import androidx.tracing.perfetto.TracingReceiver.Companion.KEY_ERROR_MESSAGE
import androidx.tracing.perfetto.TracingReceiver.Companion.KEY_EXIT_CODE
import androidx.tracing.perfetto.TracingReceiver.Companion.KEY_REQUIRED_VERSION
@@ -50,6 +52,7 @@
*/
private val enableTracingLock = ReentrantReadWriteLock()
+ @RequiresApi(Build.VERSION_CODES.R) // TODO(234351579): Support API < 30
fun enable(path: String? = null): EnableTracingResponse {
enableTracingLock.readLock().withLock {
if (isEnabled) return EnableTracingResponse(RESULT_CODE_ALREADY_ENABLED)
diff --git a/tracing/tracing-perfetto/src/main/java/androidx/tracing/perfetto/TracingReceiver.kt b/tracing/tracing-perfetto/src/main/java/androidx/tracing/perfetto/TracingReceiver.kt
index 5334ceb..6204fd0 100644
--- a/tracing/tracing-perfetto/src/main/java/androidx/tracing/perfetto/TracingReceiver.kt
+++ b/tracing/tracing-perfetto/src/main/java/androidx/tracing/perfetto/TracingReceiver.kt
@@ -19,6 +19,7 @@
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
+import android.os.Build
import androidx.annotation.IntDef
import androidx.annotation.RestrictTo
import androidx.annotation.RestrictTo.Scope.LIBRARY
@@ -85,6 +86,14 @@
val srcPath = intent.extras?.getString(KEY_PATH)
val response: EnableTracingResponse = when {
+ Build.VERSION.SDK_INT < Build.VERSION_CODES.R -> {
+ // TODO(234351579): Support API < 30
+ EnableTracingResponse(
+ exitCode = RESULT_CODE_ERROR_OTHER,
+ errorMessage = "SDK version not supported. " +
+ "Current minimum SDK = ${Build.VERSION_CODES.R}"
+ )
+ }
srcPath != null && context != null -> {
try {
val dstFile = copyExternalLibraryFile(context, srcPath)