Add UID time-in-state to UidBatteryConsumer
Bug: 158137862 Test: atest FrameworksCoreTests:com.android.internal.os.BatteryUsageStatsProviderTest Test: atest FrameworksCoreTests:com.android.internal.os.BatteryUsageStatsTest Change-Id: I8fde2f754deaa0d2c4ebb06b9a2c99d60086bc23
This commit is contained in:
@@ -22,10 +22,12 @@ import android.os.BatteryStats;
|
||||
import android.os.BatteryUsageStats;
|
||||
import android.os.BatteryUsageStatsQuery;
|
||||
import android.os.Bundle;
|
||||
import android.os.SystemClock;
|
||||
import android.os.UidBatteryConsumer;
|
||||
import android.os.UserHandle;
|
||||
import android.util.SparseArray;
|
||||
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -85,7 +87,7 @@ public class BatteryUsageStatsProvider {
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a snapshot of battery attribution data.
|
||||
* Returns snapshots of battery attribution data, one per supplied query.
|
||||
*/
|
||||
public List<BatteryUsageStats> getBatteryUsageStats(List<BatteryUsageStatsQuery> queries) {
|
||||
|
||||
@@ -112,12 +114,19 @@ public class BatteryUsageStatsProvider {
|
||||
return results;
|
||||
}
|
||||
|
||||
private BatteryUsageStats getBatteryUsageStats(BatteryUsageStatsQuery query) {
|
||||
/**
|
||||
* Returns a snapshot of battery attribution data.
|
||||
*/
|
||||
@VisibleForTesting
|
||||
public BatteryUsageStats getBatteryUsageStats(BatteryUsageStatsQuery query) {
|
||||
final long realtimeUs = mStats.mClocks.elapsedRealtime() * 1000;
|
||||
final long uptimeUs = mStats.mClocks.uptimeMillis() * 1000;
|
||||
|
||||
final long[] customMeasuredEnergiesMicroJoules =
|
||||
mStats.getCustomMeasuredEnergiesMicroJoules();
|
||||
final int customPowerComponentCount = customMeasuredEnergiesMicroJoules != null
|
||||
? customMeasuredEnergiesMicroJoules.length
|
||||
: 0;
|
||||
? customMeasuredEnergiesMicroJoules.length
|
||||
: 0;
|
||||
|
||||
// TODO(b/174186358): read extra time component number from configuration
|
||||
final int customTimeComponentCount = 0;
|
||||
@@ -128,12 +137,14 @@ public class BatteryUsageStatsProvider {
|
||||
|
||||
SparseArray<? extends BatteryStats.Uid> uidStats = mStats.getUidStats();
|
||||
for (int i = uidStats.size() - 1; i >= 0; i--) {
|
||||
batteryUsageStatsBuilder.getOrCreateUidBatteryConsumerBuilder(uidStats.valueAt(i));
|
||||
final BatteryStats.Uid uid = uidStats.valueAt(i);
|
||||
batteryUsageStatsBuilder.getOrCreateUidBatteryConsumerBuilder(uid)
|
||||
.setTimeInStateMs(UidBatteryConsumer.STATE_BACKGROUND,
|
||||
getProcessBackgroundTimeMs(uid, realtimeUs))
|
||||
.setTimeInStateMs(UidBatteryConsumer.STATE_FOREGROUND,
|
||||
getProcessForegroundTimeMs(uid, realtimeUs));
|
||||
}
|
||||
|
||||
final long realtimeUs = SystemClock.elapsedRealtime() * 1000;
|
||||
final long uptimeUs = SystemClock.uptimeMillis() * 1000;
|
||||
|
||||
final List<PowerCalculator> powerCalculators = getPowerCalculators();
|
||||
for (int i = 0, count = powerCalculators.size(); i < count; i++) {
|
||||
PowerCalculator powerCalculator = powerCalculators.get(i);
|
||||
@@ -143,4 +154,35 @@ public class BatteryUsageStatsProvider {
|
||||
|
||||
return batteryUsageStatsBuilder.build();
|
||||
}
|
||||
|
||||
private long getProcessForegroundTimeMs(BatteryStats.Uid uid, long realtimeUs) {
|
||||
final long topStateDurationMs = uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_TOP,
|
||||
realtimeUs, BatteryStats.STATS_SINCE_CHARGED) / 1000;
|
||||
|
||||
long foregroundActivityDurationMs = 0;
|
||||
final BatteryStats.Timer foregroundActivityTimer = uid.getForegroundActivityTimer();
|
||||
if (foregroundActivityTimer != null) {
|
||||
foregroundActivityDurationMs = foregroundActivityTimer.getTotalTimeLocked(realtimeUs,
|
||||
BatteryStats.STATS_SINCE_CHARGED) / 1000;
|
||||
}
|
||||
|
||||
// Use the min value of STATE_TOP time and foreground activity time, since both of these
|
||||
// times are imprecise
|
||||
final long foregroundDurationMs = Math.min(topStateDurationMs,
|
||||
foregroundActivityDurationMs);
|
||||
|
||||
long foregroundServiceDurationMs = 0;
|
||||
final BatteryStats.Timer foregroundServiceTimer = uid.getForegroundServiceTimer();
|
||||
if (foregroundServiceTimer != null) {
|
||||
foregroundServiceDurationMs = foregroundServiceTimer.getTotalTimeLocked(realtimeUs,
|
||||
BatteryStats.STATS_SINCE_CHARGED) / 1000;
|
||||
}
|
||||
|
||||
return foregroundDurationMs + foregroundServiceDurationMs;
|
||||
}
|
||||
|
||||
private long getProcessBackgroundTimeMs(BatteryStats.Uid uid, long realtimeUs) {
|
||||
return uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_BACKGROUND, realtimeUs,
|
||||
BatteryStats.STATS_SINCE_CHARGED) / 1000;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user