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

Commit 8b0012bc authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "fix ModemActivityInfo should be delta"

parents c84c7eb3 a54e54dc
Loading
Loading
Loading
Loading
+34 −29
Original line number Diff line number Diff line
@@ -11240,6 +11240,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.
     */
@@ -11247,9 +11266,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;
@@ -11263,22 +11283,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) {
@@ -11287,14 +11291,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.
@@ -11302,12 +11306,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(
@@ -11387,11 +11392,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);
                            }
@@ -11399,7 +11404,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);
                                }