diff options
| author | 2020-08-11 20:16:46 -0700 | |
|---|---|---|
| committer | 2020-08-12 22:59:17 -0700 | |
| commit | 8fbd892b805d2a47bf6c7ca366a285f0054ba571 (patch) | |
| tree | f5b72400d13edfe73ec3199872c1261e622cbf98 | |
| parent | 000444efdcd90bcb88ee3773c9849db31bfd79a7 (diff) | |
Enable per-procstate cpu usage tracking before for tests.
Enable the tracking so that BstatsCpuTimesValidationTest
will always run regardless of original tracking state on device.
Bug: 163674258
Test: atest core/tests/coretests/src/com/android/internal/os/BstatsCpuTimesValidationTest.java
Change-Id: Ide3881e6260375deafd098bc413a03df8f9e02a7
| -rw-r--r-- | core/tests/coretests/src/com/android/internal/os/BstatsCpuTimesValidationTest.java | 51 |
1 files changed, 30 insertions, 21 deletions
diff --git a/core/tests/coretests/src/com/android/internal/os/BstatsCpuTimesValidationTest.java b/core/tests/coretests/src/com/android/internal/os/BstatsCpuTimesValidationTest.java index 01515bd9c6b5..a80f5a03ee4e 100644 --- a/core/tests/coretests/src/com/android/internal/os/BstatsCpuTimesValidationTest.java +++ b/core/tests/coretests/src/com/android/internal/os/BstatsCpuTimesValidationTest.java @@ -52,7 +52,9 @@ import android.os.SystemClock; import android.provider.Settings; import android.support.test.uiautomator.UiDevice; import android.text.TextUtils; +import android.util.ArrayMap; import android.util.DebugUtils; +import android.util.KeyValueListParser; import android.util.Log; import androidx.test.InstrumentationRegistry; @@ -104,8 +106,6 @@ public class BstatsCpuTimesValidationTest { private static final int WORK_DURATION_MS = 2000; - private static final String DESIRED_PROC_STATE_CPU_TIMES_DELAY = "0"; - private static boolean sBatteryStatsConstsUpdated; private static String sOriginalBatteryStatsConsts; @@ -124,10 +124,12 @@ public class BstatsCpuTimesValidationTest { sContext.getPackageManager().setApplicationEnabledSetting(TEST_PKG, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0); sTestPkgUid = sContext.getPackageManager().getPackageUid(TEST_PKG, 0); + + final ArrayMap<String, String> desiredConstants = new ArrayMap<>(); + desiredConstants.put(KEY_TRACK_CPU_TIMES_BY_PROC_STATE, Boolean.toString(true)); + desiredConstants.put(KEY_PROC_STATE_CPU_TIMES_READ_DELAY_MS, Integer.toString(0)); + updateBatteryStatsConstants(desiredConstants); checkCpuTimesAvailability(); - if (sPerProcStateTimesAvailable && sCpuFreqTimesAvailable) { - setDesiredReadyDelay(); - } } @AfterClass @@ -139,26 +141,33 @@ public class BstatsCpuTimesValidationTest { batteryReset(); } - private static void setDesiredReadyDelay() { + private static void updateBatteryStatsConstants(ArrayMap<String, String> desiredConstants) { sOriginalBatteryStatsConsts = Settings.Global.getString(sContext.getContentResolver(), Settings.Global.BATTERY_STATS_CONSTANTS); - String newBatteryStatsConstants; - final String newConstant = KEY_PROC_STATE_CPU_TIMES_READ_DELAY_MS - + "=" + DESIRED_PROC_STATE_CPU_TIMES_DELAY; - if (sOriginalBatteryStatsConsts == null || "null".equals(sOriginalBatteryStatsConsts)) { - // battery_stats_constants is initially empty, so just assign the desired value. - newBatteryStatsConstants = newConstant; - } else if (sOriginalBatteryStatsConsts.contains(KEY_PROC_STATE_CPU_TIMES_READ_DELAY_MS)) { - // battery_stats_constants contains delay duration, so replace it - // with the desired value. - newBatteryStatsConstants = sOriginalBatteryStatsConsts.replaceAll( - KEY_PROC_STATE_CPU_TIMES_READ_DELAY_MS + "=\\d+", newConstant); - } else { - // battery_stats_constants didn't contain any delay, so append the desired value. - newBatteryStatsConstants = sOriginalBatteryStatsConsts + "," + newConstant; + final char delimiter = ','; + final KeyValueListParser parser = new KeyValueListParser(delimiter); + parser.setString(sOriginalBatteryStatsConsts); + final StringBuilder sb = new StringBuilder(); + for (int i = 0, size = parser.size(); i < size; ++i) { + final String key = parser.keyAt(i); + final String value = desiredConstants.getOrDefault(key, + parser.getString(key, null)); + if (sb.length() > 0) { + sb.append(delimiter); + } + sb.append(key + "=" + value); + desiredConstants.remove(key); } + desiredConstants.forEach((key, value) -> { + if (sb.length() > 0) { + sb.append(delimiter); + } + sb.append(key + '=' + value); + }); Settings.Global.putString(sContext.getContentResolver(), - Settings.Global.BATTERY_STATS_CONSTANTS, newBatteryStatsConstants); + Settings.Global.BATTERY_STATS_CONSTANTS, sb.toString()); + Log.d(TAG, "Updated value of '" + Settings.Global.BATTERY_STATS_CONSTANTS + "': " + + sb.toString()); sBatteryStatsConstsUpdated = true; } |