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

Commit 15313c92 authored by Mike Ma's avatar Mike Ma
Browse files

Output doze mode power in BatteryStats

Bug: 69112503
Change-Id: I8d322e5c54fd9042dc26e057528fb479a46be402
Test: local & manual
parent 9de8f4b9
Loading
Loading
Loading
Loading
+45 −3
Original line number Diff line number Diff line
@@ -222,8 +222,10 @@ public abstract class BatteryStats implements Parcelable {
     *   - Resource power manager (rpm) states [but screenOffRpm is disabled from working properly]
     * New in version 27:
     *   - Always On Display (screen doze mode) time and power
     * New in version 28:
     *   - Light/Deep Doze power
     */
    static final int CHECKIN_VERSION = 27;
    static final int CHECKIN_VERSION = 28;

    /**
     * Old version, we hit 9 and ran out of room, need to remove.
@@ -2695,6 +2697,18 @@ public abstract class BatteryStats implements Parcelable {
     */
    public abstract long getUahDischarge(int which);

    /**
     * @return the amount of battery discharge while the device is in light idle mode, measured in
     * micro-Ampere-hours.
     */
    public abstract long getUahDischargeLightDoze(int which);

    /**
     * @return the amount of battery discharge while the device is in deep idle mode, measured in
     * micro-Ampere-hours.
     */
    public abstract long getUahDischargeDeepDoze(int which);

    /**
     * Returns the estimated real battery capacity, which may be less than the capacity
     * declared by the PowerProfile.
@@ -3327,6 +3341,8 @@ public abstract class BatteryStats implements Parcelable {
        final long dischargeCount = getUahDischarge(which);
        final long dischargeScreenOffCount = getUahDischargeScreenOff(which);
        final long dischargeScreenDozeCount = getUahDischargeScreenDoze(which);
        final long dischargeLightDozeCount = getUahDischargeLightDoze(which);
        final long dischargeDeepDozeCount = getUahDischargeDeepDoze(which);

        final StringBuilder sb = new StringBuilder(128);

@@ -3497,14 +3513,16 @@ public abstract class BatteryStats implements Parcelable {
                    getDischargeStartLevel()-getDischargeCurrentLevel(),
                    getDischargeAmountScreenOn(), getDischargeAmountScreenOff(),
                    dischargeCount / 1000, dischargeScreenOffCount / 1000,
                    getDischargeAmountScreenDoze(), dischargeScreenDozeCount / 1000);
                    getDischargeAmountScreenDoze(), dischargeScreenDozeCount / 1000,
                    dischargeLightDozeCount / 1000, dischargeDeepDozeCount / 1000);
        } else {
            dumpLine(pw, 0 /* uid */, category, BATTERY_DISCHARGE_DATA,
                    getLowDischargeAmountSinceCharge(), getHighDischargeAmountSinceCharge(),
                    getDischargeAmountScreenOnSinceCharge(),
                    getDischargeAmountScreenOffSinceCharge(),
                    dischargeCount / 1000, dischargeScreenOffCount / 1000,
                    getDischargeAmountScreenDozeSinceCharge(), dischargeScreenDozeCount / 1000);
                    getDischargeAmountScreenDozeSinceCharge(), dischargeScreenDozeCount / 1000,
                    dischargeLightDozeCount / 1000, dischargeDeepDozeCount / 1000);
        }

        if (reqUid < 0) {
@@ -4169,6 +4187,26 @@ public abstract class BatteryStats implements Parcelable {
            pw.println(sb.toString());
        }

        final long dischargeLightDozeCount = getUahDischargeLightDoze(which);
        if (dischargeLightDozeCount >= 0) {
            sb.setLength(0);
            sb.append(prefix);
            sb.append("  Device light doze discharge: ");
            sb.append(BatteryStatsHelper.makemAh(dischargeLightDozeCount / 1000.0));
            sb.append(" mAh");
            pw.println(sb.toString());
        }

        final long dischargeDeepDozeCount = getUahDischargeDeepDoze(which);
        if (dischargeDeepDozeCount >= 0) {
            sb.setLength(0);
            sb.append(prefix);
            sb.append("  Device deep doze discharge: ");
            sb.append(BatteryStatsHelper.makemAh(dischargeDeepDozeCount / 1000.0));
            sb.append(" mAh");
            pw.println(sb.toString());
        }

        pw.print("  Start clock time: ");
        pw.println(DateFormat.format("yyyy-MM-dd-HH-mm-ss", getStartClockTime()).toString());

@@ -7131,6 +7169,10 @@ public abstract class BatteryStats implements Parcelable {
                getUahDischargeScreenOff(which) / 1000);
        proto.write(SystemProto.BatteryDischarge.TOTAL_MAH_SCREEN_DOZE,
                getUahDischargeScreenDoze(which) / 1000);
        proto.write(SystemProto.BatteryDischarge.TOTAL_MAH_LIGHT_DOZE,
                getUahDischargeLightDoze(which) / 1000);
        proto.write(SystemProto.BatteryDischarge.TOTAL_MAH_DEEP_DOZE,
                getUahDischargeDeepDoze(which) / 1000);
        proto.end(bdToken);

        // Time remaining
+35 −1
Original line number Diff line number Diff line
@@ -120,7 +120,7 @@ public class BatteryStatsImpl extends BatteryStats {
    private static final int MAGIC = 0xBA757475; // 'BATSTATS'
    // Current on-disk Parcel version
    private static final int VERSION = 168 + (USE_OLD_HISTORY ? 1000 : 0);
    private static final int VERSION = 169 + (USE_OLD_HISTORY ? 1000 : 0);
    // Maximum number of items we will record in the history.
    private static final int MAX_HISTORY_ITEMS;
@@ -599,6 +599,8 @@ public class BatteryStatsImpl extends BatteryStats {
    private LongSamplingCounter mDischargeScreenOffCounter;
    private LongSamplingCounter mDischargeScreenDozeCounter;
    private LongSamplingCounter mDischargeCounter;
    private LongSamplingCounter mDischargeLightDozeCounter;
    private LongSamplingCounter mDischargeDeepDozeCounter;
    static final int MAX_LEVEL_STEPS = 200;
@@ -696,6 +698,16 @@ public class BatteryStatsImpl extends BatteryStats {
        return mDischargeScreenDozeCounter.getCountLocked(which);
    }
    @Override
    public long getUahDischargeLightDoze(int which) {
        return mDischargeLightDozeCounter.getCountLocked(which);
    }
    @Override
    public long getUahDischargeDeepDoze(int which) {
        return mDischargeDeepDozeCounter.getCountLocked(which);
    }
    @Override
    public int getEstimatedBatteryCapacity() {
        return mEstimatedBatteryCapacity;
@@ -9085,6 +9097,8 @@ public class BatteryStatsImpl extends BatteryStats {
        mBluetoothScanTimer = new StopwatchTimer(mClocks, null, -14, null, mOnBatteryTimeBase);
        mDischargeScreenOffCounter = new LongSamplingCounter(mOnBatteryScreenOffTimeBase);
        mDischargeScreenDozeCounter = new LongSamplingCounter(mOnBatteryTimeBase);
        mDischargeLightDozeCounter = new LongSamplingCounter(mOnBatteryTimeBase);
        mDischargeDeepDozeCounter = new LongSamplingCounter(mOnBatteryTimeBase);
        mDischargeCounter = new LongSamplingCounter(mOnBatteryTimeBase);
        mOnBattery = mOnBatteryInternal = false;
        long uptime = mClocks.uptimeMillis() * 1000;
@@ -9664,6 +9678,8 @@ public class BatteryStatsImpl extends BatteryStats {
        mChargeStepTracker.init();
        mDischargeScreenOffCounter.reset(false);
        mDischargeScreenDozeCounter.reset(false);
        mDischargeLightDozeCounter.reset(false);
        mDischargeDeepDozeCounter.reset(false);
        mDischargeCounter.reset(false);
    }
@@ -11263,6 +11279,11 @@ public class BatteryStatsImpl extends BatteryStats {
                if (isScreenDoze(mScreenState)) {
                    mDischargeScreenDozeCounter.addCountLocked(chargeDiff);
                }
                if (mDeviceIdleMode == DEVICE_IDLE_MODE_LIGHT) {
                    mDischargeLightDozeCounter.addCountLocked(chargeDiff);
                } else if (mDeviceIdleMode == DEVICE_IDLE_MODE_DEEP) {
                    mDischargeDeepDozeCounter.addCountLocked(chargeDiff);
                }
            }
            mHistoryCur.batteryChargeUAh = chargeUAh;
            setOnBatteryLocked(elapsedRealtime, uptime, onBattery, oldStatus, level, chargeUAh);
@@ -11308,6 +11329,11 @@ public class BatteryStatsImpl extends BatteryStats {
                    if (isScreenDoze(mScreenState)) {
                        mDischargeScreenDozeCounter.addCountLocked(chargeDiff);
                    }
                    if (mDeviceIdleMode == DEVICE_IDLE_MODE_LIGHT) {
                        mDischargeLightDozeCounter.addCountLocked(chargeDiff);
                    } else if (mDeviceIdleMode == DEVICE_IDLE_MODE_DEEP) {
                        mDischargeDeepDozeCounter.addCountLocked(chargeDiff);
                    }
                }
                mHistoryCur.batteryChargeUAh = chargeUAh;
                changed = true;
@@ -12069,6 +12095,8 @@ public class BatteryStatsImpl extends BatteryStats {
        mDischargeCounter.readSummaryFromParcelLocked(in);
        mDischargeScreenOffCounter.readSummaryFromParcelLocked(in);
        mDischargeScreenDozeCounter.readSummaryFromParcelLocked(in);
        mDischargeLightDozeCounter.readSummaryFromParcelLocked(in);
        mDischargeDeepDozeCounter.readSummaryFromParcelLocked(in);
        int NPKG = in.readInt();
        if (NPKG > 0) {
            mDailyPackageChanges = new ArrayList<>(NPKG);
@@ -12493,6 +12521,8 @@ public class BatteryStatsImpl extends BatteryStats {
        mDischargeCounter.writeSummaryFromParcelLocked(out);
        mDischargeScreenOffCounter.writeSummaryFromParcelLocked(out);
        mDischargeScreenDozeCounter.writeSummaryFromParcelLocked(out);
        mDischargeLightDozeCounter.writeSummaryFromParcelLocked(out);
        mDischargeDeepDozeCounter.writeSummaryFromParcelLocked(out);
        if (mDailyPackageChanges != null) {
            final int NPKG = mDailyPackageChanges.size();
            out.writeInt(NPKG);
@@ -13044,6 +13074,8 @@ public class BatteryStatsImpl extends BatteryStats {
        mDischargeCounter = new LongSamplingCounter(mOnBatteryTimeBase, in);
        mDischargeScreenOffCounter = new LongSamplingCounter(mOnBatteryScreenOffTimeBase, in);
        mDischargeScreenDozeCounter = new LongSamplingCounter(mOnBatteryTimeBase, in);
        mDischargeLightDozeCounter = new LongSamplingCounter(mOnBatteryTimeBase, in);
        mDischargeDeepDozeCounter = new LongSamplingCounter(mOnBatteryTimeBase, in);
        mLastWriteTime = in.readLong();
        mRpmStats.clear();
@@ -13230,6 +13262,8 @@ public class BatteryStatsImpl extends BatteryStats {
        mDischargeCounter.writeToParcel(out);
        mDischargeScreenOffCounter.writeToParcel(out);
        mDischargeScreenDozeCounter.writeToParcel(out);
        mDischargeLightDozeCounter.writeToParcel(out);
        mDischargeDeepDozeCounter.writeToParcel(out);
        out.writeLong(mLastWriteTime);
        out.writeInt(mRpmStats.size());
+8 −0
Original line number Diff line number Diff line
@@ -120,6 +120,14 @@ message SystemProto {
    // via a coulomb counter. For historical reasons, total_mah_screen_doze is
    // a subset of total_mah_screen_off.
    optional int64 total_mah_screen_doze = 8;
    // Total amount of battery discharged in mAh while the device was in light doze mode.
    // This will only be non-zero for devices that report battery discharge
    // via a coulomb counter.
    optional int64 total_mah_light_doze = 9;
    // Total amount of battery discharged in mAh while the device was in deep doze mode.
    // This will only be non-zero for devices that report battery discharge
    // via a coulomb counter.
    optional int64 total_mah_deep_doze = 10;
  };
  optional BatteryDischarge battery_discharge = 2;