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