Change perf event enable logic to run on API 23+
Test: Tested on API 23, 27, 28, all of which needed this change (Unable to get access to a lower API physical device at the moment)
Bug: 286306579
Bug: 357101113
Change-Id: I283018817556b18cbedb77e11a3c95916e3c7ed3
diff --git a/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/CpuEventCounterTest.kt b/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/CpuEventCounterTest.kt
index c000bef..895cd8c 100644
--- a/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/CpuEventCounterTest.kt
+++ b/benchmark/benchmark-common/src/androidTest/java/androidx/benchmark/CpuEventCounterTest.kt
@@ -16,6 +16,7 @@
package androidx.benchmark
+import android.os.Build
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import androidx.test.filters.SdkSuppress
@@ -23,6 +24,7 @@
import kotlin.test.assertNotEquals
import kotlin.test.assertTrue
import org.junit.After
+import org.junit.Assume.assumeFalse
import org.junit.Assume.assumeTrue
import org.junit.Before
import org.junit.Test
@@ -36,6 +38,8 @@
fun before() {
// skip test if need root, or event fails to enable
CpuEventCounter.forceEnable()?.let { errorMessage -> assumeTrue(errorMessage, false) }
+
+ assumeFalse(DeviceInfo.isEmulator && Build.VERSION.SDK_INT == 28) // see b/357101113
}
@After
diff --git a/benchmark/benchmark-common/src/main/java/androidx/benchmark/CpuEventCounter.kt b/benchmark/benchmark-common/src/main/java/androidx/benchmark/CpuEventCounter.kt
index 725a125..b875d8b5 100644
--- a/benchmark/benchmark-common/src/main/java/androidx/benchmark/CpuEventCounter.kt
+++ b/benchmark/benchmark-common/src/main/java/androidx/benchmark/CpuEventCounter.kt
@@ -126,8 +126,8 @@
* Reset still required if failure occurs partway through
*/
fun forceEnable(): String? {
- if (Build.VERSION.SDK_INT >= 29) {
- Api29Enabler.forceEnable()?.let {
+ if (Build.VERSION.SDK_INT >= 23) {
+ Api23Enabler.forceEnable()?.let {
return it
}
}
@@ -135,16 +135,19 @@
}
fun reset() {
- if (Build.VERSION.SDK_INT >= 29) {
- Api29Enabler.reset()
+ if (Build.VERSION.SDK_INT >= 23) {
+ Api23Enabler.reset()
}
}
/**
- * Enable setenforce 0 and setprop perf_harden to 0, only observed this required on API 29+
+ * Enable setenforce 0 and setprop perf_harden to 0, have observed this required on API 23+
+ *
+ * Lower APIs not tested, but selinux is documented to be enforced starting in Android 5
+ * (API 23).
*/
- @RequiresApi(29)
- object Api29Enabler {
+ @RequiresApi(23)
+ object Api23Enabler {
private val perfHardenProp = PropOverride("security.perf_harden", "0")
private var shouldResetEnforce1 = false