Add BatteryUsageStatsQuery parameters: time range am: c24fb81627

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

Change-Id: I8c31a2ced556edda35c10d1a61c882a762daa4a7
This commit is contained in:
Dmitri Plotnikov
2021-06-17 17:31:20 +00:00
committed by Automerger Merge Worker
5 changed files with 171 additions and 2 deletions

View File

@@ -10749,6 +10749,10 @@ public class BatteryStatsImpl extends BatteryStats {
}
}
PowerProfile getPowerProfile() {
return mPowerProfile;
}
/**
* Starts tracking CPU time-in-state for threads of the system server process,
* keeping a separate account of threads receiving incoming binder calls.

View File

@@ -38,14 +38,24 @@ import java.util.Map;
public class BatteryUsageStatsProvider {
private final Context mContext;
private final BatteryStats mStats;
private final BatteryUsageStatsStore mBatteryUsageStatsStore;
private final PowerProfile mPowerProfile;
private final Object mLock = new Object();
private List<PowerCalculator> mPowerCalculators;
public BatteryUsageStatsProvider(Context context, BatteryStats stats) {
this(context, stats, null);
}
@VisibleForTesting
public BatteryUsageStatsProvider(Context context, BatteryStats stats,
BatteryUsageStatsStore batteryUsageStatsStore) {
mContext = context;
mStats = stats;
mPowerProfile = new PowerProfile(mContext);
mBatteryUsageStatsStore = batteryUsageStatsStore;
mPowerProfile = stats instanceof BatteryStatsImpl
? ((BatteryStatsImpl) stats).getPowerProfile()
: new PowerProfile(context);
}
private List<PowerCalculator> getPowerCalculators() {
@@ -126,6 +136,15 @@ public class BatteryUsageStatsProvider {
private BatteryUsageStats getBatteryUsageStats(BatteryUsageStatsQuery query,
long currentTimeMs) {
if (query.getToTimestamp() == 0) {
return getCurrentBatteryUsageStats(query, currentTimeMs);
} else {
return getAggregatedBatteryUsageStats(query);
}
}
private BatteryUsageStats getCurrentBatteryUsageStats(BatteryUsageStatsQuery query,
long currentTimeMs) {
final long realtimeUs = elapsedRealtime() * 1000;
final long uptimeUs = uptimeMillis() * 1000;
@@ -209,6 +228,25 @@ public class BatteryUsageStatsProvider {
BatteryStats.STATS_SINCE_CHARGED) / 1000;
}
private BatteryUsageStats getAggregatedBatteryUsageStats(BatteryUsageStatsQuery query) {
final boolean includePowerModels = (query.getFlags()
& BatteryUsageStatsQuery.FLAG_BATTERY_USAGE_STATS_INCLUDE_POWER_MODELS) != 0;
final BatteryUsageStats.Builder builder = new BatteryUsageStats.Builder(
mStats.getCustomEnergyConsumerNames(), includePowerModels);
final long[] timestamps = mBatteryUsageStatsStore.listBatteryUsageStatsTimestamps();
for (long timestamp : timestamps) {
if (timestamp > query.getFromTimestamp() && timestamp <= query.getToTimestamp()) {
final BatteryUsageStats snapshot =
mBatteryUsageStatsStore.loadBatteryUsageStats(timestamp);
if (snapshot != null) {
builder.add(snapshot);
}
}
}
return builder.build();
}
private long elapsedRealtime() {
if (mStats instanceof BatteryStatsImpl) {
return ((BatteryStatsImpl) mStats).mClocks.elapsedRealtime();