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

Commit ef5dd301 authored by Dmitri Plotnikov's avatar Dmitri Plotnikov Committed by Android (Google) Code Review
Browse files

Merge "Add power stats processors for audio, video, flashlight" into main

parents 7c77c7c9 20c4b0d3
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -197,6 +197,9 @@ public abstract class BatteryConsumer {
            POWER_COMPONENT_MOBILE_RADIO,
            POWER_COMPONENT_WIFI,
            POWER_COMPONENT_BLUETOOTH,
            POWER_COMPONENT_AUDIO,
            POWER_COMPONENT_VIDEO,
            POWER_COMPONENT_FLASHLIGHT,
    };

    static final int COLUMN_INDEX_BATTERY_CONSUMER_TYPE = 0;
+30 −0
Original line number Diff line number Diff line
@@ -1513,6 +1513,36 @@ public class BatteryStatsHistory {
        }
    }

    /**
     * Records an event when some state2 flag changes to true.
     */
    public void recordState2StartEvent(long elapsedRealtimeMs, long uptimeMs, int stateFlags,
            int uid, String name) {
        synchronized (this) {
            mHistoryCur.states2 |= stateFlags;
            mHistoryCur.eventCode = EVENT_STATE_CHANGE | EVENT_FLAG_START;
            mHistoryCur.eventTag = mHistoryCur.localEventTag;
            mHistoryCur.eventTag.uid = uid;
            mHistoryCur.eventTag.string = name;
            writeHistoryItem(elapsedRealtimeMs, uptimeMs);
        }
    }

    /**
     * Records an event when some state2 flag changes to false.
     */
    public void recordState2StopEvent(long elapsedRealtimeMs, long uptimeMs, int stateFlags,
            int uid, String name) {
        synchronized (this) {
            mHistoryCur.states2 &= ~stateFlags;
            mHistoryCur.eventCode = EVENT_STATE_CHANGE | EVENT_FLAG_FINISH;
            mHistoryCur.eventTag = mHistoryCur.localEventTag;
            mHistoryCur.eventTag.uid = uid;
            mHistoryCur.eventTag.string = name;
            writeHistoryItem(elapsedRealtimeMs, uptimeMs);
        }
    }

    /**
     * Records an event when some state2 flag changes to false.
     */
+58 −2
Original line number Diff line number Diff line
@@ -122,12 +122,14 @@ import com.android.server.net.BaseNetworkObserver;
import com.android.server.pm.UserManagerInternal;
import com.android.server.power.optimization.Flags;
import com.android.server.power.stats.AggregatedPowerStatsConfig;
import com.android.server.power.stats.AudioPowerStatsProcessor;
import com.android.server.power.stats.BatteryExternalStatsWorker;
import com.android.server.power.stats.BatteryStatsDumpHelperImpl;
import com.android.server.power.stats.BatteryStatsImpl;
import com.android.server.power.stats.BatteryUsageStatsProvider;
import com.android.server.power.stats.BluetoothPowerStatsProcessor;
import com.android.server.power.stats.CpuPowerStatsProcessor;
import com.android.server.power.stats.FlashlightPowerStatsProcessor;
import com.android.server.power.stats.MobileRadioPowerStatsProcessor;
import com.android.server.power.stats.PhoneCallPowerStatsProcessor;
import com.android.server.power.stats.PowerStatsAggregator;
@@ -136,6 +138,7 @@ import com.android.server.power.stats.PowerStatsScheduler;
import com.android.server.power.stats.PowerStatsStore;
import com.android.server.power.stats.PowerStatsUidResolver;
import com.android.server.power.stats.SystemServerCpuThreadReader.SystemServiceCpuThreadTimes;
import com.android.server.power.stats.VideoPowerStatsProcessor;
import com.android.server.power.stats.WifiPowerStatsProcessor;
import com.android.server.power.stats.wakeups.CpuWakeupStats;

@@ -194,7 +197,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub
    private final BatteryUsageStatsProvider mBatteryUsageStatsProvider;
    private final AtomicFile mConfigFile;
    private final BatteryStats.BatteryStatsDumpHelper mDumpHelper;
    private final PowerStatsUidResolver mPowerStatsUidResolver;
    private final PowerStatsUidResolver mPowerStatsUidResolver = new PowerStatsUidResolver();
    private final AggregatedPowerStatsConfig mAggregatedPowerStatsConfig;

    private volatile boolean mMonitorEnabled = true;
@@ -422,7 +425,6 @@ public final class BatteryStatsService extends IBatteryStats.Stub
        setPowerStatsThrottlePeriods(batteryStatsConfigBuilder, context.getResources().getString(
                com.android.internal.R.string.config_powerStatsThrottlePeriods));
        mBatteryStatsConfig = batteryStatsConfigBuilder.build();
        mPowerStatsUidResolver = new PowerStatsUidResolver();
        mStats = new BatteryStatsImpl(mBatteryStatsConfig, Clock.SYSTEM_CLOCK, mMonotonicClock,
                systemDir, mHandler, this, this, mUserManagerUserInfoProvider, mPowerProfile,
                mCpuScalingPolicies, mPowerStatsUidResolver);
