Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8fbd892b authored by Sudheer Shanka's avatar Sudheer Shanka
Browse files

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
parent 000444ef
Loading
Loading
Loading
Loading
+30 −21
Original line number Diff line number Diff line
@@ -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;
    }