summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Sudheer Shanka <sudheersai@google.com> 2020-08-11 20:16:46 -0700
committer Sudheer Shanka <sudheersai@google.com> 2020-08-12 22:59:17 -0700
commit8fbd892b805d2a47bf6c7ca366a285f0054ba571 (patch)
treef5b72400d13edfe73ec3199872c1261e622cbf98
parent000444efdcd90bcb88ee3773c9849db31bfd79a7 (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.java51
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;
}