@@ -516,6 +518,42 @@ public final class BatteryStatsService extends IBatteryStats.Stub
                        AggregatedPowerStatsConfig.STATE_PROCESS_STATE)
                .setProcessor(
                        new BluetoothPowerStatsProcessor(mPowerProfile));

        config.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_AUDIO)
                .trackDeviceStates(
                        AggregatedPowerStatsConfig.STATE_POWER,
                        AggregatedPowerStatsConfig.STATE_SCREEN)
                .trackUidStates(
                        AggregatedPowerStatsConfig.STATE_POWER,
                        AggregatedPowerStatsConfig.STATE_SCREEN,
                        AggregatedPowerStatsConfig.STATE_PROCESS_STATE)
                .setProcessor(
                        new AudioPowerStatsProcessor(mPowerProfile,
                                mPowerStatsUidResolver));

        config.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_VIDEO)
                .trackDeviceStates(
                        AggregatedPowerStatsConfig.STATE_POWER,
                        AggregatedPowerStatsConfig.STATE_SCREEN)
                .trackUidStates(
                        AggregatedPowerStatsConfig.STATE_POWER,
                        AggregatedPowerStatsConfig.STATE_SCREEN,
                        AggregatedPowerStatsConfig.STATE_PROCESS_STATE)
                .setProcessor(
                        new VideoPowerStatsProcessor(mPowerProfile,
                                mPowerStatsUidResolver));

        config.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_FLASHLIGHT)
                .trackDeviceStates(
                        AggregatedPowerStatsConfig.STATE_POWER,
                        AggregatedPowerStatsConfig.STATE_SCREEN)
                .trackUidStates(
                        AggregatedPowerStatsConfig.STATE_POWER,
                        AggregatedPowerStatsConfig.STATE_SCREEN,
                        AggregatedPowerStatsConfig.STATE_PROCESS_STATE)
                .setProcessor(
                        new FlashlightPowerStatsProcessor(mPowerProfile,
                                mPowerStatsUidResolver));
        return config;
    }

@@ -583,6 +621,24 @@ public final class BatteryStatsService extends IBatteryStats.Stub
                BatteryConsumer.POWER_COMPONENT_BLUETOOTH,
                Flags.streamlinedConnectivityBatteryStats());

        mStats.setPowerStatsCollectorEnabled(BatteryConsumer.POWER_COMPONENT_AUDIO,
                Flags.streamlinedMiscBatteryStats());
        mBatteryUsageStatsProvider.setPowerStatsExporterEnabled(
                BatteryConsumer.POWER_COMPONENT_AUDIO,
                Flags.streamlinedMiscBatteryStats());

        mStats.setPowerStatsCollectorEnabled(BatteryConsumer.POWER_COMPONENT_VIDEO,
                Flags.streamlinedMiscBatteryStats());
        mBatteryUsageStatsProvider.setPowerStatsExporterEnabled(
                BatteryConsumer.POWER_COMPONENT_VIDEO,
                Flags.streamlinedMiscBatteryStats());

        mStats.setPowerStatsCollectorEnabled(BatteryConsumer.POWER_COMPONENT_FLASHLIGHT,
                Flags.streamlinedMiscBatteryStats());
        mBatteryUsageStatsProvider.setPowerStatsExporterEnabled(
                BatteryConsumer.POWER_COMPONENT_FLASHLIGHT,
                Flags.streamlinedMiscBatteryStats());

        mWorker.systemServicesReady();
        mStats.systemServicesReady(mContext);
        mCpuWakeupStats.systemServicesReady();
+37 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2024 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.server.power.stats;

import android.os.BatteryConsumer;
import android.os.BatteryStats;

import com.android.internal.os.PowerProfile;

public class AudioPowerStatsProcessor extends BinaryStatePowerStatsProcessor {
    public AudioPowerStatsProcessor(PowerProfile powerProfile,
            PowerStatsUidResolver uidResolver) {
        super(BatteryConsumer.POWER_COMPONENT_AUDIO, uidResolver,
                powerProfile.getAveragePower(PowerProfile.POWER_AUDIO));
    }

