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

Commit 89083394 authored by Chenjie Yu's avatar Chenjie Yu
Browse files

change bluetooth update to be cumulative value based

Test: manual test
Change-Id: Ib8a4117818881b664a2cb18db12c6e9c0a462682
parent 262cdf0f
Loading
Loading
Loading
Loading
+68 −28
Original line number Diff line number Diff line
@@ -11074,6 +11074,9 @@ public class BatteryStatsImpl extends BatteryStats {
        }
    }
    private ModemActivityInfo mLastModemActivityInfo =
            new ModemActivityInfo(0, 0, 0, new int[0], 0, 0);
    /**
     * Distribute Cell radio energy info and network traffic to apps.
     */
@@ -11094,6 +11097,22 @@ 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) {
@@ -11105,11 +11124,11 @@ public class BatteryStatsImpl extends BatteryStats {
            if (activityInfo != null) {
                mHasModemReporting = true;
                mModemActivity.getIdleTimeCounter().addCountLocked(
                    activityInfo.getIdleTimeMillis());
                mModemActivity.getRxTimeCounter().addCountLocked(activityInfo.getRxTimeMillis());
                    idleTimeMs);
                mModemActivity.getRxTimeCounter().addCountLocked(rxTimeMs);
                for (int lvl = 0; lvl < ModemActivityInfo.TX_POWER_LEVELS; lvl++) {
                    mModemActivity.getTxTimeCounters()[lvl]
                        .addCountLocked(activityInfo.getTxTimeMillis()[lvl]);
                        .addCountLocked(txTimeMs[lvl]);
                }
                // POWER_MODEM_CONTROLLER_OPERATING_VOLTAGE is measured in mV, so convert to V.
@@ -11117,16 +11136,15 @@ public class BatteryStatsImpl extends BatteryStats {
                    PowerProfile.POWER_MODEM_CONTROLLER_OPERATING_VOLTAGE) / 1000.0;
                if (opVolt != 0) {
                    double energyUsed =
                        activityInfo.getSleepTimeMillis() *
                        sleepTimeMs *
                            mPowerProfile.getAveragePower(PowerProfile.POWER_MODEM_CONTROLLER_SLEEP)
                            + activityInfo.getIdleTimeMillis() *
                            + idleTimeMs *
                            mPowerProfile.getAveragePower(PowerProfile.POWER_MODEM_CONTROLLER_IDLE)
                            + activityInfo.getRxTimeMillis() *
                            + rxTimeMs *
                            mPowerProfile.getAveragePower(PowerProfile.POWER_MODEM_CONTROLLER_RX);
                    int[] txCurrentMa = activityInfo.getTxTimeMillis();
                    for (int i = 0; i < Math.min(txCurrentMa.length,
                    for (int i = 0; i < Math.min(txTimeMs.length,
                        SignalStrength.NUM_SIGNAL_STRENGTH_BINS); i++) {
                        energyUsed += txCurrentMa[i] * mPowerProfile.getAveragePower(
                        energyUsed += txTimeMs[i] * mPowerProfile.getAveragePower(
                            PowerProfile.POWER_MODEM_CONTROLLER_TX, i);
                    }
@@ -11207,7 +11225,7 @@ public class BatteryStatsImpl extends BatteryStats {
                            ControllerActivityCounterImpl activityCounter =
                                    u.getOrCreateModemControllerActivityLocked();
                            if (totalRxPackets > 0 && entry.rxPackets > 0) {
                                final long rxMs = (entry.rxPackets * activityInfo.getRxTimeMillis())
                                final long rxMs = (entry.rxPackets * rxTimeMs)
                                        / totalRxPackets;
                                activityCounter.getRxTimeCounter().addCountLocked(rxMs);
                            }
@@ -11215,7 +11233,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 * activityInfo.getTxTimeMillis()[lvl];
                                            entry.txPackets * txTimeMs[lvl];
                                    txMs /= totalTxPackets;
                                    activityCounter.getTxTimeCounters()[lvl].addCountLocked(txMs);
                                }
@@ -11236,6 +11254,10 @@ public class BatteryStatsImpl extends BatteryStats {
        }
    }
    // Cache last value for comparison.
    private BluetoothActivityEnergyInfo mLastBluetoothActivityEnergyInfo =
            new BluetoothActivityEnergyInfo(0, 0, 0, 0, 0, 0);
    /**
     * Distribute Bluetooth energy info and network traffic to apps.
     * @param info The energy information from the bluetooth controller.
@@ -11252,14 +11274,17 @@ public class BatteryStatsImpl extends BatteryStats {
        mHasBluetoothReporting = true;
        final long elapsedRealtimeMs = mClocks.elapsedRealtime();
        final long rxTimeMs = info.getControllerRxTimeMillis();
        final long txTimeMs = info.getControllerTxTimeMillis();
        final long rxTimeMs = info.getControllerRxTimeMillis() -
                mLastBluetoothActivityEnergyInfo.getControllerRxTimeMillis();
        final long txTimeMs = info.getControllerTxTimeMillis() -
                mLastBluetoothActivityEnergyInfo.getControllerTxTimeMillis();
        final long idleTimeMs = info.getControllerIdleTimeMillis() -
                mLastBluetoothActivityEnergyInfo.getControllerIdleTimeMillis();
        if (DEBUG_ENERGY) {
            Slog.d(TAG, "------ BEGIN BLE power blaming ------");
            Slog.d(TAG, "  Tx Time:    " + txTimeMs + " ms");
            Slog.d(TAG, "  Rx Time:    " + rxTimeMs + " ms");
            Slog.d(TAG, "  Idle Time:  " + info.getControllerIdleTimeMillis() + " ms");
            Slog.d(TAG, "  Idle Time:  " + idleTimeMs + " ms");
        }
        long totalScanTimeMs = 0;
@@ -11338,9 +11363,25 @@ public class BatteryStatsImpl extends BatteryStats {
        long totalRxBytes = 0;
        final UidTraffic[] uidTraffic = info.getUidTraffic();
        final int numUids = uidTraffic != null ? uidTraffic.length : 0;
        for (int i = 0; i < numUids; i++) {
            final UidTraffic traffic = uidTraffic[i];
        final UidTraffic[] lastUidTraffic = mLastBluetoothActivityEnergyInfo.getUidTraffic();
        final ArrayList<UidTraffic> deltaTraffic = new ArrayList<>();
        int m = 0, n = 0;
        for (; m < uidTraffic.length && n < lastUidTraffic.length; m++) {
            final UidTraffic traffic = uidTraffic[m];
            final UidTraffic lastTraffic = lastUidTraffic[n];
            if (traffic.getUid() == lastTraffic.getUid()) {
                deltaTraffic.add(new UidTraffic(traffic.getUid(),
                        traffic.getRxBytes() - lastTraffic.getRxBytes(),
                        traffic.getTxBytes() - lastTraffic.getTxBytes()));
                n++;
            }
        }
        for (; m < uidTraffic.length; m ++) {
            deltaTraffic.add(uidTraffic[m]);
        }
        for (int i = 0, j = 0; i < deltaTraffic.size(); i++) {
            final UidTraffic traffic = deltaTraffic.get(i);
            // Add to the global counters.
            mNetworkByteActivityCounters[NETWORK_BT_RX_DATA].addCountLocked(
@@ -11360,8 +11401,8 @@ public class BatteryStatsImpl extends BatteryStats {
        if ((totalTxBytes != 0 || totalRxBytes != 0) &&
                (leftOverRxTimeMs != 0 || leftOverTxTimeMs != 0)) {
            for (int i = 0; i < numUids; i++) {
                final UidTraffic traffic = uidTraffic[i];
            for (int i = 0; i < deltaTraffic.size(); i++) {
                final UidTraffic traffic = deltaTraffic.get(i);
                final Uid u = getUidStatsLocked(mapUid(traffic.getUid()));
                final ControllerActivityCounterImpl counter =
@@ -11392,12 +11433,9 @@ public class BatteryStatsImpl extends BatteryStats {
            }
        }
        mBluetoothActivity.getRxTimeCounter().addCountLocked(
                info.getControllerRxTimeMillis());
        mBluetoothActivity.getTxTimeCounters()[0].addCountLocked(
                info.getControllerTxTimeMillis());
        mBluetoothActivity.getIdleTimeCounter().addCountLocked(
                info.getControllerIdleTimeMillis());
        mBluetoothActivity.getRxTimeCounter().addCountLocked(rxTimeMs);
        mBluetoothActivity.getTxTimeCounters()[0].addCountLocked(txTimeMs);
        mBluetoothActivity.getIdleTimeCounter().addCountLocked(idleTimeMs);
        // POWER_BLUETOOTH_CONTROLLER_OPERATING_VOLTAGE is measured in mV, so convert to V.
        final double opVolt = mPowerProfile.getAveragePower(
@@ -11405,8 +11443,10 @@ public class BatteryStatsImpl extends BatteryStats {
        if (opVolt != 0) {
            // We store the power drain as mAms.
            mBluetoothActivity.getPowerCounter().addCountLocked(
                    (long) (info.getControllerEnergyUsed() / opVolt));
                    (long) ((info.getControllerEnergyUsed() -
                            mLastBluetoothActivityEnergyInfo.getControllerEnergyUsed() )/ opVolt));
        }
        mLastBluetoothActivityEnergyInfo = info;
    }
    /**
+30 −6
Original line number Diff line number Diff line
@@ -36,12 +36,12 @@ public class ModemActivityInfo implements Parcelable {
     */
    public static final int TX_POWER_LEVELS = 5;

    private final long mTimestamp;
    private final int mSleepTimeMs;
    private final int mIdleTimeMs;
    private final int [] mTxTimeMs = new int[TX_POWER_LEVELS];
    private final int mRxTimeMs;
    private final int mEnergyUsed;
    private long mTimestamp;
    private int mSleepTimeMs;
    private int mIdleTimeMs;
    private int [] mTxTimeMs = new int[TX_POWER_LEVELS];
    private int mRxTimeMs;
    private int mEnergyUsed;

    public ModemActivityInfo(long timestamp, int sleepTimeMs, int idleTimeMs,
                        int[] txTimeMs, int rxTimeMs, int energyUsed) {
@@ -110,6 +110,10 @@ public class ModemActivityInfo implements Parcelable {
        return mTimestamp;
    }

    public void setTimestamp(long timestamp) {
        mTimestamp = timestamp;
    }

    /**
     * @return tx time in ms. It's an array of tx times
     * with each index...
@@ -118,6 +122,10 @@ public class ModemActivityInfo implements Parcelable {
        return mTxTimeMs;
    }

    public void setTxTimeMillis(int[] txTimeMs) {
        mTxTimeMs = txTimeMs;
    }

    /**
     * @return sleep time in ms.
     */
@@ -125,6 +133,10 @@ public class ModemActivityInfo implements Parcelable {
        return mSleepTimeMs;
    }

    public void setSleepTimeMillis(int sleepTimeMillis) {
        mSleepTimeMs = sleepTimeMillis;
    }

    /**
     * @return idle time in ms.
     */
@@ -132,6 +144,10 @@ public class ModemActivityInfo implements Parcelable {
        return mIdleTimeMs;
    }

    public void setIdleTimeMillis(int idleTimeMillis) {
        mIdleTimeMs = idleTimeMillis;
    }

    /**
     * @return rx time in ms.
     */
@@ -139,6 +155,10 @@ public class ModemActivityInfo implements Parcelable {
        return mRxTimeMs;
    }

    public void setRxTimeMillis(int rxTimeMillis) {
        mRxTimeMs = rxTimeMillis;
    }

    /**
     * product of current(mA), voltage(V) and time(ms)
     * @return energy used
@@ -147,6 +167,10 @@ public class ModemActivityInfo implements Parcelable {
        return mEnergyUsed;
    }

    public void setEnergyUsed(int energyUsed) {
        mEnergyUsed = energyUsed;
    }

    /**
     * @return if the record is valid
     */