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

Commit 424ef796 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Prevent sharing of stateful PowerStatsProcessor objects" into main

parents e322c00c 34eac9cf
Loading
Loading
Loading
Loading
+24 −22
Original line number Diff line number Diff line
@@ -488,8 +488,8 @@ public final class BatteryStatsService extends IBatteryStats.Stub
                        AggregatedPowerStatsConfig.STATE_POWER,
                        AggregatedPowerStatsConfig.STATE_SCREEN,
                        AggregatedPowerStatsConfig.STATE_PROCESS_STATE)
                .setProcessor(
                        new CpuPowerStatsProcessor(mPowerProfile, mCpuScalingPolicies));
                .setProcessorSupplier(
                        () -> new CpuPowerStatsProcessor(mPowerProfile, mCpuScalingPolicies));

        config.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_SCREEN)
                .trackDeviceStates(
@@ -498,12 +498,12 @@ public final class BatteryStatsService extends IBatteryStats.Stub
                .trackUidStates(
                        AggregatedPowerStatsConfig.STATE_POWER,
                        AggregatedPowerStatsConfig.STATE_SCREEN)
                .setProcessor(
                        new ScreenPowerStatsProcessor(mPowerProfile));
                .setProcessorSupplier(
                        () -> new ScreenPowerStatsProcessor(mPowerProfile));

        config.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_AMBIENT_DISPLAY,
                        BatteryConsumer.POWER_COMPONENT_SCREEN)
                .setProcessor(new AmbientDisplayPowerStatsProcessor());
                .setProcessorSupplier(AmbientDisplayPowerStatsProcessor::new);

        config.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO)
                .trackDeviceStates(
@@ -513,12 +513,12 @@ public final class BatteryStatsService extends IBatteryStats.Stub
                        AggregatedPowerStatsConfig.STATE_POWER,
                        AggregatedPowerStatsConfig.STATE_SCREEN,
                        AggregatedPowerStatsConfig.STATE_PROCESS_STATE)
                .setProcessor(
                        new MobileRadioPowerStatsProcessor(mPowerProfile));
                .setProcessorSupplier(
                        () -> new MobileRadioPowerStatsProcessor(mPowerProfile));

        config.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_PHONE,
                        BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO)
                .setProcessor(new PhoneCallPowerStatsProcessor());
                .setProcessorSupplier(PhoneCallPowerStatsProcessor::new);

        config.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_WIFI)
                .trackDeviceStates(
@@ -528,8 +528,8 @@ public final class BatteryStatsService extends IBatteryStats.Stub
                        AggregatedPowerStatsConfig.STATE_POWER,
                        AggregatedPowerStatsConfig.STATE_SCREEN,
                        AggregatedPowerStatsConfig.STATE_PROCESS_STATE)
                .setProcessor(
                        new WifiPowerStatsProcessor(mPowerProfile));
                .setProcessorSupplier(
                        () -> new WifiPowerStatsProcessor(mPowerProfile));

        config.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_BLUETOOTH)
                .trackDeviceStates(
@@ -539,8 +539,8 @@ public final class BatteryStatsService extends IBatteryStats.Stub
                        AggregatedPowerStatsConfig.STATE_POWER,
                        AggregatedPowerStatsConfig.STATE_SCREEN,
                        AggregatedPowerStatsConfig.STATE_PROCESS_STATE)
                .setProcessor(
                        new BluetoothPowerStatsProcessor(mPowerProfile));
                .setProcessorSupplier(
                        () -> new BluetoothPowerStatsProcessor(mPowerProfile));

        config.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_AUDIO)
                .trackDeviceStates(
@@ -550,8 +550,8 @@ public final class BatteryStatsService extends IBatteryStats.Stub
                        AggregatedPowerStatsConfig.STATE_POWER,
                        AggregatedPowerStatsConfig.STATE_SCREEN,
                        AggregatedPowerStatsConfig.STATE_PROCESS_STATE)
                .setProcessor(
                        new AudioPowerStatsProcessor(mPowerProfile, mPowerStatsUidResolver));
                .setProcessorSupplier(
                        () -> new AudioPowerStatsProcessor(mPowerProfile, mPowerStatsUidResolver));

        config.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_VIDEO)
                .trackDeviceStates(
@@ -561,7 +561,8 @@ public final class BatteryStatsService extends IBatteryStats.Stub
                        AggregatedPowerStatsConfig.STATE_POWER,
                        AggregatedPowerStatsConfig.STATE_SCREEN,
                        AggregatedPowerStatsConfig.STATE_PROCESS_STATE)
                .setProcessor(new VideoPowerStatsProcessor(mPowerProfile, mPowerStatsUidResolver));
                .setProcessorSupplier(
                        () -> new VideoPowerStatsProcessor(mPowerProfile, mPowerStatsUidResolver));

        config.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_FLASHLIGHT)
                .trackDeviceStates(
@@ -571,8 +572,9 @@ public final class BatteryStatsService extends IBatteryStats.Stub
                        AggregatedPowerStatsConfig.STATE_POWER,
                        AggregatedPowerStatsConfig.STATE_SCREEN,
                        AggregatedPowerStatsConfig.STATE_PROCESS_STATE)
                .setProcessor(
                        new FlashlightPowerStatsProcessor(mPowerProfile, mPowerStatsUidResolver));
                .setProcessorSupplier(
                        () -> new FlashlightPowerStatsProcessor(mPowerProfile,
                                mPowerStatsUidResolver));

        config.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_CAMERA)
                .trackDeviceStates(
@@ -582,8 +584,8 @@ public final class BatteryStatsService extends IBatteryStats.Stub
                        AggregatedPowerStatsConfig.STATE_POWER,
                        AggregatedPowerStatsConfig.STATE_SCREEN,
                        AggregatedPowerStatsConfig.STATE_PROCESS_STATE)
                .setProcessor(
                        new CameraPowerStatsProcessor(mPowerProfile, mPowerStatsUidResolver));
                .setProcessorSupplier(
                        () -> new CameraPowerStatsProcessor(mPowerProfile, mPowerStatsUidResolver));

        config.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_GNSS)
                .trackDeviceStates(
@@ -593,8 +595,8 @@ public final class BatteryStatsService extends IBatteryStats.Stub
                        AggregatedPowerStatsConfig.STATE_POWER,
                        AggregatedPowerStatsConfig.STATE_SCREEN,
                        AggregatedPowerStatsConfig.STATE_PROCESS_STATE)
                .setProcessor(
                        new GnssPowerStatsProcessor(mPowerProfile, mPowerStatsUidResolver));
                .setProcessorSupplier(
                        () -> new GnssPowerStatsProcessor(mPowerProfile, mPowerStatsUidResolver));

        config.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_SENSORS)
                .trackDeviceStates(
@@ -604,7 +606,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub
                        AggregatedPowerStatsConfig.STATE_POWER,
                        AggregatedPowerStatsConfig.STATE_SCREEN,
                        AggregatedPowerStatsConfig.STATE_PROCESS_STATE)
                .setProcessor(new SensorPowerStatsProcessor(
                .setProcessorSupplier(() -> new SensorPowerStatsProcessor(
                        () -> mContext.getSystemService(SensorManager.class)));

        config.trackCustomPowerComponents(CustomEnergyConsumerPowerStatsProcessor::new)
+5 −7
Original line number Diff line number Diff line
@@ -174,8 +174,7 @@ class AggregatedPowerStats {

    void start(long timestampMs) {
        for (int i = 0; i < mPowerComponentStats.size(); i++) {
            PowerComponentAggregatedPowerStats component = mPowerComponentStats.valueAt(i);
            component.getConfig().getProcessor().start(component, timestampMs);
            mPowerComponentStats.valueAt(i).start(timestampMs);
        }
    }

@@ -211,24 +210,23 @@ class AggregatedPowerStats {
            stats = new PowerComponentAggregatedPowerStats(this, powerComponent);
            stats.setPowerStatsDescriptor(powerStats.descriptor);
            stats.copyStatesFrom(mGenericPowerComponent);
            stats.start(time);
            mPowerComponentStats.put(powerComponentId, stats);
        }

        PowerStatsProcessor processor = stats.getConfig().getProcessor();
        processor.addPowerStats(stats, powerStats, time);
        stats.addPowerStats(powerStats, time);
    }

    public void noteStateChange(BatteryStats.HistoryItem item) {
        for (int i = 0; i < mPowerComponentStats.size(); i++) {
            PowerComponentAggregatedPowerStats stats = mPowerComponentStats.valueAt(i);
            stats.getConfig().getProcessor().noteStateChange(stats, item);
            mPowerComponentStats.valueAt(i).noteStateChange(item);
        }
    }

    void finish(long timestampMs) {
        for (int i = 0; i < mPowerComponentStats.size(); i++) {
            PowerComponentAggregatedPowerStats component = mPowerComponentStats.valueAt(i);
            component.getConfig().getProcessor().finish(component, timestampMs);
            component.finish(timestampMs);
        }
    }

+13 −9
Original line number Diff line number Diff line
@@ -74,7 +74,7 @@ public class AggregatedPowerStatsConfig {
        private final int mPowerComponentId;
        private @TrackedState int[] mTrackedDeviceStates;
        private @TrackedState int[] mTrackedUidStates;
        private PowerStatsProcessor mProcessor = NO_OP_PROCESSOR;
        private Supplier<PowerStatsProcessor> mProcessorSupplier;

        PowerComponent(int powerComponentId) {
            this.mPowerComponentId = powerComponentId;
@@ -103,12 +103,13 @@ public class AggregatedPowerStatsConfig {
        }

        /**
         * Takes an object that should be invoked for every aggregated stats span
         * before giving the aggregates stats to consumers. The processor can complete the
         * aggregation process, for example by computing estimated power usage.
         * A PowerStatsProcessor takes an object that should be invoked for every aggregated
         * stats span before giving the aggregates stats to consumers. The processor can complete
         * the aggregation process, for example by computing estimated power usage.
         */
        public PowerComponent setProcessor(@NonNull PowerStatsProcessor processor) {
            mProcessor = processor;
        public PowerComponent setProcessorSupplier(
                @NonNull Supplier<PowerStatsProcessor> processorSupplier) {
            mProcessorSupplier = processorSupplier;
            return this;
        }

@@ -142,8 +143,11 @@ public class AggregatedPowerStatsConfig {
        }

        @NonNull
        PowerStatsProcessor getProcessor() {
            return mProcessor;
        PowerStatsProcessor createProcessor() {
            if (mProcessorSupplier == null) {
                return NO_OP_PROCESSOR;
            }
            return mProcessorSupplier.get();
        }

        private boolean isTracked(int[] trackedStates, int state) {
@@ -236,7 +240,7 @@ public class AggregatedPowerStatsConfig {
        powerComponent.trackUidStates(mCustomPowerComponent.mTrackedUidStates);

        if (mCustomPowerStatsProcessorFactory != null) {
            powerComponent.setProcessor(mCustomPowerStatsProcessorFactory.get());
            powerComponent.setProcessorSupplier(mCustomPowerStatsProcessorFactory);
        }

        return powerComponent;
+1 −1
Original line number Diff line number Diff line
@@ -163,7 +163,7 @@ abstract class BinaryStatePowerStatsProcessor extends PowerStatsProcessor {

    private void flushPowerStats(PowerComponentAggregatedPowerStats stats, long timestamp) {
        mPowerStats.durationMs = timestamp - mLastUpdateTimestamp;
        stats.addPowerStats(mPowerStats, timestamp);
        stats.addProcessedPowerStats(mPowerStats, timestamp);

        Arrays.fill(mPowerStats.stats, 0);
        mPowerStats.uidStats.clear();
+25 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static com.android.server.power.stats.MultiStateStats.STATE_DOES_NOT_EXIS

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.os.BatteryStats;
import android.os.UserHandle;
import android.util.IndentingPrintWriter;
import android.util.Slog;
@@ -64,6 +65,7 @@ class PowerComponentAggregatedPowerStats {
    private final MultiStateStats.States[] mUidStateConfig;
    private final int[] mDeviceStates;

    private PowerStatsProcessor mProcessor;
    private MultiStateStats.Factory mStatsFactory;
    private MultiStateStats.Factory mStateStatsFactory;
    private MultiStateStats.Factory mUidStatsFactory;
@@ -110,6 +112,21 @@ class PowerComponentAggregatedPowerStats {
        mPowerStatsDescriptor = powerStatsDescriptor;
    }

    void start(long timestampMs) {
        if (mProcessor == null) {
            mProcessor = mConfig.createProcessor();
        }
        mProcessor.start(this, timestampMs);
    }

    void finish(long timestampMs) {
        mProcessor.finish(this, timestampMs);
    }

    void noteStateChange(BatteryStats.HistoryItem item) {
        mProcessor.noteStateChange(this, item);
    }

    void setState(@AggregatedPowerStatsConfig.TrackedState int stateId, int state,
            long timestampMs) {
        if (mDeviceStats == null) {
@@ -183,6 +200,14 @@ class PowerComponentAggregatedPowerStats {
    }

    void addPowerStats(PowerStats powerStats, long timestampMs) {
        // Should call powerStats.addProcessedPowerStats
        mProcessor.addPowerStats(this, powerStats, timestampMs);
    }

    /**
     * Should be called ONLY by PowerStatsProcessor.processPowerStats.
     */
    void addProcessedPowerStats(PowerStats powerStats, long timestampMs) {
        mPowerStatsDescriptor = powerStats.descriptor;

        if (mDeviceStats == null) {
Loading