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

Commit 2c0fb9d2 authored by Dmitri Plotnikov's avatar Dmitri Plotnikov Committed by Automerger Merge Worker
Browse files

Merge "Fix device-level wakelock battery attribution" into sc-dev am: dd9dcdfb am: bb28257c

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14508393

Change-Id: I30369ebde946dd119ecb0cf25117dd22fc89ece4
parents 065ed3c1 bb28257c
Loading
Loading
Loading
Loading
+21 −7
Original line number Diff line number Diff line
@@ -75,22 +75,29 @@ public class WakelockPowerCalculator extends PowerCalculator {
        // this remainder to the OS, if possible.
        calculateRemaining(result, batteryStats, rawRealtimeUs, rawUptimeUs,
                BatteryStats.STATS_SINCE_CHARGED, osPowerMah, osDurationMs, totalAppDurationMs);
        final double remainingPowerMah = result.powerMah;
        if (osBatteryConsumer != null) {
            osBatteryConsumer.setUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_WAKELOCK,
                    result.durationMs)
                    .setConsumedPower(BatteryConsumer.POWER_COMPONENT_WAKELOCK, result.powerMah);
                    .setConsumedPower(BatteryConsumer.POWER_COMPONENT_WAKELOCK, remainingPowerMah);
        }

        final long wakeTimeMillis =
                calculateWakeTimeMillis(batteryStats, rawRealtimeUs, rawUptimeUs);
        final double powerMah = mPowerEstimator.calculatePower(wakeTimeMillis);
        long wakeTimeMs = calculateWakeTimeMillis(batteryStats, rawRealtimeUs, rawUptimeUs);
        if (wakeTimeMs < 0) {
            wakeTimeMs = 0;
        }
        builder.getAggregateBatteryConsumerBuilder(
                BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_DEVICE)
                .setUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_WAKELOCK, wakeTimeMillis)
                .setConsumedPower(BatteryConsumer.POWER_COMPONENT_WAKELOCK, powerMah);
                .setUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_WAKELOCK,
                        wakeTimeMs)
                .setConsumedPower(BatteryConsumer.POWER_COMPONENT_WAKELOCK,
                        appPowerMah + remainingPowerMah);
        builder.getAggregateBatteryConsumerBuilder(
                BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_ALL_APPS)
                .setConsumedPower(BatteryConsumer.POWER_COMPONENT_WAKELOCK, appPowerMah);
                .setUsageDurationMillis(BatteryConsumer.POWER_COMPONENT_WAKELOCK,
                        totalAppDurationMs)
                .setConsumedPower(BatteryConsumer.POWER_COMPONENT_WAKELOCK,
                        appPowerMah);
    }

    @Override
@@ -167,9 +174,16 @@ public class WakelockPowerCalculator extends PowerCalculator {
            }
            result.durationMs = osDurationMs + wakeTimeMillis;
            result.powerMah = osPowerMah + power;
        } else {
            result.durationMs = 0;
            result.powerMah = 0;
        }
    }

    /**
     * Return on-battery/screen-off time.  May be negative if the screen-on time exceeds
     * the on-battery time.
     */
    private long calculateWakeTimeMillis(BatteryStats batteryStats, long rawRealtimeUs,
            long rawUptimeUs) {
        final long batteryUptimeUs = batteryStats.getBatteryUptime(rawUptimeUs);
+2 −2
Original line number Diff line number Diff line
@@ -79,8 +79,8 @@ public class WakelockPowerCalculatorTest {
        assertThat(deviceConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_WAKELOCK))
                .isWithin(PRECISION).of(0.6);

        BatteryConsumer appConsumer = mStatsRule.getDeviceBatteryConsumer();
        BatteryConsumer appConsumer = mStatsRule.getAppsBatteryConsumer();
        assertThat(appConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_WAKELOCK))
                .isWithin(PRECISION).of(0.6);
                .isWithin(PRECISION).of(0.1);
    }
}