From 4123449e16a4a88c4e46cf636487e7fd54979141 Mon Sep 17 00:00:00 2001 From: Dmitri Plotnikov Date: Thu, 3 Feb 2022 17:12:27 -0800 Subject: [PATCH] Remove DeviceCalculatedPowerBlameUid and DeviceCalculatedPowerBlameOther atoms They have been superseded by BatteryUsageStatsAtomsProto Bug: 217618527 Test: atest CtsStatsdAtomHostTestCases:UidAtomTests Change-Id: I9a0dd3a6fa0f81534d9b21588d689828d9f39dde --- .../internal/os/BatteryStatsHelperTest.java | 32 ----- .../stats/pull/StatsPullAtomService.java | 114 ++---------------- 2 files changed, 10 insertions(+), 136 deletions(-) diff --git a/core/tests/coretests/src/com/android/internal/os/BatteryStatsHelperTest.java b/core/tests/coretests/src/com/android/internal/os/BatteryStatsHelperTest.java index 08205b4d143cb..260b65a8b463a 100644 --- a/core/tests/coretests/src/com/android/internal/os/BatteryStatsHelperTest.java +++ b/core/tests/coretests/src/com/android/internal/os/BatteryStatsHelperTest.java @@ -40,8 +40,6 @@ import androidx.test.InstrumentationRegistry; import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; -import com.android.internal.util.FrameworkStatsLog; - import junit.framework.TestCase; import org.junit.Before; @@ -258,36 +256,6 @@ public class BatteryStatsHelperTest extends TestCase { assertThat(time).isEqualTo(TIME_STATE_FOREGROUND_MS); } - @Test - public void testDrainTypesSyncedWithProto() { - assertEquals(BatterySipper.DrainType.AMBIENT_DISPLAY.ordinal(), - FrameworkStatsLog.DEVICE_CALCULATED_POWER_BLAME_OTHER__DRAIN_TYPE__AMBIENT_DISPLAY); - // AtomsProto has no "APP" - assertEquals(BatterySipper.DrainType.BLUETOOTH.ordinal(), - FrameworkStatsLog.DEVICE_CALCULATED_POWER_BLAME_OTHER__DRAIN_TYPE__BLUETOOTH); - assertEquals(BatterySipper.DrainType.CAMERA.ordinal(), - FrameworkStatsLog.DEVICE_CALCULATED_POWER_BLAME_OTHER__DRAIN_TYPE__CAMERA); - assertEquals(BatterySipper.DrainType.CELL.ordinal(), - FrameworkStatsLog.DEVICE_CALCULATED_POWER_BLAME_OTHER__DRAIN_TYPE__CELL); - assertEquals(BatterySipper.DrainType.FLASHLIGHT.ordinal(), - FrameworkStatsLog.DEVICE_CALCULATED_POWER_BLAME_OTHER__DRAIN_TYPE__FLASHLIGHT); - assertEquals(BatterySipper.DrainType.IDLE.ordinal(), - FrameworkStatsLog.DEVICE_CALCULATED_POWER_BLAME_OTHER__DRAIN_TYPE__IDLE); - assertEquals(BatterySipper.DrainType.MEMORY.ordinal(), - FrameworkStatsLog.DEVICE_CALCULATED_POWER_BLAME_OTHER__DRAIN_TYPE__MEMORY); - assertEquals(BatterySipper.DrainType.OVERCOUNTED.ordinal(), - FrameworkStatsLog.DEVICE_CALCULATED_POWER_BLAME_OTHER__DRAIN_TYPE__OVERCOUNTED); - assertEquals(BatterySipper.DrainType.PHONE.ordinal(), - FrameworkStatsLog.DEVICE_CALCULATED_POWER_BLAME_OTHER__DRAIN_TYPE__PHONE); - assertEquals(BatterySipper.DrainType.SCREEN.ordinal(), - FrameworkStatsLog.DEVICE_CALCULATED_POWER_BLAME_OTHER__DRAIN_TYPE__SCREEN); - assertEquals(BatterySipper.DrainType.UNACCOUNTED.ordinal(), - FrameworkStatsLog.DEVICE_CALCULATED_POWER_BLAME_OTHER__DRAIN_TYPE__UNACCOUNTED); - // AtomsProto has no "USER" - assertEquals(BatterySipper.DrainType.WIFI.ordinal(), - FrameworkStatsLog.DEVICE_CALCULATED_POWER_BLAME_OTHER__DRAIN_TYPE__WIFI); - } - private BatterySipper createTestSmearBatterySipper(long activityTime, double totalPowerMah, int uidCode, boolean isUidNull, ScreenPowerCalculator spc) { final BatterySipper sipper = mock(BatterySipper.class); diff --git a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java index 4cfe3d32cc484..f6a93591591de 100644 --- a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java +++ b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java @@ -105,6 +105,8 @@ import android.net.wifi.WifiManager; import android.os.AsyncTask; import android.os.BatteryStats; import android.os.BatteryStatsInternal; +import android.os.BatteryStatsManager; +import android.os.BatteryUsageStats; import android.os.Binder; import android.os.Build; import android.os.Bundle; @@ -168,8 +170,6 @@ import com.android.internal.annotations.GuardedBy; import com.android.internal.app.procstats.IProcessStats; import com.android.internal.app.procstats.ProcessStats; import com.android.internal.os.BackgroundThread; -import com.android.internal.os.BatterySipper; -import com.android.internal.os.BatteryStatsHelper; import com.android.internal.os.BinderCallsStats.ExportedCallStat; import com.android.internal.os.KernelAllocationStats; import com.android.internal.os.KernelCpuBpfTracking; @@ -273,7 +273,6 @@ public class StatsPullAtomService extends SystemService { */ private static final long NETSTATS_UID_DEFAULT_BUCKET_DURATION_MS = HOURS.toMillis(2); - private static final int MAX_BATTERY_STATS_HELPER_FREQUENCY_MS = 1000; private static final int CPU_TIME_PER_THREAD_FREQ_MAX_NUM_FREQUENCIES = 8; private static final int OP_FLAGS_PULLED = OP_FLAG_SELF | OP_FLAG_TRUSTED_PROXIED; private static final String COMMON_PERMISSION_PREFIX = "android.permission."; @@ -366,12 +365,6 @@ public class StatsPullAtomService extends SystemService { @GuardedBy("mCpuTimePerThreadFreqLock") private KernelCpuThreadReaderDiff mKernelCpuThreadReader; - private final Object mBatteryStatsHelperLock = new Object(); - @GuardedBy("mBatteryStatsHelperLock") - private BatteryStatsHelper mBatteryStatsHelper = null; - @GuardedBy("mBatteryStatsHelperLock") - private long mBatteryStatsHelperTimestampMs = -MAX_BATTERY_STATS_HELPER_FREQUENCY_MS; - private StatsPullAtomCallbackImpl mStatsCallbackImpl; @GuardedBy("mAttributedAppOpsLock") @@ -433,8 +426,6 @@ public class StatsPullAtomService extends SystemService { private final Object mProcessCpuTimeLock = new Object(); private final Object mCpuTimePerThreadFreqLock = new Object(); private final Object mDeviceCalculatedPowerUseLock = new Object(); - private final Object mDeviceCalculatedPowerBlameUidLock = new Object(); - private final Object mDeviceCalculatedPowerBlameOtherLock = new Object(); private final Object mDebugElapsedClockLock = new Object(); private final Object mDebugFailingElapsedClockLock = new Object(); private final Object mBuildInformationLock = new Object(); @@ -645,14 +636,6 @@ public class StatsPullAtomService extends SystemService { synchronized (mDeviceCalculatedPowerUseLock) { return pullDeviceCalculatedPowerUseLocked(atomTag, data); } - case FrameworkStatsLog.DEVICE_CALCULATED_POWER_BLAME_UID: - synchronized (mDeviceCalculatedPowerBlameUidLock) { - return pullDeviceCalculatedPowerBlameUidLocked(atomTag, data); - } - case FrameworkStatsLog.DEVICE_CALCULATED_POWER_BLAME_OTHER: - synchronized (mDeviceCalculatedPowerBlameOtherLock) { - return pullDeviceCalculatedPowerBlameOtherLocked(atomTag, data); - } case FrameworkStatsLog.DEBUG_ELAPSED_CLOCK: synchronized (mDebugElapsedClockLock) { return pullDebugElapsedClockLocked(atomTag, data); @@ -905,8 +888,6 @@ public class StatsPullAtomService extends SystemService { registerProcessCpuTime(); registerCpuTimePerThreadFreq(); registerDeviceCalculatedPowerUse(); - registerDeviceCalculatedPowerBlameUid(); - registerDeviceCalculatedPowerBlameOther(); registerDebugElapsedClock(); registerDebugFailingElapsedClock(); registerBuildInformation(); @@ -3080,32 +3061,6 @@ public class StatsPullAtomService extends SystemService { return StatsManager.PULL_SUCCESS; } - private BatteryStatsHelper getBatteryStatsHelper() { - synchronized (mBatteryStatsHelperLock) { - if (mBatteryStatsHelper == null) { - final long callingToken = Binder.clearCallingIdentity(); - try { - // clearCallingIdentity required for BatteryStatsHelper.checkWifiOnly(). - mBatteryStatsHelper = new BatteryStatsHelper(mContext, false); - } finally { - Binder.restoreCallingIdentity(callingToken); - } - mBatteryStatsHelper.create((Bundle) null); - } - long currentTime = SystemClock.elapsedRealtime(); - if (currentTime - mBatteryStatsHelperTimestampMs - >= MAX_BATTERY_STATS_HELPER_FREQUENCY_MS) { - // Load BatteryStats and do all the calculations. - mBatteryStatsHelper.refreshStats(BatteryStats.STATS_SINCE_CHARGED, - UserHandle.USER_ALL); - // Calculations are done so we don't need to save the raw BatteryStats data in RAM. - mBatteryStatsHelper.clearStats(); - mBatteryStatsHelperTimestampMs = currentTime; - } - } - return mBatteryStatsHelper; - } - private long milliAmpHrsToNanoAmpSecs(double mAh) { return (long) (mAh * MILLI_AMP_HR_TO_NANO_AMP_SECS + 0.5); } @@ -3121,65 +3076,16 @@ public class StatsPullAtomService extends SystemService { } int pullDeviceCalculatedPowerUseLocked(int atomTag, List pulledData) { - BatteryStatsHelper bsHelper = getBatteryStatsHelper(); - pulledData.add(FrameworkStatsLog.buildStatsEvent( - atomTag, milliAmpHrsToNanoAmpSecs(bsHelper.getComputedPower()))); - return StatsManager.PULL_SUCCESS; - } - - private void registerDeviceCalculatedPowerBlameUid() { - int tagId = FrameworkStatsLog.DEVICE_CALCULATED_POWER_BLAME_UID; - mStatsManager.setPullAtomCallback( - tagId, - null, // use default PullAtomMetadata values - DIRECT_EXECUTOR, - mStatsCallbackImpl - ); - } - - int pullDeviceCalculatedPowerBlameUidLocked(int atomTag, List pulledData) { - final List sippers = getBatteryStatsHelper().getUsageList(); - if (sippers == null) { + final BatteryStatsManager bsm = mContext.getSystemService(BatteryStatsManager.class); + try { + final BatteryUsageStats stats = bsm.getBatteryUsageStats(); + pulledData.add(FrameworkStatsLog.buildStatsEvent( + atomTag, milliAmpHrsToNanoAmpSecs(stats.getConsumedPower()))); + return StatsManager.PULL_SUCCESS; + } catch (Exception e) { + Log.e(TAG, "Could not obtain battery usage stats", e); return StatsManager.PULL_SKIP; } - - for (BatterySipper bs : sippers) { - if (bs.drainType != bs.drainType.APP) { - continue; - } - pulledData.add(FrameworkStatsLog.buildStatsEvent( - atomTag, bs.uidObj.getUid(), milliAmpHrsToNanoAmpSecs(bs.totalPowerMah))); - } - return StatsManager.PULL_SUCCESS; - } - - private void registerDeviceCalculatedPowerBlameOther() { - int tagId = FrameworkStatsLog.DEVICE_CALCULATED_POWER_BLAME_OTHER; - mStatsManager.setPullAtomCallback( - tagId, - null, // use default PullAtomMetadata values - DIRECT_EXECUTOR, - mStatsCallbackImpl - ); - } - - int pullDeviceCalculatedPowerBlameOtherLocked(int atomTag, List pulledData) { - final List sippers = getBatteryStatsHelper().getUsageList(); - if (sippers == null) { - return StatsManager.PULL_SKIP; - } - - for (BatterySipper bs : sippers) { - if (bs.drainType == bs.drainType.APP) { - continue; // This is a separate atom; see pullDeviceCalculatedPowerBlameUid(). - } - if (bs.drainType == bs.drainType.USER) { - continue; // This is not supported. We purposefully calculate over USER_ALL. - } - pulledData.add(FrameworkStatsLog.buildStatsEvent( - atomTag, bs.drainType.ordinal(), milliAmpHrsToNanoAmpSecs(bs.totalPowerMah))); - } - return StatsManager.PULL_SUCCESS; } private void registerDebugElapsedClock() {