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

Commit a54e54dc authored by Chenjie Yu's avatar Chenjie Yu Committed by Siddharth Ray
Browse files

fix ModemActivityInfo should be delta

Test: manual test
Change-Id: Icc45f05541bc90b64831572ed5f10733bc2207a4
Fix: 73388886
parent 37a9dab6
Loading
Loading
Loading
Loading
+34 −29
Original line number Diff line number Diff line
@@ -11220,6 +11220,25 @@ public class BatteryStatsImpl extends BatteryStats {
    private ModemActivityInfo mLastModemActivityInfo =
            new ModemActivityInfo(0, 0, 0, new int[0], 0, 0);
    private ModemActivityInfo getDeltaModemActivityInfo(ModemActivityInfo activityInfo) {
        if (activityInfo == null) {
            return null;
        }
        int[] txTimeMs = new int[ModemActivityInfo.TX_POWER_LEVELS];
        for (int i = 0; i < ModemActivityInfo.TX_POWER_LEVELS; i++) {
            txTimeMs[i] = activityInfo.getTxTimeMillis()[i]
                    - mLastModemActivityInfo.getTxTimeMillis()[i];
        }
        ModemActivityInfo deltaInfo = new ModemActivityInfo(activityInfo.getTimestamp(),
                activityInfo.getSleepTimeMillis() - mLastModemActivityInfo.getSleepTimeMillis(),
                activityInfo.getIdleTimeMillis() - mLastModemActivityInfo.getIdleTimeMillis(),
                txTimeMs,
                activityInfo.getRxTimeMillis() - mLastModemActivityInfo.getRxTimeMillis(),
                activityInfo.getEnergyUsed() - mLastModemActivityInfo.getEnergyUsed());
        mLastModemActivityInfo = activityInfo;
        return deltaInfo;
    }
    /**
     * Distribute Cell radio energy info and network traffic to apps.
     */
@@ -11227,9 +11246,10 @@ public class BatteryStatsImpl extends BatteryStats {
        if (DEBUG_ENERGY) {
            Slog.d(TAG, "Updating mobile radio stats with " + activityInfo);
        }
        ModemActivityInfo deltaInfo = getDeltaModemActivityInfo(activityInfo);
        // Add modem tx power to history.
        addModemTxPowerToHistory(activityInfo);
        addModemTxPowerToHistory(deltaInfo);
        // Grab a separate lock to acquire the network stats, which may do I/O.
        NetworkStats delta = null;
@@ -11243,22 +11263,6 @@ public class BatteryStatsImpl extends BatteryStats {
            }
        }
        int rxTimeMs = 0;
        int[] txTimeMs = new int[ModemActivityInfo.TX_POWER_LEVELS];
        int idleTimeMs = 0;
        int sleepTimeMs = 0;
        if (activityInfo != null) {
            rxTimeMs = activityInfo.getRxTimeMillis() - mLastModemActivityInfo.getRxTimeMillis();
            for (int i = 0; i < ModemActivityInfo.TX_POWER_LEVELS; i++) {
                txTimeMs[i] = activityInfo.getTxTimeMillis()[i]
                        - mLastModemActivityInfo.getTxTimeMillis()[i];
            }
            idleTimeMs =
                    activityInfo.getIdleTimeMillis() - mLastModemActivityInfo.getIdleTimeMillis();
            sleepTimeMs =
                    activityInfo.getSleepTimeMillis() - mLastModemActivityInfo.getSleepTimeMillis();
        }
        synchronized (this) {
            if (!mOnBatteryInternal) {
                if (delta != null) {
@@ -11267,14 +11271,14 @@ public class BatteryStatsImpl extends BatteryStats {
                return;
            }
            if (activityInfo != null) {
            if (deltaInfo != null) {
                mHasModemReporting = true;
                mModemActivity.getIdleTimeCounter().addCountLocked(
                    idleTimeMs);
                mModemActivity.getRxTimeCounter().addCountLocked(rxTimeMs);
                        deltaInfo.getIdleTimeMillis());
                mModemActivity.getRxTimeCounter().addCountLocked(deltaInfo.getRxTimeMillis());
                for (int lvl = 0; lvl < ModemActivityInfo.TX_POWER_LEVELS; lvl++) {
                    mModemActivity.getTxTimeCounters()[lvl]
                        .addCountLocked(txTimeMs[lvl]);
                        .addCountLocked(deltaInfo.getTxTimeMillis()[lvl]);
                }
                // POWER_MODEM_CONTROLLER_OPERATING_VOLTAGE is measured in mV, so convert to V.
@@ -11282,12 +11286,13 @@ public class BatteryStatsImpl extends BatteryStats {
                    PowerProfile.POWER_MODEM_CONTROLLER_OPERATING_VOLTAGE) / 1000.0;
                if (opVolt != 0) {
                    double energyUsed =
                        sleepTimeMs *
                            deltaInfo.getSleepTimeMillis() *
                            mPowerProfile.getAveragePower(PowerProfile.POWER_MODEM_CONTROLLER_SLEEP)
                            + idleTimeMs *
                            + deltaInfo.getIdleTimeMillis() *
                            mPowerProfile.getAveragePower(PowerProfile.POWER_MODEM_CONTROLLER_IDLE)
                            + rxTimeMs *
                            + deltaInfo.getRxTimeMillis() *
                            mPowerProfile.getAveragePower(PowerProfile.POWER_MODEM_CONTROLLER_RX);
                    int[] txTimeMs = deltaInfo.getTxTimeMillis();
                    for (int i = 0; i < Math.min(txTimeMs.length,
                            SignalStrength.NUM_SIGNAL_STRENGTH_BINS); i++) {
                        energyUsed += txTimeMs[i] * mPowerProfile.getAveragePower(
@@ -11367,11 +11372,11 @@ public class BatteryStatsImpl extends BatteryStats {
                        radioTime -= appRadioTime;
                        totalPackets -= appPackets;
                        if (activityInfo != null) {
                        if (deltaInfo != null) {
                            ControllerActivityCounterImpl activityCounter =
                                    u.getOrCreateModemControllerActivityLocked();
                            if (totalRxPackets > 0 && entry.rxPackets > 0) {
                                final long rxMs = (entry.rxPackets * rxTimeMs)
                                final long rxMs = (entry.rxPackets * deltaInfo.getRxTimeMillis())
                                        / totalRxPackets;
                                activityCounter.getRxTimeCounter().addCountLocked(rxMs);
                            }
@@ -11379,7 +11384,7 @@ public class BatteryStatsImpl extends BatteryStats {
                            if (totalTxPackets > 0 && entry.txPackets > 0) {
                                for (int lvl = 0; lvl < ModemActivityInfo.TX_POWER_LEVELS; lvl++) {
                                    long txMs =
                                            entry.txPackets * txTimeMs[lvl];
                                            entry.txPackets * deltaInfo.getTxTimeMillis()[lvl];
                                    txMs /= totalTxPackets;
                                    activityCounter.getTxTimeCounters()[lvl].addCountLocked(txMs);
                                }