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

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

Change-Id: I3c82eeeb423ddffb91db6f9a53e2b672ebffc475
This commit is contained in:
Treehugger Robot
2022-01-12 11:39:27 +00:00
committed by Automerger Merge Worker
3 changed files with 30 additions and 17 deletions

View File

@@ -35,7 +35,6 @@ import android.util.proto.ProtoInputStream;
import android.util.proto.ProtoOutputStream;
import com.android.internal.annotations.VisibleForTesting;
import com.android.server.powerstats.PowerStatsHALWrapper.IPowerStatsHALWrapper;
import com.android.server.powerstats.ProtoStreamUtils.ChannelUtils;
import com.android.server.powerstats.ProtoStreamUtils.EnergyConsumerResultUtils;
@@ -313,12 +312,12 @@ public final class PowerStatsLogger extends Handler {
return mStartWallTime;
}
public PowerStatsLogger(Context context, File dataStoragePath,
public PowerStatsLogger(Context context, Looper looper, File dataStoragePath,
String meterFilename, String meterCacheFilename,
String modelFilename, String modelCacheFilename,
String residencyFilename, String residencyCacheFilename,
IPowerStatsHALWrapper powerStatsHALWrapper) {
super(Looper.getMainLooper());
super(looper);
mStartWallTime = currentTimeMillis() - SystemClock.elapsedRealtime();
if (DEBUG) Slog.d(TAG, "mStartWallTime: " + mStartWallTime);
mPowerStatsHALWrapper = powerStatsHALWrapper;

View File

@@ -28,6 +28,7 @@ import android.os.Binder;
import android.os.Environment;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.UserHandle;
import android.power.PowerStatsInternal;
import android.util.Slog;
@@ -79,6 +80,9 @@ public class PowerStatsService extends SystemService {
private StatsPullAtomCallbackImpl mPullAtomCallback;
@Nullable
private PowerStatsInternal mPowerStatsInternal;
@Nullable
@GuardedBy("this")
private Looper mLooper;
@VisibleForTesting
static class Injector {
@@ -127,12 +131,12 @@ public class PowerStatsService extends SystemService {
}
}
PowerStatsLogger createPowerStatsLogger(Context context, File dataStoragePath,
String meterFilename, String meterCacheFilename,
PowerStatsLogger createPowerStatsLogger(Context context, Looper looper,
File dataStoragePath, String meterFilename, String meterCacheFilename,
String modelFilename, String modelCacheFilename,
String residencyFilename, String residencyCacheFilename,
IPowerStatsHALWrapper powerStatsHALWrapper) {
return new PowerStatsLogger(context, dataStoragePath,
return new PowerStatsLogger(context, looper, dataStoragePath,
meterFilename, meterCacheFilename,
modelFilename, modelCacheFilename,
residencyFilename, residencyCacheFilename,
@@ -229,11 +233,11 @@ public class PowerStatsService extends SystemService {
mDataStoragePath = mInjector.createDataStoragePath();
// Only start logger and triggers if initialization is successful.
mPowerStatsLogger = mInjector.createPowerStatsLogger(mContext, mDataStoragePath,
mInjector.createMeterFilename(), mInjector.createMeterCacheFilename(),
mInjector.createModelFilename(), mInjector.createModelCacheFilename(),
mInjector.createResidencyFilename(), mInjector.createResidencyCacheFilename(),
getPowerStatsHal());
mPowerStatsLogger = mInjector.createPowerStatsLogger(mContext, getLooper(),
mDataStoragePath, mInjector.createMeterFilename(),
mInjector.createMeterCacheFilename(), mInjector.createModelFilename(),
mInjector.createModelCacheFilename(), mInjector.createResidencyFilename(),
mInjector.createResidencyCacheFilename(), getPowerStatsHal());
mBatteryTrigger = mInjector.createBatteryTrigger(mContext, mPowerStatsLogger);
mTimerTrigger = mInjector.createTimerTrigger(mContext, mPowerStatsLogger);
} else {
@@ -245,6 +249,17 @@ public class PowerStatsService extends SystemService {
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) {
this(context, new Injector());
}
@@ -260,9 +275,7 @@ public class PowerStatsService extends SystemService {
private final Handler mHandler;
LocalService() {
HandlerThread thread = new HandlerThread(TAG);
thread.start();
mHandler = new Handler(thread.getLooper());
mHandler = new Handler(getLooper());
}

View File

@@ -30,6 +30,7 @@ import android.hardware.power.stats.PowerEntity;
import android.hardware.power.stats.State;
import android.hardware.power.stats.StateResidency;
import android.hardware.power.stats.StateResidencyResult;
import android.os.Looper;
import androidx.test.InstrumentationRegistry;
@@ -145,12 +146,12 @@ public class PowerStatsServiceTest {
}
@Override
PowerStatsLogger createPowerStatsLogger(Context context, File dataStoragePath,
String meterFilename, String meterCacheFilename,
PowerStatsLogger createPowerStatsLogger(Context context, Looper looper,
File dataStoragePath, String meterFilename, String meterCacheFilename,
String modelFilename, String modelCacheFilename,
String residencyFilename, String residencyCacheFilename,
IPowerStatsHALWrapper powerStatsHALWrapper) {
mPowerStatsLogger = new PowerStatsLogger(context, dataStoragePath,
mPowerStatsLogger = new PowerStatsLogger(context, looper, dataStoragePath,
meterFilename, meterCacheFilename,
modelFilename, modelCacheFilename,
residencyFilename, residencyCacheFilename,