Provide foreground_service usage time in BatteryDiffEntry.

- Fetch foreground service info through new api from UidBatteryConsumer.
- Record fgs & bg usage time separately, combine them till ui display.

Bug: 315255868
Test: make RunSettingsRoboTests ROBOTEST_FILTER="com.android.settings.fuelgauge.*"
Change-Id: Ic19844db7908a6ae6522c7a72972f44f94dcfca4
This commit is contained in:
mxyyiyi
2023-12-07 15:23:08 +08:00
parent dd2cc366a6
commit a919306d75
19 changed files with 345 additions and 158 deletions

View File

@@ -148,7 +148,8 @@ public class AdvancedPowerUsageDetail extends DashboardFragment
launchArgs.mShowTimeInformation = showTimeInformation; launchArgs.mShowTimeInformation = showTimeInformation;
if (launchArgs.mShowTimeInformation) { if (launchArgs.mShowTimeInformation) {
launchArgs.mForegroundTimeMs = diffEntry.mForegroundUsageTimeInMs; launchArgs.mForegroundTimeMs = diffEntry.mForegroundUsageTimeInMs;
launchArgs.mBackgroundTimeMs = diffEntry.mBackgroundUsageTimeInMs; launchArgs.mBackgroundTimeMs =
diffEntry.mBackgroundUsageTimeInMs + diffEntry.mForegroundServiceUsageTimeInMs;
launchArgs.mScreenOnTimeMs = diffEntry.mScreenOnTimeInMs; launchArgs.mScreenOnTimeMs = diffEntry.mScreenOnTimeInMs;
launchArgs.mAnomalyHintPrefKey = anomalyHintPrefKey; launchArgs.mAnomalyHintPrefKey = anomalyHintPrefKey;
launchArgs.mAnomalyHintText = anomalyHintText; launchArgs.mAnomalyHintText = anomalyHintText;

View File

@@ -92,6 +92,7 @@ public class BatteryDiffEntry {
public String mLegacyLabel; public String mLegacyLabel;
public int mConsumerType; public int mConsumerType;
public long mForegroundUsageTimeInMs; public long mForegroundUsageTimeInMs;
public long mForegroundServiceUsageTimeInMs;
public long mBackgroundUsageTimeInMs; public long mBackgroundUsageTimeInMs;
public long mScreenOnTimeInMs; public long mScreenOnTimeInMs;
public double mConsumePower; public double mConsumePower;
@@ -125,6 +126,7 @@ public class BatteryDiffEntry {
String legacyLabel, String legacyLabel,
int consumerType, int consumerType,
long foregroundUsageTimeInMs, long foregroundUsageTimeInMs,
long foregroundServiceUsageTimeInMs,
long backgroundUsageTimeInMs, long backgroundUsageTimeInMs,
long screenOnTimeInMs, long screenOnTimeInMs,
double consumePower, double consumePower,
@@ -142,6 +144,7 @@ public class BatteryDiffEntry {
mLegacyLabel = legacyLabel; mLegacyLabel = legacyLabel;
mConsumerType = consumerType; mConsumerType = consumerType;
mForegroundUsageTimeInMs = foregroundUsageTimeInMs; mForegroundUsageTimeInMs = foregroundUsageTimeInMs;
mForegroundServiceUsageTimeInMs = foregroundServiceUsageTimeInMs;
mBackgroundUsageTimeInMs = backgroundUsageTimeInMs; mBackgroundUsageTimeInMs = backgroundUsageTimeInMs;
mScreenOnTimeInMs = screenOnTimeInMs; mScreenOnTimeInMs = screenOnTimeInMs;
mConsumePower = consumePower; mConsumePower = consumePower;
@@ -164,6 +167,7 @@ public class BatteryDiffEntry {
legacyLabel, legacyLabel,
consumerType, consumerType,
/* foregroundUsageTimeInMs= */ 0, /* foregroundUsageTimeInMs= */ 0,
/* foregroundServiceUsageTimeInMs= */ 0,
/* backgroundUsageTimeInMs= */ 0, /* backgroundUsageTimeInMs= */ 0,
/* screenOnTimeInMs= */ 0, /* screenOnTimeInMs= */ 0,
/* consumePower= */ 0, /* consumePower= */ 0,
@@ -232,6 +236,7 @@ public class BatteryDiffEntry {
this.mLegacyLabel, this.mLegacyLabel,
this.mConsumerType, this.mConsumerType,
this.mForegroundUsageTimeInMs, this.mForegroundUsageTimeInMs,
this.mForegroundServiceUsageTimeInMs,
this.mBackgroundUsageTimeInMs, this.mBackgroundUsageTimeInMs,
this.mScreenOnTimeInMs, this.mScreenOnTimeInMs,
this.mConsumePower, this.mConsumePower,
@@ -515,48 +520,50 @@ public class BatteryDiffEntry {
@Override @Override
public String toString() { public String toString() {
final StringBuilder builder = final StringBuilder builder = new StringBuilder();
new StringBuilder() builder.append("BatteryDiffEntry{");
.append("BatteryDiffEntry{") builder.append(
.append( String.format("\n\tname=%s restrictable=%b", mAppLabel, mValidForRestriction));
String.format( builder.append(
"\n\tname=%s restrictable=%b", String.format(
mAppLabel, mValidForRestriction)) "\n\tconsume=%.2f%% %f/%f",
.append( mPercentage, mConsumePower, mTotalConsumePower));
String.format( builder.append(
"\n\tconsume=%.2f%% %f/%f", String.format(
mPercentage, mConsumePower, mTotalConsumePower)) "\n\tconsume power= foreground:%f foregroundService:%f",
.append( mForegroundUsageConsumePower, mForegroundServiceUsageConsumePower));
String.format( builder.append(
"\n\tconsume power= foreground:%f foregroundService:%f", String.format(
mForegroundUsageConsumePower, "\n\tconsume power= background:%f cached:%f",
mForegroundServiceUsageConsumePower)) mBackgroundUsageConsumePower, mCachedUsageConsumePower));
.append( builder.append(
String.format( String.format(
"\n\tconsume power= background:%f cached:%f", "\n\ttime= foreground:%s foregroundService:%s "
mBackgroundUsageConsumePower, mCachedUsageConsumePower)) + "background:%s screen-on:%s",
.append( StringUtil.formatElapsedTime(
String.format( mContext,
"\n\ttime= foreground:%s background:%s screen-on:%s", (double) mForegroundUsageTimeInMs,
StringUtil.formatElapsedTime( /* withSeconds= */ true,
mContext, /* collapseTimeUnit= */ false),
(double) mForegroundUsageTimeInMs, StringUtil.formatElapsedTime(
/* withSeconds= */ true, mContext,
/* collapseTimeUnit= */ false), (double) mForegroundServiceUsageTimeInMs,
StringUtil.formatElapsedTime( /* withSeconds= */ true,
mContext, /* collapseTimeUnit= */ false),
(double) mBackgroundUsageTimeInMs, StringUtil.formatElapsedTime(
/* withSeconds= */ true, mContext,
/* collapseTimeUnit= */ false), (double) mBackgroundUsageTimeInMs,
StringUtil.formatElapsedTime( /* withSeconds= */ true,
mContext, /* collapseTimeUnit= */ false),
(double) mScreenOnTimeInMs, StringUtil.formatElapsedTime(
/* withSeconds= */ true, mContext,
/* collapseTimeUnit= */ false))) (double) mScreenOnTimeInMs,
.append( /* withSeconds= */ true,
String.format( /* collapseTimeUnit= */ false)));
"\n\tpackage:%s|%s uid:%d userId:%d", builder.append(
mLegacyPackageName, getPackageName(), mUid, mUserId)); String.format(
"\n\tpackage:%s|%s uid:%d userId:%d",
mLegacyPackageName, getPackageName(), mUid, mUserId));
return builder.toString(); return builder.toString();
} }

View File

@@ -111,6 +111,7 @@ public class BatteryEntry {
@BatteryConsumer.PowerComponent private final int mPowerComponentId; @BatteryConsumer.PowerComponent private final int mPowerComponentId;
private long mUsageDurationMs; private long mUsageDurationMs;
private long mTimeInForegroundMs; private long mTimeInForegroundMs;
private long mTimeInForegroundServiceMs;
private long mTimeInBackgroundMs; private long mTimeInBackgroundMs;
public String mName; public String mName;
@@ -188,9 +189,14 @@ public class BatteryEntry {
} }
} }
mTimeInForegroundMs = mTimeInForegroundMs =
uidBatteryConsumer.getTimeInStateMs(UidBatteryConsumer.STATE_FOREGROUND); uidBatteryConsumer.getTimeInProcessStateMs(
UidBatteryConsumer.PROCESS_STATE_FOREGROUND);
mTimeInForegroundServiceMs =
uidBatteryConsumer.getTimeInProcessStateMs(
UidBatteryConsumer.PROCESS_STATE_FOREGROUND_SERVICE);
mTimeInBackgroundMs = mTimeInBackgroundMs =
uidBatteryConsumer.getTimeInStateMs(UidBatteryConsumer.STATE_BACKGROUND); uidBatteryConsumer.getTimeInProcessStateMs(
UidBatteryConsumer.PROCESS_STATE_BACKGROUND);
mConsumedPowerInForeground = mConsumedPowerInForeground =
safeGetConsumedPower( safeGetConsumedPower(
uidBatteryConsumer, BATTERY_DIMENSIONS[BATTERY_USAGE_INDEX_FOREGROUND]); uidBatteryConsumer, BATTERY_DIMENSIONS[BATTERY_USAGE_INDEX_FOREGROUND]);
@@ -433,20 +439,19 @@ public class BatteryEntry {
/** Returns foreground time/ms that is attributed to this entry. */ /** Returns foreground time/ms that is attributed to this entry. */
public long getTimeInForegroundMs() { public long getTimeInForegroundMs() {
if (mBatteryConsumer instanceof UidBatteryConsumer) { return (mBatteryConsumer instanceof UidBatteryConsumer)
return mTimeInForegroundMs; ? mTimeInForegroundMs
} else { : mUsageDurationMs;
return mUsageDurationMs; }
}
/** Returns foreground service time/ms that is attributed to this entry. */
public long getTimeInForegroundServiceMs() {
return (mBatteryConsumer instanceof UidBatteryConsumer) ? mTimeInForegroundServiceMs : 0;
} }
/** Returns background activity time/ms that is attributed to this entry. */ /** Returns background activity time/ms that is attributed to this entry. */
public long getTimeInBackgroundMs() { public long getTimeInBackgroundMs() {
if (mBatteryConsumer instanceof UidBatteryConsumer) { return (mBatteryConsumer instanceof UidBatteryConsumer) ? mTimeInBackgroundMs : 0;
return mTimeInBackgroundMs;
} else {
return 0;
}
} }
/** Returns total amount of power (in milli-amp-hours) that is attributed to this entry. */ /** Returns total amount of power (in milli-amp-hours) that is attributed to this entry. */
@@ -510,9 +515,14 @@ public class BatteryEntry {
if (batteryConsumer instanceof UidBatteryConsumer) { if (batteryConsumer instanceof UidBatteryConsumer) {
UidBatteryConsumer uidBatteryConsumer = (UidBatteryConsumer) batteryConsumer; UidBatteryConsumer uidBatteryConsumer = (UidBatteryConsumer) batteryConsumer;
mTimeInForegroundMs += mTimeInForegroundMs +=
uidBatteryConsumer.getTimeInStateMs(UidBatteryConsumer.STATE_FOREGROUND); uidBatteryConsumer.getTimeInProcessStateMs(
UidBatteryConsumer.PROCESS_STATE_FOREGROUND);
mTimeInForegroundServiceMs +=
uidBatteryConsumer.getTimeInProcessStateMs(
UidBatteryConsumer.PROCESS_STATE_FOREGROUND_SERVICE);
mTimeInBackgroundMs += mTimeInBackgroundMs +=
uidBatteryConsumer.getTimeInStateMs(UidBatteryConsumer.STATE_BACKGROUND); uidBatteryConsumer.getTimeInProcessStateMs(
UidBatteryConsumer.PROCESS_STATE_BACKGROUND);
mConsumedPowerInForeground += mConsumedPowerInForeground +=
safeGetConsumedPower( safeGetConsumedPower(
uidBatteryConsumer, BATTERY_DIMENSIONS[BATTERY_USAGE_INDEX_FOREGROUND]); uidBatteryConsumer, BATTERY_DIMENSIONS[BATTERY_USAGE_INDEX_FOREGROUND]);

View File

@@ -20,8 +20,6 @@ import android.database.Cursor;
import android.os.BatteryConsumer; import android.os.BatteryConsumer;
import android.util.Log; import android.util.Log;
import java.time.Duration;
/** A container class to carry data from {@link ContentValues}. */ /** A container class to carry data from {@link ContentValues}. */
public class BatteryHistEntry { public class BatteryHistEntry {
private static final boolean DEBUG = false; private static final boolean DEBUG = false;
@@ -57,6 +55,7 @@ public class BatteryHistEntry {
public final double mCachedUsageConsumePower; public final double mCachedUsageConsumePower;
public final double mPercentOfTotal; public final double mPercentOfTotal;
public final long mForegroundUsageTimeInMs; public final long mForegroundUsageTimeInMs;
public final long mForegroundServiceUsageTimeInMs;
public final long mBackgroundUsageTimeInMs; public final long mBackgroundUsageTimeInMs;
@BatteryConsumer.PowerComponent public final int mDrainType; @BatteryConsumer.PowerComponent public final int mDrainType;
@ConvertUtils.ConsumerType public final int mConsumerType; @ConvertUtils.ConsumerType public final int mConsumerType;
@@ -89,6 +88,7 @@ public class BatteryHistEntry {
mCachedUsageConsumePower = batteryInformation.getCachedUsageConsumePower(); mCachedUsageConsumePower = batteryInformation.getCachedUsageConsumePower();
mPercentOfTotal = batteryInformation.getPercentOfTotal(); mPercentOfTotal = batteryInformation.getPercentOfTotal();
mForegroundUsageTimeInMs = batteryInformation.getForegroundUsageTimeInMs(); mForegroundUsageTimeInMs = batteryInformation.getForegroundUsageTimeInMs();
mForegroundServiceUsageTimeInMs = batteryInformation.getForegroundServiceUsageTimeInMs();
mBackgroundUsageTimeInMs = batteryInformation.getBackgroundUsageTimeInMs(); mBackgroundUsageTimeInMs = batteryInformation.getBackgroundUsageTimeInMs();
mDrainType = batteryInformation.getDrainType(); mDrainType = batteryInformation.getDrainType();
final DeviceBatteryState deviceBatteryState = batteryInformation.getDeviceBatteryState(); final DeviceBatteryState deviceBatteryState = batteryInformation.getDeviceBatteryState();
@@ -118,6 +118,7 @@ public class BatteryHistEntry {
mCachedUsageConsumePower = batteryInformation.getCachedUsageConsumePower(); mCachedUsageConsumePower = batteryInformation.getCachedUsageConsumePower();
mPercentOfTotal = batteryInformation.getPercentOfTotal(); mPercentOfTotal = batteryInformation.getPercentOfTotal();
mForegroundUsageTimeInMs = batteryInformation.getForegroundUsageTimeInMs(); mForegroundUsageTimeInMs = batteryInformation.getForegroundUsageTimeInMs();
mForegroundServiceUsageTimeInMs = batteryInformation.getForegroundServiceUsageTimeInMs();
mBackgroundUsageTimeInMs = batteryInformation.getBackgroundUsageTimeInMs(); mBackgroundUsageTimeInMs = batteryInformation.getBackgroundUsageTimeInMs();
mDrainType = batteryInformation.getDrainType(); mDrainType = batteryInformation.getDrainType();
final DeviceBatteryState deviceBatteryState = batteryInformation.getDeviceBatteryState(); final DeviceBatteryState deviceBatteryState = batteryInformation.getDeviceBatteryState();
@@ -137,6 +138,7 @@ public class BatteryHistEntry {
double backgroundUsageConsumePower, double backgroundUsageConsumePower,
double cachedUsageConsumePower, double cachedUsageConsumePower,
long foregroundUsageTimeInMs, long foregroundUsageTimeInMs,
long foregroundServiceUsageTimeInMs,
long backgroundUsageTimeInMs, long backgroundUsageTimeInMs,
int batteryLevel) { int batteryLevel) {
mUid = fromEntry.mUid; mUid = fromEntry.mUid;
@@ -155,6 +157,7 @@ public class BatteryHistEntry {
mCachedUsageConsumePower = cachedUsageConsumePower; mCachedUsageConsumePower = cachedUsageConsumePower;
mPercentOfTotal = fromEntry.mPercentOfTotal; mPercentOfTotal = fromEntry.mPercentOfTotal;
mForegroundUsageTimeInMs = foregroundUsageTimeInMs; mForegroundUsageTimeInMs = foregroundUsageTimeInMs;
mForegroundServiceUsageTimeInMs = foregroundServiceUsageTimeInMs;
mBackgroundUsageTimeInMs = backgroundUsageTimeInMs; mBackgroundUsageTimeInMs = backgroundUsageTimeInMs;
mDrainType = fromEntry.mDrainType; mDrainType = fromEntry.mDrainType;
mConsumerType = fromEntry.mConsumerType; mConsumerType = fromEntry.mConsumerType;
@@ -189,45 +192,40 @@ public class BatteryHistEntry {
@Override @Override
public String toString() { public String toString() {
final String recordAtDateTime = ConvertUtils.utcToLocalTimeForLogging(mTimestamp); final String recordAtDateTime = ConvertUtils.utcToLocalTimeForLogging(mTimestamp);
final StringBuilder builder = final StringBuilder builder = new StringBuilder();
new StringBuilder() builder.append("\nBatteryHistEntry{");
.append("\nBatteryHistEntry{") builder.append(
.append( String.format(
String.format( "\n\tpackage=%s|label=%s|uid=%d|userId=%d|isHidden=%b",
"\n\tpackage=%s|label=%s|uid=%d|userId=%d|isHidden=%b", mPackageName, mAppLabel, mUid, mUserId, mIsHidden));
mPackageName, mAppLabel, mUid, mUserId, mIsHidden)) builder.append(
.append( String.format(
String.format( "\n\ttimestamp=%s|zoneId=%s|bootTimestamp=%d",
"\n\ttimestamp=%s|zoneId=%s|bootTimestamp=%d", recordAtDateTime, mZoneId, TimestampUtils.getSeconds(mBootTimestamp)));
recordAtDateTime, builder.append(
mZoneId, String.format(
Duration.ofMillis(mBootTimestamp).getSeconds())) "\n\tusage=%f|total=%f|consume=%f",
.append( mPercentOfTotal, mTotalPower, mConsumePower));
String.format( builder.append(
"\n\tusage=%f|total=%f|consume=%f", String.format(
mPercentOfTotal, mTotalPower, mConsumePower)) "\n\tforeground=%f|foregroundService=%f",
.append( mForegroundUsageConsumePower, mForegroundServiceUsageConsumePower));
String.format( builder.append(
"\n\tforeground=%f|foregroundService=%f", String.format(
mForegroundUsageConsumePower, "\n\tbackground=%f|cached=%f",
mForegroundServiceUsageConsumePower)) mBackgroundUsageConsumePower, mCachedUsageConsumePower));
.append( builder.append(
String.format( String.format(
"\n\tbackground=%f|cached=%f", "\n\telapsedTime,fg=%d|fgs=%d|bg=%d",
mBackgroundUsageConsumePower, mCachedUsageConsumePower)) TimestampUtils.getSeconds(mBackgroundUsageTimeInMs),
.append( TimestampUtils.getSeconds(mForegroundServiceUsageTimeInMs),
String.format( TimestampUtils.getSeconds(mBackgroundUsageTimeInMs)));
"\n\telapsedTime=%d|%d", builder.append(
Duration.ofMillis(mForegroundUsageTimeInMs).getSeconds(), String.format("\n\tdrainType=%d|consumerType=%d", mDrainType, mConsumerType));
Duration.ofMillis(mBackgroundUsageTimeInMs).getSeconds())) builder.append(
.append( String.format(
String.format( "\n\tbattery=%d|status=%d|health=%d\n}",
"\n\tdrainType=%d|consumerType=%d", mBatteryLevel, mBatteryStatus, mBatteryHealth));
mDrainType, mConsumerType))
.append(
String.format(
"\n\tbattery=%d|status=%d|health=%d\n}",
mBatteryLevel, mBatteryStatus, mBatteryHealth));
return builder.toString(); return builder.toString();
} }
@@ -323,19 +321,20 @@ public class BatteryHistEntry {
ratio); ratio);
final double foregroundUsageTimeInMs = final double foregroundUsageTimeInMs =
interpolate( interpolate(
(double) (lowerHistEntry == null ? 0 : lowerHistEntry.mForegroundUsageTimeInMs),
(lowerHistEntry == null upperHistEntry.mForegroundUsageTimeInMs,
? 0 ratio);
: lowerHistEntry.mForegroundUsageTimeInMs), final double foregroundServiceUsageTimeInMs =
(double) upperHistEntry.mForegroundUsageTimeInMs, interpolate(
(lowerHistEntry == null
? 0
: lowerHistEntry.mForegroundServiceUsageTimeInMs),
upperHistEntry.mForegroundServiceUsageTimeInMs,
ratio); ratio);
final double backgroundUsageTimeInMs = final double backgroundUsageTimeInMs =
interpolate( interpolate(
(double) (lowerHistEntry == null ? 0 : lowerHistEntry.mBackgroundUsageTimeInMs),
(lowerHistEntry == null upperHistEntry.mBackgroundUsageTimeInMs,
? 0
: lowerHistEntry.mBackgroundUsageTimeInMs),
(double) upperHistEntry.mBackgroundUsageTimeInMs,
ratio); ratio);
// Checks whether there is any abnormal cases! // Checks whether there is any abnormal cases!
if (upperHistEntry.mConsumePower < consumePower if (upperHistEntry.mConsumePower < consumePower
@@ -345,6 +344,7 @@ public class BatteryHistEntry {
|| upperHistEntry.mBackgroundUsageConsumePower < backgroundUsageConsumePower || upperHistEntry.mBackgroundUsageConsumePower < backgroundUsageConsumePower
|| upperHistEntry.mCachedUsageConsumePower < cachedUsageConsumePower || upperHistEntry.mCachedUsageConsumePower < cachedUsageConsumePower
|| upperHistEntry.mForegroundUsageTimeInMs < foregroundUsageTimeInMs || upperHistEntry.mForegroundUsageTimeInMs < foregroundUsageTimeInMs
|| upperHistEntry.mForegroundServiceUsageTimeInMs < foregroundServiceUsageTimeInMs
|| upperHistEntry.mBackgroundUsageTimeInMs < backgroundUsageTimeInMs) { || upperHistEntry.mBackgroundUsageTimeInMs < backgroundUsageTimeInMs) {
if (DEBUG) { if (DEBUG) {
Log.w( Log.w(
@@ -371,6 +371,7 @@ public class BatteryHistEntry {
backgroundUsageConsumePower, backgroundUsageConsumePower,
cachedUsageConsumePower, cachedUsageConsumePower,
Math.round(foregroundUsageTimeInMs), Math.round(foregroundUsageTimeInMs),
Math.round(foregroundServiceUsageTimeInMs),
Math.round(backgroundUsageTimeInMs), Math.round(backgroundUsageTimeInMs),
(int) Math.round(batteryLevel)); (int) Math.round(batteryLevel));
} }

View File

@@ -400,7 +400,7 @@ public class BatteryUsageBreakdownController extends BasePreferenceController
mPrefContext, mPrefContext,
entry.isSystemEntry(), entry.isSystemEntry(),
entry.mForegroundUsageTimeInMs, entry.mForegroundUsageTimeInMs,
entry.mBackgroundUsageTimeInMs, entry.mBackgroundUsageTimeInMs + entry.mForegroundServiceUsageTimeInMs,
entry.mScreenOnTimeInMs)); entry.mScreenOnTimeInMs));
} }
} }

View File

@@ -544,6 +544,7 @@ public final class ConvertUtils {
batteryUsageDiff.getLabel(), batteryUsageDiff.getLabel(),
batteryUsageDiff.getConsumerType(), batteryUsageDiff.getConsumerType(),
batteryUsageDiff.getForegroundUsageTime(), batteryUsageDiff.getForegroundUsageTime(),
batteryUsageDiff.getForegroundServiceUsageTime(),
batteryUsageDiff.getBackgroundUsageTime(), batteryUsageDiff.getBackgroundUsageTime(),
batteryUsageDiff.getScreenOnTime(), batteryUsageDiff.getScreenOnTime(),
batteryUsageDiff.getConsumePower(), batteryUsageDiff.getConsumePower(),
@@ -612,6 +613,7 @@ public final class ConvertUtils {
.setPercentOfTotal(entry.mPercent) .setPercentOfTotal(entry.mPercent)
.setDrainType(entry.getPowerComponentId()) .setDrainType(entry.getPowerComponentId())
.setForegroundUsageTimeInMs(entry.getTimeInForegroundMs()) .setForegroundUsageTimeInMs(entry.getTimeInForegroundMs())
.setForegroundServiceUsageTimeInMs(entry.getTimeInForegroundServiceMs())
.setBackgroundUsageTimeInMs(entry.getTimeInBackgroundMs()); .setBackgroundUsageTimeInMs(entry.getTimeInBackgroundMs());
} }

View File

@@ -675,6 +675,7 @@ public final class DataProcessor {
entry.mAppLabel, entry.mAppLabel,
entry.mConsumerType, entry.mConsumerType,
entry.mForegroundUsageTimeInMs, entry.mForegroundUsageTimeInMs,
entry.mForegroundServiceUsageTimeInMs,
entry.mBackgroundUsageTimeInMs, entry.mBackgroundUsageTimeInMs,
/* screenOnTimeInMs= */ 0, /* screenOnTimeInMs= */ 0,
entry.mConsumePower, entry.mConsumePower,
@@ -1412,6 +1413,7 @@ public final class DataProcessor {
// Cumulative values is a specific time slot for a specific app. // Cumulative values is a specific time slot for a specific app.
long foregroundUsageTimeInMs = 0; long foregroundUsageTimeInMs = 0;
long foregroundServiceUsageTimeInMs = 0;
long backgroundUsageTimeInMs = 0; long backgroundUsageTimeInMs = 0;
double consumePower = 0; double consumePower = 0;
double foregroundUsageConsumePower = 0; double foregroundUsageConsumePower = 0;
@@ -1425,6 +1427,10 @@ public final class DataProcessor {
getDiffValue( getDiffValue(
currentEntry.mForegroundUsageTimeInMs, currentEntry.mForegroundUsageTimeInMs,
nextEntry.mForegroundUsageTimeInMs); nextEntry.mForegroundUsageTimeInMs);
foregroundServiceUsageTimeInMs +=
getDiffValue(
currentEntry.mForegroundServiceUsageTimeInMs,
nextEntry.mForegroundServiceUsageTimeInMs);
backgroundUsageTimeInMs += backgroundUsageTimeInMs +=
getDiffValue( getDiffValue(
currentEntry.mBackgroundUsageTimeInMs, currentEntry.mBackgroundUsageTimeInMs,
@@ -1453,24 +1459,32 @@ public final class DataProcessor {
foregroundUsageTimeInMs = slotScreenOnTime; foregroundUsageTimeInMs = slotScreenOnTime;
} }
// Excludes entry since we don't have enough data to calculate. // Excludes entry since we don't have enough data to calculate.
if (foregroundUsageTimeInMs == 0 && backgroundUsageTimeInMs == 0 && consumePower == 0) { if (foregroundUsageTimeInMs == 0
&& foregroundServiceUsageTimeInMs == 0
&& backgroundUsageTimeInMs == 0
&& consumePower == 0) {
continue; continue;
} }
// Forces refine the cumulative value since it may introduce deviation error since we // Forces refine the cumulative value since it may introduce deviation error since we
// will apply the interpolation arithmetic. // will apply the interpolation arithmetic.
final float totalUsageTimeInMs = foregroundUsageTimeInMs + backgroundUsageTimeInMs; final float totalUsageTimeInMs =
foregroundUsageTimeInMs
+ backgroundUsageTimeInMs
+ foregroundServiceUsageTimeInMs;
if (totalUsageTimeInMs > slotDuration) { if (totalUsageTimeInMs > slotDuration) {
final float ratio = slotDuration / totalUsageTimeInMs; final float ratio = slotDuration / totalUsageTimeInMs;
if (sDebug) { if (sDebug) {
Log.w( Log.w(
TAG, TAG,
String.format( String.format(
"abnormal usage time %d|%d for:\n%s", "abnormal usage time %d|%d|%d for:\n%s",
Duration.ofMillis(foregroundUsageTimeInMs).getSeconds(), Duration.ofMillis(foregroundUsageTimeInMs).getSeconds(),
Duration.ofMillis(foregroundServiceUsageTimeInMs).getSeconds(),
Duration.ofMillis(backgroundUsageTimeInMs).getSeconds(), Duration.ofMillis(backgroundUsageTimeInMs).getSeconds(),
selectedBatteryEntry)); selectedBatteryEntry));
} }
foregroundUsageTimeInMs = Math.round(foregroundUsageTimeInMs * ratio); foregroundUsageTimeInMs = Math.round(foregroundUsageTimeInMs * ratio);
foregroundServiceUsageTimeInMs = Math.round(foregroundServiceUsageTimeInMs * ratio);
backgroundUsageTimeInMs = Math.round(backgroundUsageTimeInMs * ratio); backgroundUsageTimeInMs = Math.round(backgroundUsageTimeInMs * ratio);
consumePower = consumePower * ratio; consumePower = consumePower * ratio;
foregroundUsageConsumePower = foregroundUsageConsumePower * ratio; foregroundUsageConsumePower = foregroundUsageConsumePower * ratio;
@@ -1487,9 +1501,14 @@ public final class DataProcessor {
appUsageMap, appUsageMap,
selectedBatteryEntry.mUserId, selectedBatteryEntry.mUserId,
selectedBatteryEntry.mPackageName)); selectedBatteryEntry.mPackageName));
// Make sure the background + screen-on time will not exceed the threshold. // Ensure the following value will not exceed the threshold.
// value = background + foregroundService + screen-on
backgroundUsageTimeInMs = backgroundUsageTimeInMs =
Math.min(backgroundUsageTimeInMs, (long) slotDuration - screenOnTime); Math.min(backgroundUsageTimeInMs, (long) slotDuration - screenOnTime);
foregroundServiceUsageTimeInMs =
Math.min(
foregroundServiceUsageTimeInMs,
(long) slotDuration - screenOnTime - backgroundUsageTimeInMs);
final BatteryDiffEntry currentBatteryDiffEntry = final BatteryDiffEntry currentBatteryDiffEntry =
new BatteryDiffEntry( new BatteryDiffEntry(
context, context,
@@ -1502,6 +1521,7 @@ public final class DataProcessor {
selectedBatteryEntry.mAppLabel, selectedBatteryEntry.mAppLabel,
selectedBatteryEntry.mConsumerType, selectedBatteryEntry.mConsumerType,
foregroundUsageTimeInMs, foregroundUsageTimeInMs,
foregroundServiceUsageTimeInMs,
backgroundUsageTimeInMs, backgroundUsageTimeInMs,
screenOnTime, screenOnTime,
consumePower, consumePower,
@@ -1647,6 +1667,8 @@ public final class DataProcessor {
} else { } else {
// Sums up some field data into the existing one. // Sums up some field data into the existing one.
oldBatteryDiffEntry.mForegroundUsageTimeInMs += entry.mForegroundUsageTimeInMs; oldBatteryDiffEntry.mForegroundUsageTimeInMs += entry.mForegroundUsageTimeInMs;
oldBatteryDiffEntry.mForegroundServiceUsageTimeInMs +=
entry.mForegroundServiceUsageTimeInMs;
oldBatteryDiffEntry.mBackgroundUsageTimeInMs += entry.mBackgroundUsageTimeInMs; oldBatteryDiffEntry.mBackgroundUsageTimeInMs += entry.mBackgroundUsageTimeInMs;
oldBatteryDiffEntry.mScreenOnTimeInMs += entry.mScreenOnTimeInMs; oldBatteryDiffEntry.mScreenOnTimeInMs += entry.mScreenOnTimeInMs;
oldBatteryDiffEntry.mConsumePower += entry.mConsumePower; oldBatteryDiffEntry.mConsumePower += entry.mConsumePower;

View File

@@ -660,36 +660,39 @@ public final class DatabaseUtils {
// Creates the ContentValues list to insert them into provider. // Creates the ContentValues list to insert them into provider.
final List<ContentValues> valuesList = new ArrayList<>(); final List<ContentValues> valuesList = new ArrayList<>();
if (batteryEntryList != null) { if (batteryEntryList != null) {
batteryEntryList.stream() for (BatteryEntry entry : batteryEntryList) {
.filter( final long foregroundMs = entry.getTimeInForegroundMs();
entry -> { final long foregroundServiceMs = entry.getTimeInForegroundServiceMs();
final long foregroundMs = entry.getTimeInForegroundMs(); final long backgroundMs = entry.getTimeInBackgroundMs();
final long backgroundMs = entry.getTimeInBackgroundMs(); if (entry.getConsumedPower() == 0
if (entry.getConsumedPower() == 0 && (foregroundMs != 0 || foregroundServiceMs != 0 || backgroundMs != 0)) {
&& (foregroundMs != 0 || backgroundMs != 0)) { Log.w(
Log.w( TAG,
TAG, String.format(
String.format( "no consumed power but has running time for %s"
"no consumed power but has running time for %s" + " time=%d|%d|%d",
+ " time=%d|%d", entry.getLabel(),
entry.getLabel(), foregroundMs, backgroundMs)); foregroundMs,
} foregroundServiceMs,
return entry.getConsumedPower() != 0 backgroundMs));
|| foregroundMs != 0 }
|| backgroundMs != 0; if (entry.getConsumedPower() == 0
}) && foregroundMs == 0
.forEach( && foregroundServiceMs == 0
entry -> && backgroundMs == 0) {
valuesList.add( continue;
ConvertUtils.convertBatteryEntryToContentValues( }
entry, valuesList.add(
batteryUsageStats, ConvertUtils.convertBatteryEntryToContentValues(
batteryLevel, entry,
batteryStatus, batteryUsageStats,
batteryHealth, batteryLevel,
snapshotBootTimestamp, batteryStatus,
snapshotTimestamp, batteryHealth,
isFullChargeStart))); snapshotBootTimestamp,
snapshotTimestamp,
isFullChargeStart));
}
} }
int size = 1; int size = 1;

View File

@@ -16,6 +16,7 @@
package com.android.settings.fuelgauge.batteryusage; package com.android.settings.fuelgauge.batteryusage;
import java.time.Duration;
import java.util.Calendar; import java.util.Calendar;
/** A utility class for timestamp operations. */ /** A utility class for timestamp operations. */
@@ -48,6 +49,10 @@ final class TimestampUtils {
return calendar.getTimeInMillis(); return calendar.getTimeInMillis();
} }
static long getSeconds(final long timeInMs) {
return Duration.ofMillis(timeInMs).getSeconds();
}
static boolean isMidnight(final long timestamp) { static boolean isMidnight(final long timestamp) {
final Calendar calendar = Calendar.getInstance(); final Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(timestamp); calendar.setTimeInMillis(timestamp);

View File

@@ -31,4 +31,5 @@ message BatteryUsageDiff {
optional int64 foreground_usage_time = 14; optional int64 foreground_usage_time = 14;
optional int64 background_usage_time = 15; optional int64 background_usage_time = 15;
optional int64 screen_on_time = 16; optional int64 screen_on_time = 16;
optional int64 foreground_service_usage_time = 17;
} }

View File

@@ -36,4 +36,5 @@ message BatteryInformation {
optional double foreground_service_usage_consume_power = 17; optional double foreground_service_usage_consume_power = 17;
optional double background_usage_consume_power = 18; optional double background_usage_consume_power = 18;
optional double cached_usage_consume_power = 19; optional double cached_usage_consume_power = 19;
optional int64 foreground_service_usage_time_in_ms = 20;
} }

View File

@@ -49,7 +49,9 @@ import androidx.loader.app.LoaderManager;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.SettingsActivity; import com.android.settings.SettingsActivity;
import com.android.settings.fuelgauge.batteryusage.BatteryDiffEntry;
import com.android.settings.fuelgauge.batteryusage.BatteryEntry; import com.android.settings.fuelgauge.batteryusage.BatteryEntry;
import com.android.settings.fuelgauge.batteryusage.ConvertUtils;
import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.shadow.ShadowActivityManager; import com.android.settings.testutils.shadow.ShadowActivityManager;
import com.android.settings.testutils.shadow.ShadowEntityHeaderController; import com.android.settings.testutils.shadow.ShadowEntityHeaderController;
@@ -91,11 +93,10 @@ public class AdvancedPowerUsageDetailTest {
private static final String USAGE_PERCENT = "16%"; private static final String USAGE_PERCENT = "16%";
private static final int ICON_ID = 123; private static final int ICON_ID = 123;
private static final int UID = 1; private static final int UID = 1;
private static final long FOREGROUND_TIME_MS = 444;
private static final long FOREGROUND_SERVICE_TIME_MS = 123;
private static final long BACKGROUND_TIME_MS = 100; private static final long BACKGROUND_TIME_MS = 100;
private static final long FOREGROUND_ACTIVITY_TIME_MS = 123; private static final long SCREEN_ON_TIME_MS = 321;
private static final long FOREGROUND_SERVICE_TIME_MS = 444;
private static final long FOREGROUND_TIME_MS =
FOREGROUND_ACTIVITY_TIME_MS + FOREGROUND_SERVICE_TIME_MS;
private static final String KEY_ALLOW_BACKGROUND_USAGE = "allow_background_usage"; private static final String KEY_ALLOW_BACKGROUND_USAGE = "allow_background_usage";
@Mock(answer = Answers.RETURNS_DEEP_STUBS) @Mock(answer = Answers.RETURNS_DEEP_STUBS)
@@ -105,7 +106,6 @@ public class AdvancedPowerUsageDetailTest {
@Mock private LayoutPreference mHeaderPreference; @Mock private LayoutPreference mHeaderPreference;
@Mock private ApplicationsState mState; @Mock private ApplicationsState mState;
@Mock private ApplicationsState.AppEntry mAppEntry; @Mock private ApplicationsState.AppEntry mAppEntry;
@Mock private Bundle mBundle;
@Mock private BatteryEntry mBatteryEntry; @Mock private BatteryEntry mBatteryEntry;
@Mock private PackageManager mPackageManager; @Mock private PackageManager mPackageManager;
@Mock private InstallSourceInfo mInstallSourceInfo; @Mock private InstallSourceInfo mInstallSourceInfo;
@@ -120,6 +120,8 @@ public class AdvancedPowerUsageDetailTest {
private SettingsActivity mTestActivity; private SettingsActivity mTestActivity;
private FakeFeatureFactory mFeatureFactory; private FakeFeatureFactory mFeatureFactory;
private MetricsFeatureProvider mMetricsFeatureProvider; private MetricsFeatureProvider mMetricsFeatureProvider;
private BatteryDiffEntry mBatteryDiffEntry;
private Bundle mBundle;
@Before @Before
public void setUp() { public void setUp() {
@@ -131,6 +133,7 @@ public class AdvancedPowerUsageDetailTest {
mMetricsFeatureProvider = mFeatureFactory.metricsFeatureProvider; mMetricsFeatureProvider = mFeatureFactory.metricsFeatureProvider;
mFragment = spy(new AdvancedPowerUsageDetail()); mFragment = spy(new AdvancedPowerUsageDetail());
mBundle = spy(new Bundle());
doReturn(mContext).when(mFragment).getContext(); doReturn(mContext).when(mFragment).getContext();
doReturn(mActivity).when(mFragment).getActivity(); doReturn(mActivity).when(mFragment).getActivity();
doReturn(SUMMARY).when(mFragment).getString(anyInt()); doReturn(SUMMARY).when(mFragment).getString(anyInt());
@@ -163,10 +166,35 @@ public class AdvancedPowerUsageDetailTest {
when(mBatteryEntry.getUid()).thenReturn(UID); when(mBatteryEntry.getUid()).thenReturn(UID);
when(mBatteryEntry.getLabel()).thenReturn(APP_LABEL); when(mBatteryEntry.getLabel()).thenReturn(APP_LABEL);
when(mBatteryEntry.getTimeInBackgroundMs()).thenReturn(BACKGROUND_TIME_MS);
when(mBatteryEntry.getTimeInForegroundMs()).thenReturn(FOREGROUND_TIME_MS); when(mBatteryEntry.getTimeInForegroundMs()).thenReturn(FOREGROUND_TIME_MS);
when(mBatteryEntry.getTimeInForegroundServiceMs()).thenReturn(FOREGROUND_SERVICE_TIME_MS);
when(mBatteryEntry.getTimeInBackgroundMs()).thenReturn(BACKGROUND_TIME_MS);
mBatteryEntry.mIconId = ICON_ID; mBatteryEntry.mIconId = ICON_ID;
mBatteryDiffEntry =
spy(
new BatteryDiffEntry(
mContext,
/* uid= */ UID,
/* userId= */ 0,
/* key= */ "key",
/* isHidden= */ false,
/* componentId= */ -1,
/* legacyPackageName= */ null,
/* legacyLabel= */ null,
/*consumerType*/ ConvertUtils.CONSUMER_TYPE_USER_BATTERY,
/* foregroundUsageTimeInMs= */ FOREGROUND_TIME_MS,
/* foregroundSerUsageTimeInMs= */ FOREGROUND_SERVICE_TIME_MS,
/* backgroundUsageTimeInMs= */ BACKGROUND_TIME_MS,
/* screenOnTimeInMs= */ SCREEN_ON_TIME_MS,
/* consumePower= */ 0,
/* foregroundUsageConsumePower= */ 0,
/* foregroundServiceUsageConsumePower= */ 0,
/* backgroundUsageConsumePower= */ 0,
/* cachedUsageConsumePower= */ 0));
when(mBatteryDiffEntry.getAppLabel()).thenReturn(APP_LABEL);
when(mBatteryDiffEntry.getAppIconId()).thenReturn(ICON_ID);
mFragment.mHeaderPreference = mHeaderPreference; mFragment.mHeaderPreference = mHeaderPreference;
mFragment.mState = mState; mFragment.mState = mState;
mFragment.mBatteryOptimizeUtils = mBatteryOptimizeUtils; mFragment.mBatteryOptimizeUtils = mBatteryOptimizeUtils;
@@ -191,6 +219,7 @@ public class AdvancedPowerUsageDetailTest {
.when(mActivity) .when(mActivity)
.startActivityAsUser(captor.capture(), nullable(UserHandle.class)); .startActivityAsUser(captor.capture(), nullable(UserHandle.class));
doAnswer(callable).when(mActivity).startActivity(captor.capture()); doAnswer(callable).when(mActivity).startActivity(captor.capture());
doAnswer(callable).when(mContext).startActivity(captor.capture());
mAllowBackgroundUsagePreference = new PrimarySwitchPreference(mContext); mAllowBackgroundUsagePreference = new PrimarySwitchPreference(mContext);
mAllowBackgroundUsagePreference.setKey(KEY_ALLOW_BACKGROUND_USAGE); mAllowBackgroundUsagePreference.setKey(KEY_ALLOW_BACKGROUND_USAGE);
@@ -256,6 +285,7 @@ public class AdvancedPowerUsageDetailTest {
@Test @Test
public void startBatteryDetailPage_invalidToShowSummary_noFGBDData() { public void startBatteryDetailPage_invalidToShowSummary_noFGBDData() {
mBundle.clear();
AdvancedPowerUsageDetail.startBatteryDetailPage( AdvancedPowerUsageDetail.startBatteryDetailPage(
mActivity, mFragment, mBatteryEntry, USAGE_PERCENT); mActivity, mFragment, mBatteryEntry, USAGE_PERCENT);
@@ -267,6 +297,35 @@ public class AdvancedPowerUsageDetailTest {
.isEqualTo(USAGE_PERCENT); .isEqualTo(USAGE_PERCENT);
} }
@Test
public void startBatteryDetailPage_showSummary_hasFGBDData() {
final ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
mBundle.clear();
AdvancedPowerUsageDetail.startBatteryDetailPage(
mContext,
mFragment.getMetricsCategory(),
mBatteryDiffEntry,
USAGE_PERCENT,
/* slotInformation= */ null,
/* showTimeInformation= */ true,
/* anomalyHintPrefKey= */ null,
/* anomalyHintText= */ null);
verify(mContext).startActivity(captor.capture());
assertThat(mBundle.getInt(AdvancedPowerUsageDetail.EXTRA_UID)).isEqualTo(UID);
assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME))
.isEqualTo(BACKGROUND_TIME_MS + FOREGROUND_SERVICE_TIME_MS);
assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME))
.isEqualTo(FOREGROUND_TIME_MS);
assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_SCREEN_ON_TIME))
.isEqualTo(SCREEN_ON_TIME_MS);
assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_PERCENT))
.isEqualTo(USAGE_PERCENT);
assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_SLOT_TIME))
.isEqualTo(null);
}
@Test @Test
public void startBatteryDetailPage_noBatteryUsage_hasBasicData() { public void startBatteryDetailPage_noBatteryUsage_hasBasicData() {
final ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class); final ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
@@ -292,6 +351,7 @@ public class AdvancedPowerUsageDetailTest {
@Test @Test
public void startBatteryDetailPage_batteryEntryNotExisted_extractUidFromPackageName() public void startBatteryDetailPage_batteryEntryNotExisted_extractUidFromPackageName()
throws PackageManager.NameNotFoundException { throws PackageManager.NameNotFoundException {
mBundle.clear();
doReturn(UID).when(mPackageManager).getPackageUid(PACKAGE_NAME[0], 0 /* no flag */); doReturn(UID).when(mPackageManager).getPackageUid(PACKAGE_NAME[0], 0 /* no flag */);
AdvancedPowerUsageDetail.startBatteryDetailPage( AdvancedPowerUsageDetail.startBatteryDetailPage(

View File

@@ -207,6 +207,7 @@ public class BatteryDiffDataTest {
batteryHistEntry.mAppLabel, batteryHistEntry.mAppLabel,
batteryHistEntry.mConsumerType, batteryHistEntry.mConsumerType,
/* foregroundUsageTimeInMs= */ 0, /* foregroundUsageTimeInMs= */ 0,
/* foregroundServiceUsageTimeInMs= */ 0,
/* backgroundUsageTimeInMs= */ 0, /* backgroundUsageTimeInMs= */ 0,
/* screenOnTimeInMs= */ 0, /* screenOnTimeInMs= */ 0,
consumePower, consumePower,

View File

@@ -111,8 +111,9 @@ public final class BatteryDiffEntryTest {
/* legacyLabel= */ null, /* legacyLabel= */ null,
/*consumerType*/ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*consumerType*/ ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
/* foregroundUsageTimeInMs= */ 10001L, /* foregroundUsageTimeInMs= */ 10001L,
/* backgroundUsageTimeInMs= */ 20002L, /* foregroundServiceUsageTimeInMs= */ 20002L,
/* screenOnTimeInMs= */ 30003L, /* backgroundUsageTimeInMs= */ 30003L,
/* screenOnTimeInMs= */ 40004L,
/* consumePower= */ 22.0, /* consumePower= */ 22.0,
/* foregroundUsageConsumePower= */ 10.0, /* foregroundUsageConsumePower= */ 10.0,
/* foregroundServiceUsageConsumePower= */ 10.0, /* foregroundServiceUsageConsumePower= */ 10.0,
@@ -137,8 +138,9 @@ public final class BatteryDiffEntryTest {
/* legacyLabel= */ null, /* legacyLabel= */ null,
/*consumerType*/ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*consumerType*/ ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
/* foregroundUsageTimeInMs= */ 10001L, /* foregroundUsageTimeInMs= */ 10001L,
/* backgroundUsageTimeInMs= */ 20002L, /* foregroundServiceUsageTimeInMs= */ 20002L,
/* screenOnTimeInMs= */ 30003L, /* backgroundUsageTimeInMs= */ 30003L,
/* screenOnTimeInMs= */ 40004L,
/* consumePower= */ 22.0, /* consumePower= */ 22.0,
/* foregroundUsageConsumePower= */ 10.0, /* foregroundUsageConsumePower= */ 10.0,
/* foregroundServiceUsageConsumePower= */ 10.0, /* foregroundServiceUsageConsumePower= */ 10.0,
@@ -165,6 +167,7 @@ public final class BatteryDiffEntryTest {
/* legacyLabel= */ BatteryDiffEntry.SYSTEM_APPS_KEY, /* legacyLabel= */ BatteryDiffEntry.SYSTEM_APPS_KEY,
/*consumerType*/ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*consumerType*/ ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
/* foregroundUsageTimeInMs= */ 0, /* foregroundUsageTimeInMs= */ 0,
/* foregroundServiceUsageTimeInMs= */ 0,
/* backgroundUsageTimeInMs= */ 0, /* backgroundUsageTimeInMs= */ 0,
/* screenOnTimeInMs= */ 0, /* screenOnTimeInMs= */ 0,
/* consumePower= */ 0, /* consumePower= */ 0,
@@ -552,6 +555,7 @@ public final class BatteryDiffEntryTest {
/* legacyLabel= */ null, /* legacyLabel= */ null,
/*consumerType*/ consumerType, /*consumerType*/ consumerType,
/* foregroundUsageTimeInMs= */ 0, /* foregroundUsageTimeInMs= */ 0,
/* foregroundServiceUsageTimeInMs= */ 0,
/* backgroundUsageTimeInMs= */ 0, /* backgroundUsageTimeInMs= */ 0,
/* screenOnTimeInMs= */ 0, /* screenOnTimeInMs= */ 0,
/* consumePower= */ 0, /* consumePower= */ 0,
@@ -576,6 +580,7 @@ public final class BatteryDiffEntryTest {
batteryHistEntry.mConsumerType, batteryHistEntry.mConsumerType,
/* foregroundUsageTimeInMs= */ 0, /* foregroundUsageTimeInMs= */ 0,
/* backgroundUsageTimeInMs= */ 0, /* backgroundUsageTimeInMs= */ 0,
/* foregroundServiceUsageTimeInMs= */ 0,
/* screenOnTimeInMs= */ 0, /* screenOnTimeInMs= */ 0,
consumePower, consumePower,
/* foregroundUsageConsumePower= */ 0, /* foregroundUsageConsumePower= */ 0,

View File

@@ -195,7 +195,8 @@ public class BatteryEntryTest {
@Test @Test
public void getTimeInForegroundMs_app() { public void getTimeInForegroundMs_app() {
when(mUidBatteryConsumer.getTimeInStateMs(UidBatteryConsumer.STATE_FOREGROUND)) when(mUidBatteryConsumer.getTimeInProcessStateMs(
UidBatteryConsumer.PROCESS_STATE_FOREGROUND))
.thenReturn(100L); .thenReturn(100L);
final BatteryEntry entry = final BatteryEntry entry =
@@ -226,8 +227,9 @@ public class BatteryEntryTest {
@Test @Test
public void getTimeInBackgroundMs_app() { public void getTimeInBackgroundMs_app() {
when(mUidBatteryConsumer.getTimeInStateMs(UidBatteryConsumer.STATE_BACKGROUND)) when(mUidBatteryConsumer.getTimeInProcessStateMs(
.thenReturn(100L); UidBatteryConsumer.PROCESS_STATE_BACKGROUND))
.thenReturn(30L);
final BatteryEntry entry = final BatteryEntry entry =
new BatteryEntry( new BatteryEntry(
@@ -239,7 +241,26 @@ public class BatteryEntryTest {
null, null,
null); null);
assertThat(entry.getTimeInBackgroundMs()).isEqualTo(100L); assertThat(entry.getTimeInBackgroundMs()).isEqualTo(30L);
}
@Test
public void getTimeInForegroundServiceMs_app() {
when(mUidBatteryConsumer.getTimeInProcessStateMs(
UidBatteryConsumer.PROCESS_STATE_FOREGROUND_SERVICE))
.thenReturn(70L);
final BatteryEntry entry =
new BatteryEntry(
RuntimeEnvironment.application,
mMockUserManager,
mUidBatteryConsumer,
false,
0,
null,
null);
assertThat(entry.getTimeInForegroundServiceMs()).isEqualTo(70L);
} }
@Test @Test

View File

@@ -65,6 +65,7 @@ public final class BatteryHistEntryTest {
when(mMockBatteryEntry.getConsumedPowerInCached()).thenReturn(1.5); when(mMockBatteryEntry.getConsumedPowerInCached()).thenReturn(1.5);
mMockBatteryEntry.mPercent = 0.3; mMockBatteryEntry.mPercent = 0.3;
when(mMockBatteryEntry.getTimeInForegroundMs()).thenReturn(1234L); when(mMockBatteryEntry.getTimeInForegroundMs()).thenReturn(1234L);
when(mMockBatteryEntry.getTimeInForegroundServiceMs()).thenReturn(3456L);
when(mMockBatteryEntry.getTimeInBackgroundMs()).thenReturn(5689L); when(mMockBatteryEntry.getTimeInBackgroundMs()).thenReturn(5689L);
when(mMockBatteryEntry.getPowerComponentId()).thenReturn(expectedType); when(mMockBatteryEntry.getPowerComponentId()).thenReturn(expectedType);
when(mMockBatteryEntry.getConsumerType()) when(mMockBatteryEntry.getConsumerType())
@@ -105,6 +106,7 @@ public final class BatteryHistEntryTest {
/* backgroundUsageConsumePower= */ 1.4, /* backgroundUsageConsumePower= */ 1.4,
/* cachedUsageConsumePower= */ 1.5, /* cachedUsageConsumePower= */ 1.5,
/* foregroundUsageTimeInMs= */ 1234L, /* foregroundUsageTimeInMs= */ 1234L,
/* foregroundServiceUsageTimeInMs= */ 3456L,
/* backgroundUsageTimeInMs= */ 5689L, /* backgroundUsageTimeInMs= */ 5689L,
/* batteryLevel= */ 12), /* batteryLevel= */ 12),
/* drainType= */ 3, /* drainType= */ 3,
@@ -211,6 +213,7 @@ public final class BatteryHistEntryTest {
/* backgroundUsageConsumePower= */ 3, /* backgroundUsageConsumePower= */ 3,
/* cachedUsageConsumePower= */ 4, /* cachedUsageConsumePower= */ 4,
/* foregroundUsageTimeInMs= */ 100, /* foregroundUsageTimeInMs= */ 100,
/* foregroundServiceUsageTimeInMs= */ 150,
/* backgroundUsageTimeInMs= */ 200, /* backgroundUsageTimeInMs= */ 200,
/* batteryLevel= */ 90); /* batteryLevel= */ 90);
final BatteryHistEntry upperHistEntry = final BatteryHistEntry upperHistEntry =
@@ -224,6 +227,7 @@ public final class BatteryHistEntryTest {
/* backgroundUsageConsumePower= */ 6, /* backgroundUsageConsumePower= */ 6,
/* cachedUsageConsumePower= */ 5, /* cachedUsageConsumePower= */ 5,
/* foregroundUsageTimeInMs= */ 200, /* foregroundUsageTimeInMs= */ 200,
/* foregroundServiceUsageTimeInMs= */ 250,
/* backgroundUsageTimeInMs= */ 300, /* backgroundUsageTimeInMs= */ 300,
/* batteryLevel= */ 80); /* batteryLevel= */ 80);
@@ -244,6 +248,7 @@ public final class BatteryHistEntryTest {
/* backgroundUsageConsumePower= */ 3 + 0.5 * (6 - 3), /* backgroundUsageConsumePower= */ 3 + 0.5 * (6 - 3),
/* cachedUsageConsumePower= */ 4 + 0.5 * (5 - 4), /* cachedUsageConsumePower= */ 4 + 0.5 * (5 - 4),
/* foregroundUsageTimeInMs= */ Math.round(100 + 0.5 * (200 - 100)), /* foregroundUsageTimeInMs= */ Math.round(100 + 0.5 * (200 - 100)),
/* foregroundServiceUsageTimeInMs= */ Math.round(150 + 0.5 * (250 - 150)),
/* backgroundUsageTimeInMs= */ Math.round(200 + 0.5 * (300 - 200)), /* backgroundUsageTimeInMs= */ Math.round(200 + 0.5 * (300 - 200)),
/* batteryLevel= */ (int) Math.round(90 + 0.5 * (80 - 90))); /* batteryLevel= */ (int) Math.round(90 + 0.5 * (80 - 90)));
} }
@@ -264,6 +269,7 @@ public final class BatteryHistEntryTest {
/* backgroundUsageConsumePower= */ 6, /* backgroundUsageConsumePower= */ 6,
/* cachedUsageConsumePower= */ 5, /* cachedUsageConsumePower= */ 5,
/* foregroundUsageTimeInMs= */ 200, /* foregroundUsageTimeInMs= */ 200,
/* foregroundServiceUsageTimeInMs= */ 250,
/* backgroundUsageTimeInMs= */ 300, /* backgroundUsageTimeInMs= */ 300,
/* batteryLevel= */ 80); /* batteryLevel= */ 80);
@@ -288,6 +294,7 @@ public final class BatteryHistEntryTest {
/* backgroundUsageConsumePower= */ 0.5 * 6, /* backgroundUsageConsumePower= */ 0.5 * 6,
/* cachedUsageConsumePower= */ 0.5 * 5, /* cachedUsageConsumePower= */ 0.5 * 5,
/* foregroundUsageTimeInMs= */ Math.round(0.5 * 200), /* foregroundUsageTimeInMs= */ Math.round(0.5 * 200),
/* foregroundServiceUsageTimeInMs= */ Math.round(0.5 * 250),
/* backgroundUsageTimeInMs= */ Math.round(0.5 * 300), /* backgroundUsageTimeInMs= */ Math.round(0.5 * 300),
/* batteryLevel= */ upperHistEntry.mBatteryLevel); /* batteryLevel= */ upperHistEntry.mBatteryLevel);
} }
@@ -317,6 +324,7 @@ public final class BatteryHistEntryTest {
/* backgroundUsageConsumePower= */ 1.4, /* backgroundUsageConsumePower= */ 1.4,
/* cachedUsageConsumePower= */ 1.5, /* cachedUsageConsumePower= */ 1.5,
/* foregroundUsageTimeInMs= */ 1234L, /* foregroundUsageTimeInMs= */ 1234L,
/*foregroundServiceUsageTimeInMs=*/ 3456L,
/* backgroundUsageTimeInMs= */ 5689L, /* backgroundUsageTimeInMs= */ 5689L,
/* batteryLevel= */ 12); /* batteryLevel= */ 12);
} }
@@ -334,6 +342,7 @@ public final class BatteryHistEntryTest {
double backgroundUsageConsumePower, double backgroundUsageConsumePower,
double cachedUsageConsumePower, double cachedUsageConsumePower,
long foregroundUsageTimeInMs, long foregroundUsageTimeInMs,
long foregroundServiceUsageTimeInMs,
long backgroundUsageTimeInMs, long backgroundUsageTimeInMs,
int batteryLevel) { int batteryLevel) {
assertThat(entry.isValidEntry()).isTrue(); assertThat(entry.isValidEntry()).isTrue();
@@ -354,6 +363,7 @@ public final class BatteryHistEntryTest {
assertThat(entry.mCachedUsageConsumePower).isEqualTo(cachedUsageConsumePower); assertThat(entry.mCachedUsageConsumePower).isEqualTo(cachedUsageConsumePower);
assertThat(entry.mPercentOfTotal).isEqualTo(percentOfTotal); assertThat(entry.mPercentOfTotal).isEqualTo(percentOfTotal);
assertThat(entry.mForegroundUsageTimeInMs).isEqualTo(foregroundUsageTimeInMs); assertThat(entry.mForegroundUsageTimeInMs).isEqualTo(foregroundUsageTimeInMs);
assertThat(entry.mForegroundServiceUsageTimeInMs).isEqualTo(foregroundServiceUsageTimeInMs);
assertThat(entry.mBackgroundUsageTimeInMs).isEqualTo(backgroundUsageTimeInMs); assertThat(entry.mBackgroundUsageTimeInMs).isEqualTo(backgroundUsageTimeInMs);
assertThat(entry.mDrainType).isEqualTo(drainType); assertThat(entry.mDrainType).isEqualTo(drainType);
assertThat(entry.mConsumerType).isEqualTo(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY); assertThat(entry.mConsumerType).isEqualTo(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
@@ -372,6 +382,7 @@ public final class BatteryHistEntryTest {
double backgroundUsageConsumePower, double backgroundUsageConsumePower,
double cachedUsageConsumePower, double cachedUsageConsumePower,
long foregroundUsageTimeInMs, long foregroundUsageTimeInMs,
long foregroundServiceUsageTimeInMs,
long backgroundUsageTimeInMs, long backgroundUsageTimeInMs,
int batteryLevel) { int batteryLevel) {
final MatrixCursor cursor = final MatrixCursor cursor =
@@ -406,6 +417,7 @@ public final class BatteryHistEntryTest {
.setPercentOfTotal(0.3) .setPercentOfTotal(0.3)
.setDrainType(3) .setDrainType(3)
.setForegroundUsageTimeInMs(foregroundUsageTimeInMs) .setForegroundUsageTimeInMs(foregroundUsageTimeInMs)
.setForegroundServiceUsageTimeInMs(foregroundServiceUsageTimeInMs)
.setBackgroundUsageTimeInMs(backgroundUsageTimeInMs) .setBackgroundUsageTimeInMs(backgroundUsageTimeInMs)
.build(); .build();
cursor.addRow( cursor.addRow(

View File

@@ -100,7 +100,8 @@ public final class BatteryUsageBreakdownControllerTest {
/* legacyLabel= */ null, /* legacyLabel= */ null,
/* consumerType= */ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /* consumerType= */ ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
/* foregroundUsageTimeInMs= */ 1, /* foregroundUsageTimeInMs= */ 1,
/* backgroundUsageTimeInMs= */ 2, /* foregroundServiceUsageTimeInMs= */ 2,
/* backgroundUsageTimeInMs= */ 3,
/* screenOnTimeInMs= */ 0, /* screenOnTimeInMs= */ 0,
/* consumePower= */ 3, /* consumePower= */ 3,
/* foregroundUsageConsumePower= */ 0, /* foregroundUsageConsumePower= */ 0,
@@ -275,6 +276,7 @@ public final class BatteryUsageBreakdownControllerTest {
/* isSystem= */ true, /* isSystem= */ true,
/* screenOnTimeInMs= */ 0, /* screenOnTimeInMs= */ 0,
/* foregroundUsageTimeInMs= */ 0, /* foregroundUsageTimeInMs= */ 0,
/* foregroundServiceUsageTimeInMs= */ 0,
/* backgroundUsageTimeInMs= */ 0); /* backgroundUsageTimeInMs= */ 0);
batteryDiffEntry.mConsumePower = 0.8; batteryDiffEntry.mConsumePower = 0.8;
batteryDiffEntry.setTotalConsumePower(100); batteryDiffEntry.setTotalConsumePower(100);
@@ -293,6 +295,7 @@ public final class BatteryUsageBreakdownControllerTest {
/* isSystem= */ true, /* isSystem= */ true,
/* screenOnTimeInMs= */ 0, /* screenOnTimeInMs= */ 0,
/* foregroundUsageTimeInMs= */ 0, /* foregroundUsageTimeInMs= */ 0,
/* foregroundServiceUsageTimeInMs= */ 0,
/* backgroundUsageTimeInMs= */ 0); /* backgroundUsageTimeInMs= */ 0);
batteryDiffEntry.mConsumePower = 16; batteryDiffEntry.mConsumePower = 16;
batteryDiffEntry.setTotalConsumePower(100); batteryDiffEntry.setTotalConsumePower(100);
@@ -314,6 +317,7 @@ public final class BatteryUsageBreakdownControllerTest {
/* isSystem= */ true, /* isSystem= */ true,
/* screenOnTimeInMs= */ 0, /* screenOnTimeInMs= */ 0,
/* foregroundUsageTimeInMs= */ 0, /* foregroundUsageTimeInMs= */ 0,
/* foregroundServiceUsageTimeInMs= */ 0,
/* backgroundUsageTimeInMs= */ 0)); /* backgroundUsageTimeInMs= */ 0));
assertThat(pref.getSummary().toString().isEmpty()).isTrue(); assertThat(pref.getSummary().toString().isEmpty()).isTrue();
} }
@@ -329,6 +333,7 @@ public final class BatteryUsageBreakdownControllerTest {
/* isSystem= */ true, /* isSystem= */ true,
/* screenOnTimeInMs= */ 0, /* screenOnTimeInMs= */ 0,
/* foregroundUsageTimeInMs= */ DateUtils.MINUTE_IN_MILLIS - 1, /* foregroundUsageTimeInMs= */ DateUtils.MINUTE_IN_MILLIS - 1,
/* foregroundServiceUsageTimeInMs= */ 0,
/* backgroundUsageTimeInMs= */ 0)); /* backgroundUsageTimeInMs= */ 0));
assertThat(pref.getSummary().toString()).isEqualTo("Total: less than a min"); assertThat(pref.getSummary().toString()).isEqualTo("Total: less than a min");
} }
@@ -344,6 +349,7 @@ public final class BatteryUsageBreakdownControllerTest {
/* isSystem= */ true, /* isSystem= */ true,
/* screenOnTimeInMs= */ 0, /* screenOnTimeInMs= */ 0,
/* foregroundUsageTimeInMs= */ DateUtils.MINUTE_IN_MILLIS * 2, /* foregroundUsageTimeInMs= */ DateUtils.MINUTE_IN_MILLIS * 2,
/* foregroundServiceUsageTimeInMs= */ 0,
/* backgroundUsageTimeInMs= */ 0)); /* backgroundUsageTimeInMs= */ 0));
assertThat(pref.getSummary().toString()).isEqualTo("Total: 2 min"); assertThat(pref.getSummary().toString()).isEqualTo("Total: 2 min");
} }
@@ -359,6 +365,7 @@ public final class BatteryUsageBreakdownControllerTest {
/* isSystem= */ false, /* isSystem= */ false,
/* screenOnTimeInMs= */ 0, /* screenOnTimeInMs= */ 0,
/* foregroundUsageTimeInMs= */ 0, /* foregroundUsageTimeInMs= */ 0,
/* foregroundServiceUsageTimeInMs= */ 0,
/* backgroundUsageTimeInMs= */ 0)); /* backgroundUsageTimeInMs= */ 0));
assertThat(pref.getSummary().toString().isEmpty()).isTrue(); assertThat(pref.getSummary().toString().isEmpty()).isTrue();
} }
@@ -374,10 +381,27 @@ public final class BatteryUsageBreakdownControllerTest {
/* isSystem= */ false, /* isSystem= */ false,
/* screenOnTimeInMs= */ 0, /* screenOnTimeInMs= */ 0,
/* foregroundUsageTimeInMs= */ 0, /* foregroundUsageTimeInMs= */ 0,
/* foregroundServiceUsageTimeInMs= */ 0,
/* backgroundUsageTimeInMs= */ DateUtils.MINUTE_IN_MILLIS)); /* backgroundUsageTimeInMs= */ DateUtils.MINUTE_IN_MILLIS));
assertThat(pref.getSummary().toString()).isEqualTo("Background: 1 min"); assertThat(pref.getSummary().toString()).isEqualTo("Background: 1 min");
} }
@Test
public void setPreferenceSummary_appEntryWithFGSTime_expectedSummary() {
final PowerGaugePreference pref = new PowerGaugePreference(mContext);
pref.setSummary(PREF_SUMMARY);
mBatteryUsageBreakdownController.setPreferenceSummary(
pref,
createBatteryDiffEntry(
/* isSystem= */ false,
/* screenOnTimeInMs= */ 0,
/* foregroundUsageTimeInMs= */ 0,
/* foregroundServiceUsageTimeInMs= */ DateUtils.MINUTE_IN_MILLIS / 2,
/* backgroundUsageTimeInMs= */ DateUtils.MINUTE_IN_MILLIS / 2));
assertThat(pref.getSummary().toString()).isEqualTo("Background: 1 min");
}
@Test @Test
public void setPreferenceSummary_appEntryScreenOnTimeOnly_expectedSummary() { public void setPreferenceSummary_appEntryScreenOnTimeOnly_expectedSummary() {
final PowerGaugePreference pref = new PowerGaugePreference(mContext); final PowerGaugePreference pref = new PowerGaugePreference(mContext);
@@ -389,6 +413,7 @@ public final class BatteryUsageBreakdownControllerTest {
/* isSystem= */ false, /* isSystem= */ false,
/* screenOnTimeInMs= */ DateUtils.MINUTE_IN_MILLIS, /* screenOnTimeInMs= */ DateUtils.MINUTE_IN_MILLIS,
/* foregroundUsageTimeInMs= */ 0, /* foregroundUsageTimeInMs= */ 0,
/* foregroundServiceUsageTimeInMs= */ 0,
/* backgroundUsageTimeInMs= */ 0)); /* backgroundUsageTimeInMs= */ 0));
assertThat(pref.getSummary().toString()).isEqualTo("Screen time: 1 min"); assertThat(pref.getSummary().toString()).isEqualTo("Screen time: 1 min");
} }
@@ -404,6 +429,7 @@ public final class BatteryUsageBreakdownControllerTest {
/* isSystem= */ false, /* isSystem= */ false,
/* screenOnTimeInMs= */ DateUtils.MINUTE_IN_MILLIS - 1, /* screenOnTimeInMs= */ DateUtils.MINUTE_IN_MILLIS - 1,
/* foregroundUsageTimeInMs= */ DateUtils.MINUTE_IN_MILLIS - 1, /* foregroundUsageTimeInMs= */ DateUtils.MINUTE_IN_MILLIS - 1,
/* foregroundServiceUsageTimeInMs= */ 0,
/* backgroundUsageTimeInMs= */ DateUtils.MINUTE_IN_MILLIS - 1)); /* backgroundUsageTimeInMs= */ DateUtils.MINUTE_IN_MILLIS - 1));
assertThat(pref.getSummary().toString()) assertThat(pref.getSummary().toString())
.isEqualTo("Screen time: less than a min\nBackground: less than a min"); .isEqualTo("Screen time: less than a min\nBackground: less than a min");
@@ -413,6 +439,7 @@ public final class BatteryUsageBreakdownControllerTest {
boolean isSystem, boolean isSystem,
long screenOnTimeInMs, long screenOnTimeInMs,
long foregroundUsageTimeInMs, long foregroundUsageTimeInMs,
long foregroundServiceUsageTimeInMs,
long backgroundUsageTimeInMs) { long backgroundUsageTimeInMs) {
final ContentValues contentValues = new ContentValues(); final ContentValues contentValues = new ContentValues();
contentValues.put( contentValues.put(
@@ -435,6 +462,7 @@ public final class BatteryUsageBreakdownControllerTest {
batteryHistEntry.mConsumerType, batteryHistEntry.mConsumerType,
foregroundUsageTimeInMs, foregroundUsageTimeInMs,
backgroundUsageTimeInMs, backgroundUsageTimeInMs,
foregroundServiceUsageTimeInMs,
screenOnTimeInMs, screenOnTimeInMs,
/* consumePower= */ 0, /* consumePower= */ 0,
/* foregroundUsageConsumePower= */ 0, /* foregroundUsageConsumePower= */ 0,

View File

@@ -290,6 +290,7 @@ public final class BatteryUsageContentProviderTest {
.setPercentOfTotal(0.9) .setPercentOfTotal(0.9)
.setForegroundUsageTimeInMs(1000) .setForegroundUsageTimeInMs(1000)
.setBackgroundUsageTimeInMs(2000) .setBackgroundUsageTimeInMs(2000)
.setForegroundServiceUsageTimeInMs(1500)
.setDrainType(1) .setDrainType(1)
.build(); .build();
final String expectedBatteryInformationString = final String expectedBatteryInformationString =

View File

@@ -92,6 +92,7 @@ public final class ConvertUtilsTest {
mMockBatteryEntry.mPercent = 0.3; mMockBatteryEntry.mPercent = 0.3;
when(mMockBatteryEntry.getTimeInForegroundMs()).thenReturn(1234L); when(mMockBatteryEntry.getTimeInForegroundMs()).thenReturn(1234L);
when(mMockBatteryEntry.getTimeInBackgroundMs()).thenReturn(5689L); when(mMockBatteryEntry.getTimeInBackgroundMs()).thenReturn(5689L);
when(mMockBatteryEntry.getTimeInForegroundServiceMs()).thenReturn(3456L);
when(mMockBatteryEntry.getPowerComponentId()).thenReturn(-1); when(mMockBatteryEntry.getPowerComponentId()).thenReturn(-1);
when(mMockBatteryEntry.getConsumerType()) when(mMockBatteryEntry.getConsumerType())
.thenReturn(ConvertUtils.CONSUMER_TYPE_UID_BATTERY); .thenReturn(ConvertUtils.CONSUMER_TYPE_UID_BATTERY);
@@ -133,6 +134,7 @@ public final class ConvertUtilsTest {
assertThat(batteryInformation.getPercentOfTotal()).isEqualTo(0.3); assertThat(batteryInformation.getPercentOfTotal()).isEqualTo(0.3);
assertThat(batteryInformation.getForegroundUsageTimeInMs()).isEqualTo(1234L); assertThat(batteryInformation.getForegroundUsageTimeInMs()).isEqualTo(1234L);
assertThat(batteryInformation.getBackgroundUsageTimeInMs()).isEqualTo(5689L); assertThat(batteryInformation.getBackgroundUsageTimeInMs()).isEqualTo(5689L);
assertThat(batteryInformation.getForegroundServiceUsageTimeInMs()).isEqualTo(3456L);
assertThat(batteryInformation.getDrainType()).isEqualTo(-1); assertThat(batteryInformation.getDrainType()).isEqualTo(-1);
assertThat(deviceBatteryState.getBatteryLevel()).isEqualTo(12); assertThat(deviceBatteryState.getBatteryLevel()).isEqualTo(12);
assertThat(deviceBatteryState.getBatteryStatus()) assertThat(deviceBatteryState.getBatteryStatus())
@@ -157,6 +159,7 @@ public final class ConvertUtilsTest {
mMockBatteryEntry.mPercent = 0.3; mMockBatteryEntry.mPercent = 0.3;
when(mMockBatteryEntry.getTimeInForegroundMs()).thenReturn(1234L); when(mMockBatteryEntry.getTimeInForegroundMs()).thenReturn(1234L);
when(mMockBatteryEntry.getTimeInBackgroundMs()).thenReturn(5689L); when(mMockBatteryEntry.getTimeInBackgroundMs()).thenReturn(5689L);
when(mMockBatteryEntry.getTimeInForegroundServiceMs()).thenReturn(3456L);
when(mMockBatteryEntry.getConsumerType()) when(mMockBatteryEntry.getConsumerType())
.thenReturn(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY); .thenReturn(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
@@ -196,6 +199,7 @@ public final class ConvertUtilsTest {
assertThat(batteryInformation.getPercentOfTotal()).isEqualTo(0.3); assertThat(batteryInformation.getPercentOfTotal()).isEqualTo(0.3);
assertThat(batteryInformation.getForegroundUsageTimeInMs()).isEqualTo(1234L); assertThat(batteryInformation.getForegroundUsageTimeInMs()).isEqualTo(1234L);
assertThat(batteryInformation.getBackgroundUsageTimeInMs()).isEqualTo(5689L); assertThat(batteryInformation.getBackgroundUsageTimeInMs()).isEqualTo(5689L);
assertThat(batteryInformation.getForegroundServiceUsageTimeInMs()).isEqualTo(3456L);
assertThat(batteryInformation.getDrainType()) assertThat(batteryInformation.getDrainType())
.isEqualTo(BatteryConsumer.POWER_COMPONENT_CPU); .isEqualTo(BatteryConsumer.POWER_COMPONENT_CPU);
assertThat(deviceBatteryState.getBatteryLevel()).isEqualTo(12); assertThat(deviceBatteryState.getBatteryLevel()).isEqualTo(12);
@@ -307,6 +311,7 @@ public final class ConvertUtilsTest {
mMockBatteryEntry.mPercent = 0.3; mMockBatteryEntry.mPercent = 0.3;
when(mMockBatteryEntry.getTimeInForegroundMs()).thenReturn(1234L); when(mMockBatteryEntry.getTimeInForegroundMs()).thenReturn(1234L);
when(mMockBatteryEntry.getTimeInBackgroundMs()).thenReturn(5689L); when(mMockBatteryEntry.getTimeInBackgroundMs()).thenReturn(5689L);
when(mMockBatteryEntry.getTimeInForegroundServiceMs()).thenReturn(3456L);
when(mMockBatteryEntry.getPowerComponentId()).thenReturn(expectedType); when(mMockBatteryEntry.getPowerComponentId()).thenReturn(expectedType);
when(mMockBatteryEntry.getConsumerType()) when(mMockBatteryEntry.getConsumerType())
.thenReturn(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY); .thenReturn(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
@@ -331,6 +336,7 @@ public final class ConvertUtilsTest {
assertThat(batteryHistEntry.mPercentOfTotal).isEqualTo(0.3); assertThat(batteryHistEntry.mPercentOfTotal).isEqualTo(0.3);
assertThat(batteryHistEntry.mForegroundUsageTimeInMs).isEqualTo(1234L); assertThat(batteryHistEntry.mForegroundUsageTimeInMs).isEqualTo(1234L);
assertThat(batteryHistEntry.mBackgroundUsageTimeInMs).isEqualTo(5689L); assertThat(batteryHistEntry.mBackgroundUsageTimeInMs).isEqualTo(5689L);
assertThat(batteryHistEntry.mForegroundServiceUsageTimeInMs).isEqualTo(3456L);
assertThat(batteryHistEntry.mDrainType).isEqualTo(expectedType); assertThat(batteryHistEntry.mDrainType).isEqualTo(expectedType);
assertThat(batteryHistEntry.mConsumerType) assertThat(batteryHistEntry.mConsumerType)
.isEqualTo(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY); .isEqualTo(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);