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

Commit a4b7960b authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Move PowerStatsLogger off of the main thread." am: 19041e21

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

Change-Id: I06c9b645bc718d3a270c6df24bb33aa1953aeb01
parents ebeefc7e 19041e21
Loading
Loading
Loading
Loading
+2 −3
Original line number Original line Diff line number Diff line
@@ -35,7 +35,6 @@ import android.util.proto.ProtoInputStream;
import android.util.proto.ProtoOutputStream;
import android.util.proto.ProtoOutputStream;


import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting;

import com.android.server.powerstats.PowerStatsHALWrapper.IPowerStatsHALWrapper;
import com.android.server.powerstats.PowerStatsHALWrapper.IPowerStatsHALWrapper;
import com.android.server.powerstats.ProtoStreamUtils.ChannelUtils;
import com.android.server.powerstats.ProtoStreamUtils.ChannelUtils;
import com.android.server.powerstats.ProtoStreamUtils.EnergyConsumerResultUtils;
import com.android.server.powerstats.ProtoStreamUtils.EnergyConsumerResultUtils;
@@ -313,12 +312,12 @@ public final class PowerStatsLogger extends Handler {
        return mStartWallTime;
        return mStartWallTime;
    }
    }


    public PowerStatsLogger(Context context, File dataStoragePath,
    public PowerStatsLogger(Context context, Looper looper, File dataStoragePath,
            String meterFilename, String meterCacheFilename,
            String meterFilename, String meterCacheFilename,
            String modelFilename, String modelCacheFilename,
            String modelFilename, String modelCacheFilename,
            String residencyFilename, String residencyCacheFilename,
            String residencyFilename, String residencyCacheFilename,
            IPowerStatsHALWrapper powerStatsHALWrapper) {
            IPowerStatsHALWrapper powerStatsHALWrapper) {
        super(Looper.getMainLooper());
        super(looper);
        mStartWallTime = currentTimeMillis() - SystemClock.elapsedRealtime();
        mStartWallTime = currentTimeMillis() - SystemClock.elapsedRealtime();
        if (DEBUG) Slog.d(TAG, "mStartWallTime: " + mStartWallTime);
        if (DEBUG) Slog.d(TAG, "mStartWallTime: " + mStartWallTime);
        mPowerStatsHALWrapper = powerStatsHALWrapper;
        mPowerStatsHALWrapper = powerStatsHALWrapper;
+24 −11
Original line number Original line Diff line number Diff line
@@ -28,6 +28,7 @@ import android.os.Binder;
import android.os.Environment;
import android.os.Environment;
import android.os.Handler;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.UserHandle;
import android.os.UserHandle;
import android.power.PowerStatsInternal;
import android.power.PowerStatsInternal;
import android.util.Slog;
import android.util.Slog;
@@ -79,6 +80,9 @@ public class PowerStatsService extends SystemService {
    private StatsPullAtomCallbackImpl mPullAtomCallback;
    private StatsPullAtomCallbackImpl mPullAtomCallback;
    @Nullable
    @Nullable
    private PowerStatsInternal mPowerStatsInternal;
    private PowerStatsInternal mPowerStatsInternal;
    @Nullable
    @GuardedBy("this")
    private Looper mLooper;


    @VisibleForTesting
    @VisibleForTesting
    static class Injector {
    static class Injector {
@@ -127,12 +131,12 @@ public class PowerStatsService extends SystemService {
            }
            }
        }
        }


        PowerStatsLogger createPowerStatsLogger(Context context, File dataStoragePath,
        PowerStatsLogger createPowerStatsLogger(Context context, Looper looper,
                String meterFilename, String meterCacheFilename,
                File dataStoragePath, String meterFilename, String meterCacheFilename,
                String modelFilename, String modelCacheFilename,
                String modelFilename, String modelCacheFilename,
                String residencyFilename, String residencyCacheFilename,
                String residencyFilename, String residencyCacheFilename,
                IPowerStatsHALWrapper powerStatsHALWrapper) {
                IPowerStatsHALWrapper powerStatsHALWrapper) {
            return new PowerStatsLogger(context, dataStoragePath,
            return new PowerStatsLogger(context, looper, dataStoragePath,
                meterFilename, meterCacheFilename,
                meterFilename, meterCacheFilename,
                modelFilename, modelCacheFilename,
                modelFilename, modelCacheFilename,
                residencyFilename, residencyCacheFilename,
                residencyFilename, residencyCacheFilename,
@@ -229,11 +233,11 @@ public class PowerStatsService extends SystemService {
            mDataStoragePath = mInjector.createDataStoragePath();
            mDataStoragePath = mInjector.createDataStoragePath();


            // Only start logger and triggers if initialization is successful.
            // Only start logger and triggers if initialization is successful.
            mPowerStatsLogger = mInjector.createPowerStatsLogger(mContext, mDataStoragePath,
            mPowerStatsLogger = mInjector.createPowerStatsLogger(mContext, getLooper(),
                mInjector.createMeterFilename(), mInjector.createMeterCacheFilename(),
                    mDataStoragePath, mInjector.createMeterFilename(),
                mInjector.createModelFilename(), mInjector.createModelCacheFilename(),
                    mInjector.createMeterCacheFilename(), mInjector.createModelFilename(),
                mInjector.createResidencyFilename(), mInjector.createResidencyCacheFilename(),
                    mInjector.createModelCacheFilename(), mInjector.createResidencyFilename(),
                getPowerStatsHal());
                    mInjector.createResidencyCacheFilename(), getPowerStatsHal());
            mBatteryTrigger = mInjector.createBatteryTrigger(mContext, mPowerStatsLogger);
            mBatteryTrigger = mInjector.createBatteryTrigger(mContext, mPowerStatsLogger);
            mTimerTrigger = mInjector.createTimerTrigger(mContext, mPowerStatsLogger);
            mTimerTrigger = mInjector.createTimerTrigger(mContext, mPowerStatsLogger);
        } else {
        } else {
@@ -245,6 +249,17 @@ public class PowerStatsService extends SystemService {
        return mInjector.getPowerStatsHALWrapperImpl();
        return mInjector.getPowerStatsHALWrapperImpl();
    }
    }


    private Looper getLooper() {
        synchronized (this) {
            if (mLooper == null) {
                HandlerThread thread = new HandlerThread(TAG);
                thread.start();
                return thread.getLooper();
            }
            return mLooper;
        }
    }

    public PowerStatsService(Context context) {
    public PowerStatsService(Context context) {
        this(context, new Injector());
        this(context, new Injector());
    }
    }
@@ -260,9 +275,7 @@ public class PowerStatsService extends SystemService {
        private final Handler mHandler;
        private final Handler mHandler;


        LocalService() {
        LocalService() {
            HandlerThread thread = new HandlerThread(TAG);
            mHandler = new Handler(getLooper());
            thread.start();
            mHandler = new Handler(thread.getLooper());
        }
        }




+4 −3
Original line number Original line Diff line number Diff line
@@ -30,6 +30,7 @@ import android.hardware.power.stats.PowerEntity;
import android.hardware.power.stats.State;
import android.hardware.power.stats.State;
import android.hardware.power.stats.StateResidency;
import android.hardware.power.stats.StateResidency;
import android.hardware.power.stats.StateResidencyResult;
import android.hardware.power.stats.StateResidencyResult;
import android.os.Looper;


import androidx.test.InstrumentationRegistry;
import androidx.test.InstrumentationRegistry;


@@ -145,12 +146,12 @@ public class PowerStatsServiceTest {
        }
        }


        @Override
        @Override
        PowerStatsLogger createPowerStatsLogger(Context context, File dataStoragePath,
        PowerStatsLogger createPowerStatsLogger(Context context, Looper looper,
                String meterFilename, String meterCacheFilename,
                File dataStoragePath, String meterFilename, String meterCacheFilename,
                String modelFilename, String modelCacheFilename,
                String modelFilename, String modelCacheFilename,
                String residencyFilename, String residencyCacheFilename,
                String residencyFilename, String residencyCacheFilename,
                IPowerStatsHALWrapper powerStatsHALWrapper) {
                IPowerStatsHALWrapper powerStatsHALWrapper) {
            mPowerStatsLogger = new PowerStatsLogger(context, dataStoragePath,
            mPowerStatsLogger = new PowerStatsLogger(context, looper, dataStoragePath,
                meterFilename, meterCacheFilename,
                meterFilename, meterCacheFilename,
                modelFilename, modelCacheFilename,
                modelFilename, modelCacheFilename,
                residencyFilename, residencyCacheFilename,
                residencyFilename, residencyCacheFilename,