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

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

Merge "Fix concurrency issues in BatteryUsageStatsProvider" into main

parents b787dff5 9b102739
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -20149,8 +20149,7 @@ public class ActivityManagerService extends IActivityManager.Stub
         * Returns the {@link BatteryStatsService} instance
         */
        public BatteryStatsService getBatteryStatsService() {
            return new BatteryStatsService(mContext, SystemServiceManager.ensureSystemDir(),
                BackgroundThread.get().getHandler());
            return new BatteryStatsService(mContext, SystemServiceManager.ensureSystemDir());
        }
        /**
+3 −4
Original line number Diff line number Diff line
@@ -381,8 +381,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub
        }
    };

    BatteryStatsService(Context context, File systemDir, Handler handler) {
        // BatteryStatsImpl expects the ActivityManagerService handler, so pass that one through.
    BatteryStatsService(Context context, File systemDir) {
        mContext = context;
        mUserManagerUserInfoProvider = new BatteryStatsImpl.UserInfoProvider() {
            private UserManagerInternal umi;
@@ -416,7 +415,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub
                        .build();
        mPowerStatsUidResolver = new PowerStatsUidResolver();
        mStats = new BatteryStatsImpl(mBatteryStatsConfig, Clock.SYSTEM_CLOCK, mMonotonicClock,
                systemDir, handler, this, this, mUserManagerUserInfoProvider, mPowerProfile,
                systemDir, mHandler, this, this, mUserManagerUserInfoProvider, mPowerProfile,
                mCpuScalingPolicies, mPowerStatsUidResolver);
        mWorker = new BatteryExternalStatsWorker(context, mStats);
        mStats.setExternalStatsSyncLocked(mWorker);
@@ -477,7 +476,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub
     */
    public static BatteryStatsService create(Context context, File systemDir, Handler handler,
            BatteryStatsImpl.BatteryCallback callback) {
        BatteryStatsService service = new BatteryStatsService(context, systemDir, handler);
        BatteryStatsService service = new BatteryStatsService(context, systemDir);
        service.mStats.setCallback(callback);
        synchronized (service.mStats) {
            service.mStats.readLocked();
+26 −21
Original line number Diff line number Diff line
@@ -170,7 +170,11 @@ public class BatteryUsageStatsProvider {
        final double minConsumedPowerThreshold = query.getMinConsumedPowerThreshold();

        final BatteryUsageStats.Builder batteryUsageStatsBuilder;
        long monotonicStartTime, monotonicEndTime;
        synchronized (stats) {
            monotonicStartTime = stats.getMonotonicStartTime();
            monotonicEndTime = stats.getMonotonicEndTime();

            batteryUsageStatsBuilder = new BatteryUsageStats.Builder(
                    stats.getCustomEnergyConsumerNames(), includePowerModels,
                    includeProcessStateData, minConsumedPowerThreshold);
@@ -195,7 +199,6 @@ public class BatteryUsageStatsProvider {
                                UidBatteryConsumer.PROCESS_STATE_FOREGROUND_SERVICE,
                                getProcessForegroundServiceTimeMs(uid, realtimeUs));
            }
        }

            final int[] powerComponents = query.getPowerComponents();
            final List<PowerCalculator> powerCalculators = getPowerCalculators();
@@ -213,18 +216,20 @@ public class BatteryUsageStatsProvider {
                        continue;
                    }
                }
            powerCalculator.calculate(batteryUsageStatsBuilder, stats, realtimeUs, uptimeUs, query);
        }

        if (mPowerStatsExporterEnabled) {
            mPowerStatsExporter.exportAggregatedPowerStats(batteryUsageStatsBuilder,
                    stats.getMonotonicStartTime(), stats.getMonotonicEndTime());
                powerCalculator.calculate(batteryUsageStatsBuilder, stats, realtimeUs, uptimeUs,
                        query);
            }

            if ((query.getFlags()
                    & BatteryUsageStatsQuery.FLAG_BATTERY_USAGE_STATS_INCLUDE_HISTORY) != 0) {
                batteryUsageStatsBuilder.setBatteryHistory(stats.copyHistory());
            }
        }

        if (mPowerStatsExporterEnabled) {
            mPowerStatsExporter.exportAggregatedPowerStats(batteryUsageStatsBuilder,
                    monotonicStartTime, monotonicEndTime);
        }

        BatteryUsageStats batteryUsageStats = batteryUsageStatsBuilder.build();
        if (includeProcessStateData) {
+1 −1
Original line number Diff line number Diff line
@@ -54,7 +54,7 @@ public final class BatteryStatsServiceTest {
        mBgThread.start();
        File systemDir = context.getCacheDir();
        Handler handler = new Handler(mBgThread.getLooper());
        mBatteryStatsService = new BatteryStatsService(context, systemDir, handler);
        mBatteryStatsService = new BatteryStatsService(context, systemDir);
    }

    @After