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

Commit 6be687b6 authored by Dmitri Plotnikov's avatar Dmitri Plotnikov Committed by Android (Google) Code Review
Browse files

Merge "Include per process state data in the BatteryUsageStats atom"

parents 096e9b48 9440f2d5
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -607,11 +607,15 @@ public class BatteryStatsImpl extends BatteryStats {
        int UPDATE_BT = 0x08;
        int UPDATE_RPM = 0x10;
        int UPDATE_DISPLAY = 0x20;
        int RESET = 0x40;
        int UPDATE_ALL =
                UPDATE_CPU | UPDATE_WIFI | UPDATE_RADIO | UPDATE_BT | UPDATE_RPM | UPDATE_DISPLAY;
        int UPDATE_ON_PROC_STATE_CHANGE = UPDATE_WIFI | UPDATE_RADIO | UPDATE_BT;
        int UPDATE_ON_RESET = UPDATE_ALL | RESET;
        @IntDef(flag = true, prefix = "UPDATE_", value = {
                UPDATE_CPU,
                UPDATE_WIFI,
@@ -12909,7 +12913,7 @@ public class BatteryStatsImpl extends BatteryStats {
        // Flush external data, gathering snapshots, but don't process it since it is pre-reset data
        mIgnoreNextExternalStats = true;
        mExternalSync.scheduleSync("reset", ExternalStatsSync.UPDATE_ALL);
        mExternalSync.scheduleSync("reset", ExternalStatsSync.UPDATE_ON_RESET);
        mHandler.sendEmptyMessage(MSG_REPORT_RESET_STATS);
    }
+7 −1
Original line number Diff line number Diff line
@@ -438,10 +438,16 @@ public class MeasuredEnergyStats {
        mState = state;
        mStateChangeTimestampMs = timestampMs;
        if (mAccumulatedMultiStateChargeMicroCoulomb == null) {
            return;
            mAccumulatedMultiStateChargeMicroCoulomb =
                    new LongMultiStateCounter[mAccumulatedChargeMicroCoulomb.length];
        }
        for (int i = 0; i < mAccumulatedMultiStateChargeMicroCoulomb.length; i++) {
            LongMultiStateCounter counter = mAccumulatedMultiStateChargeMicroCoulomb[i];
            if (counter == null && mConfig.isSupportedMultiStateBucket(i)) {
                counter = new LongMultiStateCounter(mConfig.mStateNames.length);
                counter.updateValue(0, timestampMs);
                mAccumulatedMultiStateChargeMicroCoulomb[i] = counter;
            }
            if (counter != null) {
                counter.setState(state, timestampMs);
            }
+4 −4
Original line number Diff line number Diff line
@@ -383,10 +383,10 @@ public class MeasuredEnergyStatsTest {
        assertEquals(13, stats.getAccumulatedStandardBucketCharge(POWER_BUCKET_SCREEN_ON, 0));
        // 6 * (6000-4000)/(6000-2000)
        assertEquals(3, stats.getAccumulatedStandardBucketCharge(POWER_BUCKET_SCREEN_ON, 1));

        // POWER_BUCKET_SCREEN_OTHER was only present along with state=1
        assertEquals(0, stats.getAccumulatedStandardBucketCharge(POWER_BUCKET_SCREEN_OTHER, 0));
        assertEquals(40, stats.getAccumulatedStandardBucketCharge(POWER_BUCKET_SCREEN_OTHER, 1));
        // 40 * (4000-1000)/(5000-1000)
        assertEquals(30, stats.getAccumulatedStandardBucketCharge(POWER_BUCKET_SCREEN_OTHER, 0));
        // 40 * (5000-4000)/(5000-1000)
        assertEquals(10, stats.getAccumulatedStandardBucketCharge(POWER_BUCKET_SCREEN_OTHER, 1));
    }

    @Test
+8 −4
Original line number Diff line number Diff line
@@ -451,7 +451,7 @@ class BatteryExternalStatsWorker implements BatteryStatsImpl.ExternalStatsSync {
                mUidsToRemove.clear();
                mCurrentFuture = null;
                mUseLatestStates = true;
                if (updateFlags == UPDATE_ALL) {
                if ((updateFlags & UPDATE_ALL) == UPDATE_ALL) {
                    cancelSyncDueToBatteryLevelChangeLocked();
                }
                if ((updateFlags & UPDATE_CPU) != 0) {
@@ -496,7 +496,11 @@ class BatteryExternalStatsWorker implements BatteryStatsImpl.ExternalStatsSync {
                Slog.wtf(TAG, "Error updating external stats: ", e);
            }

            if ((updateFlags & UPDATE_ALL) == UPDATE_ALL) {
            if ((updateFlags & RESET) != 0) {
                synchronized (BatteryExternalStatsWorker.this) {
                    mLastCollectionTimeStamp = 0;
                }
            } else if ((updateFlags & UPDATE_ALL) == UPDATE_ALL) {
                synchronized (BatteryExternalStatsWorker.this) {
                    mLastCollectionTimeStamp = SystemClock.elapsedRealtime();
                }
@@ -658,7 +662,7 @@ class BatteryExternalStatsWorker implements BatteryStatsImpl.ExternalStatsSync {
                mStats.updateCpuTimeLocked(onBattery, onBatteryScreenOff, cpuClusterChargeUC);
            }

            if (updateFlags == UPDATE_ALL) {
            if ((updateFlags & UPDATE_ALL) == UPDATE_ALL) {
                mStats.updateKernelWakelocksLocked(elapsedRealtimeUs);
                mStats.updateKernelMemoryBandwidthLocked(elapsedRealtimeUs);
            }
@@ -731,7 +735,7 @@ class BatteryExternalStatsWorker implements BatteryStatsImpl.ExternalStatsSync {
                    uptime, networkStatsManager);
        }

        if (updateFlags == UPDATE_ALL) {
        if ((updateFlags & UPDATE_ALL) == UPDATE_ALL) {
            // This helps mStats deal with ignoring data from prior to resets.
            mStats.informThatAllExternalStatsAreFlushed();
        }
+17 −8
Original line number Diff line number Diff line
@@ -797,12 +797,19 @@ public final class BatteryStatsService extends IBatteryStats.Stub
            final BatteryUsageStats bus;
            switch (atomTag) {
                case FrameworkStatsLog.BATTERY_USAGE_STATS_SINCE_RESET:
                    bus = getBatteryUsageStats(List.of(BatteryUsageStatsQuery.DEFAULT)).get(0);
                    final BatteryUsageStatsQuery querySinceReset =
                            new BatteryUsageStatsQuery.Builder()
                                    .includeProcessStateData()
                                    .build();
                    bus = getBatteryUsageStats(List.of(querySinceReset)).get(0);
                    break;
                case FrameworkStatsLog.BATTERY_USAGE_STATS_SINCE_RESET_USING_POWER_PROFILE_MODEL:
                    final BatteryUsageStatsQuery powerProfileQuery =
                            new BatteryUsageStatsQuery.Builder().powerProfileModeledOnly().build();
                    bus = getBatteryUsageStats(List.of(powerProfileQuery)).get(0);
                    final BatteryUsageStatsQuery queryPowerProfile =
                            new BatteryUsageStatsQuery.Builder()
                                    .includeProcessStateData()
                                    .powerProfileModeledOnly()
                                    .build();
                    bus = getBatteryUsageStats(List.of(queryPowerProfile)).get(0);
                    break;
                case FrameworkStatsLog.BATTERY_USAGE_STATS_BEFORE_RESET:
                    if (!BATTERY_USAGE_STORE_ENABLED) {
@@ -812,10 +819,12 @@ public final class BatteryStatsService extends IBatteryStats.Stub
                    final long sessionStart = mBatteryUsageStatsStore
                            .getLastBatteryUsageStatsBeforeResetAtomPullTimestamp();
                    final long sessionEnd = mStats.getStartClockTime();
                    final BatteryUsageStatsQuery query = new BatteryUsageStatsQuery.Builder()
                    final BatteryUsageStatsQuery queryBeforeReset =
                            new BatteryUsageStatsQuery.Builder()
                                    .includeProcessStateData()
                                    .aggregateSnapshots(sessionStart, sessionEnd)
                                    .build();
                    bus = getBatteryUsageStats(List.of(query)).get(0);
                    bus = getBatteryUsageStats(List.of(queryBeforeReset)).get(0);
                    mBatteryUsageStatsStore
                            .setLastBatteryUsageStatsBeforeResetAtomPullTimestamp(sessionEnd);
                    break;