    @Override
    protected @BinaryState int getBinaryState(BatteryStats.HistoryItem item) {
        return (item.states & BatteryStats.HistoryItem.STATE_AUDIO_ON_FLAG) != 0
                ? STATE_ON
                : STATE_OFF;
    }
}
+30 −18
Original line number Diff line number Diff line
@@ -6490,13 +6490,15 @@ public class BatteryStatsImpl extends BatteryStats {
        uid = mapUid(uid);
        if (mAudioOnNesting == 0) {
            mHistory.recordStateStartEvent(elapsedRealtimeMs, uptimeMs,
                    HistoryItem.STATE_AUDIO_ON_FLAG);
                    HistoryItem.STATE_AUDIO_ON_FLAG, uid, "audio");
            mAudioOnTimer.startRunningLocked(elapsedRealtimeMs);
        }
        mAudioOnNesting++;
        if (!mPowerStatsCollectorEnabled.get(BatteryConsumer.POWER_COMPONENT_AUDIO)) {
            getUidStatsLocked(uid, elapsedRealtimeMs, uptimeMs)
                    .noteAudioTurnedOnLocked(elapsedRealtimeMs);
        }
    }
    @GuardedBy("this")
    public void noteAudioOffLocked(int uid, long elapsedRealtimeMs, long uptimeMs) {
@@ -6506,25 +6508,29 @@ public class BatteryStatsImpl extends BatteryStats {
        uid = mapUid(uid);
        if (--mAudioOnNesting == 0) {
            mHistory.recordStateStopEvent(elapsedRealtimeMs, uptimeMs,
                    HistoryItem.STATE_AUDIO_ON_FLAG);
                    HistoryItem.STATE_AUDIO_ON_FLAG, uid, "audio");
            mAudioOnTimer.stopRunningLocked(elapsedRealtimeMs);
        }
        if (!mPowerStatsCollectorEnabled.get(BatteryConsumer.POWER_COMPONENT_AUDIO)) {
            getUidStatsLocked(uid, elapsedRealtimeMs, uptimeMs)
                    .noteAudioTurnedOffLocked(elapsedRealtimeMs);
        }
    }
    @GuardedBy("this")
    public void noteVideoOnLocked(int uid, long elapsedRealtimeMs, long uptimeMs) {
        uid = mapUid(uid);
        if (mVideoOnNesting == 0) {
            mHistory.recordState2StartEvent(elapsedRealtimeMs, uptimeMs,
                    HistoryItem.STATE2_VIDEO_ON_FLAG);
                    HistoryItem.STATE2_VIDEO_ON_FLAG, uid, "video");
            mVideoOnTimer.startRunningLocked(elapsedRealtimeMs);
        }
        mVideoOnNesting++;
        if (!mPowerStatsCollectorEnabled.get(BatteryConsumer.POWER_COMPONENT_VIDEO)) {
            getUidStatsLocked(uid, elapsedRealtimeMs, uptimeMs)
                    .noteVideoTurnedOnLocked(elapsedRealtimeMs);
        }
    }
    @GuardedBy("this")
    public void noteVideoOffLocked(int uid, long elapsedRealtimeMs, long uptimeMs) {
@@ -6534,12 +6540,14 @@ public class BatteryStatsImpl extends BatteryStats {
        uid = mapUid(uid);
        if (--mVideoOnNesting == 0) {
            mHistory.recordState2StopEvent(elapsedRealtimeMs, uptimeMs,
                    HistoryItem.STATE2_VIDEO_ON_FLAG);
                    HistoryItem.STATE2_VIDEO_ON_FLAG, uid, "video");
            mVideoOnTimer.stopRunningLocked(elapsedRealtimeMs);
        }
        if (!mPowerStatsCollectorEnabled.get(BatteryConsumer.POWER_COMPONENT_VIDEO)) {
            getUidStatsLocked(uid, elapsedRealtimeMs, uptimeMs)
                    .noteVideoTurnedOffLocked(elapsedRealtimeMs);
        }
    }
    @GuardedBy("this")
    public void noteResetAudioLocked(long elapsedRealtimeMs, long uptimeMs) {
@@ -6613,12 +6621,14 @@ public class BatteryStatsImpl extends BatteryStats {
        uid = mapUid(uid);
        if (mFlashlightOnNesting++ == 0) {
            mHistory.recordState2StartEvent(elapsedRealtimeMs, uptimeMs,
                    HistoryItem.STATE2_FLASHLIGHT_FLAG);
                    HistoryItem.STATE2_FLASHLIGHT_FLAG, uid, "flashlight");
            mFlashlightOnTimer.startRunningLocked(elapsedRealtimeMs);
        }
        if (!mPowerStatsCollectorEnabled.get(BatteryConsumer.POWER_COMPONENT_FLASHLIGHT)) {
            getUidStatsLocked(uid, elapsedRealtimeMs, uptimeMs)
                    .noteFlashlightTurnedOnLocked(elapsedRealtimeMs);
        }
    }
    @GuardedBy("this")
    public void noteFlashlightOffLocked(int uid, long elapsedRealtimeMs, long uptimeMs) {
@@ -6628,12 +6638,14 @@ public class BatteryStatsImpl extends BatteryStats {
        uid = mapUid(uid);
        if (--mFlashlightOnNesting == 0) {
            mHistory.recordState2StopEvent(elapsedRealtimeMs, uptimeMs,
                    HistoryItem.STATE2_FLASHLIGHT_FLAG);
                    HistoryItem.STATE2_FLASHLIGHT_FLAG, uid, "flashlight");
            mFlashlightOnTimer.stopRunningLocked(elapsedRealtimeMs);
        }
        if (!mPowerStatsCollectorEnabled.get(BatteryConsumer.POWER_COMPONENT_FLASHLIGHT)) {
            getUidStatsLocked(uid, elapsedRealtimeMs, uptimeMs)
                    .noteFlashlightTurnedOffLocked(elapsedRealtimeMs);
        }
    }
    @GuardedBy("this")
    public void noteCameraOnLocked(int uid, long elapsedRealtimeMs, long uptimeMs) {
Loading