Merge "Move PowerStatsLogger off of the main thread." am: 19041e21ab
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1937410 Change-Id: I06c9b645bc718d3a270c6df24bb33aa1953aeb01
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user