diff options
16 files changed, 172 insertions, 113 deletions
diff --git a/core/res/res/values/config_battery_stats.xml b/core/res/res/values/config_battery_stats.xml index 8d9736273145..80cf0881e8cc 100644 --- a/core/res/res/values/config_battery_stats.xml +++ b/core/res/res/values/config_battery_stats.xml @@ -27,16 +27,18 @@ <!-- Whether to reset Battery Stats on unplug if the battery was significantly charged --> <bool name="config_batteryStatsResetOnUnplugAfterSignificantCharge">true</bool> - <!-- CPU power stats collection throttle period in milliseconds. Since power stats collection - is a relatively expensive operation, this throttle period may need to be adjusted for low-power - devices--> - <integer name="config_defaultPowerStatsThrottlePeriodCpu">60000</integer> - - <!-- Mobile Radio power stats collection throttle period in milliseconds. --> - <integer name="config_defaultPowerStatsThrottlePeriodMobileRadio">3600000</integer> - - <!-- Mobile Radio power stats collection throttle period in milliseconds. --> - <integer name="config_defaultPowerStatsThrottlePeriodWifi">3600000</integer> + <!-- Power stats collection throttle periods in milliseconds. Since power stats collection + is a relatively expensive operation, these throttle period may need to be adjusted for low-power + devices. + + The syntax of this config string is as follows: + <pre> + power-component-name1:throttle-period-millis1 power-component-name2:throttle-period-ms2 ... + </pre> + Use "*" for the power-component-name to represent the default for all power components + not mentioned by name. + --> + <string name="config_powerStatsThrottlePeriods">cpu:60000 *:300000</string> <!-- PowerStats aggregation period in milliseconds. This is the interval at which the power stats aggregation procedure is performed and the results stored in PowerStatsStore. --> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index a9d03f543d55..acd3b372b3ae 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -5243,9 +5243,7 @@ <java-symbol type="bool" name="config_batteryStatsResetOnUnplugHighBatteryLevel" /> <java-symbol type="bool" name="config_batteryStatsResetOnUnplugAfterSignificantCharge" /> - <java-symbol type="integer" name="config_defaultPowerStatsThrottlePeriodCpu" /> - <java-symbol type="integer" name="config_defaultPowerStatsThrottlePeriodMobileRadio" /> - <java-symbol type="integer" name="config_defaultPowerStatsThrottlePeriodWifi" /> + <java-symbol type="string" name="config_powerStatsThrottlePeriods" /> <java-symbol type="integer" name="config_powerStatsAggregationPeriod" /> <java-symbol type="integer" name="config_aggregatedPowerStatsSpanDuration" /> diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java index 4f841497b201..58732fd200d2 100644 --- a/services/core/java/com/android/server/am/BatteryStatsService.java +++ b/services/core/java/com/android/server/am/BatteryStatsService.java @@ -159,6 +159,8 @@ import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * All information we are collecting about things that can happen that impact @@ -409,26 +411,14 @@ public final class BatteryStatsService extends IBatteryStats.Stub com.android.internal.R.bool.config_batteryStatsResetOnUnplugHighBatteryLevel); final boolean resetOnUnplugAfterSignificantCharge = context.getResources().getBoolean( com.android.internal.R.bool.config_batteryStatsResetOnUnplugAfterSignificantCharge); - final long powerStatsThrottlePeriodCpu = context.getResources().getInteger( - com.android.internal.R.integer.config_defaultPowerStatsThrottlePeriodCpu); - final long powerStatsThrottlePeriodMobileRadio = context.getResources().getInteger( - com.android.internal.R.integer.config_defaultPowerStatsThrottlePeriodMobileRadio); - final long powerStatsThrottlePeriodWifi = context.getResources().getInteger( - com.android.internal.R.integer.config_defaultPowerStatsThrottlePeriodWifi); - mBatteryStatsConfig = + BatteryStatsImpl.BatteryStatsConfig.Builder batteryStatsConfigBuilder = new BatteryStatsImpl.BatteryStatsConfig.Builder() .setResetOnUnplugHighBatteryLevel(resetOnUnplugHighBatteryLevel) - .setResetOnUnplugAfterSignificantCharge(resetOnUnplugAfterSignificantCharge) - .setPowerStatsThrottlePeriodMillis( - BatteryConsumer.POWER_COMPONENT_CPU, - powerStatsThrottlePeriodCpu) - .setPowerStatsThrottlePeriodMillis( - BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO, - powerStatsThrottlePeriodMobileRadio) - .setPowerStatsThrottlePeriodMillis( - BatteryConsumer.POWER_COMPONENT_WIFI, - powerStatsThrottlePeriodWifi) - .build(); + .setResetOnUnplugAfterSignificantCharge( + resetOnUnplugAfterSignificantCharge); + setPowerStatsThrottlePeriods(batteryStatsConfigBuilder, context.getResources().getString( + com.android.internal.R.string.config_powerStatsThrottlePeriods)); + mBatteryStatsConfig = batteryStatsConfigBuilder.build(); mPowerStatsUidResolver = new PowerStatsUidResolver(); mStats = new BatteryStatsImpl(mBatteryStatsConfig, Clock.SYSTEM_CLOCK, mMonotonicClock, systemDir, mHandler, this, this, mUserManagerUserInfoProvider, mPowerProfile, @@ -515,6 +505,26 @@ public final class BatteryStatsService extends IBatteryStats.Stub return config; } + private void setPowerStatsThrottlePeriods(BatteryStatsImpl.BatteryStatsConfig.Builder builder, + String configString) { + Matcher matcher = Pattern.compile("([^:]+):(\\d+)\\s*").matcher(configString); + while (matcher.find()) { + String powerComponentName = matcher.group(1); + long throttlePeriod; + try { + throttlePeriod = Long.parseLong(matcher.group(2)); + } catch (NumberFormatException nfe) { + throw new IllegalArgumentException( + "Invalid config_powerStatsThrottlePeriods format: " + configString); + } + if (powerComponentName.equals("*")) { + builder.setDefaultPowerStatsThrottlePeriodMillis(throttlePeriod); + } else { + builder.setPowerStatsThrottlePeriodMillis(powerComponentName, throttlePeriod); + } + } + } + /** * Creates an instance of BatteryStatsService and restores data from stored state. */ diff --git a/services/core/java/com/android/server/power/stats/BatteryStatsImpl.java b/services/core/java/com/android/server/power/stats/BatteryStatsImpl.java index 49c4000d7308..9a4155122402 100644 --- a/services/core/java/com/android/server/power/stats/BatteryStatsImpl.java +++ b/services/core/java/com/android/server/power/stats/BatteryStatsImpl.java @@ -463,11 +463,17 @@ public class BatteryStatsImpl extends BatteryStats { public static class BatteryStatsConfig { static final int RESET_ON_UNPLUG_HIGH_BATTERY_LEVEL_FLAG = 1 << 0; static final int RESET_ON_UNPLUG_AFTER_SIGNIFICANT_CHARGE_FLAG = 1 << 1; - static final long DEFAULT_POWER_STATS_COLLECTION_THROTTLE_PERIOD = - TimeUnit.HOURS.toMillis(1); private final int mFlags; - private SparseLongArray mPowerStatsThrottlePeriods; + private final Long mDefaultPowerStatsThrottlePeriod; + private final Map<String, Long> mPowerStatsThrottlePeriods; + + @VisibleForTesting + public BatteryStatsConfig() { + mFlags = 0; + mDefaultPowerStatsThrottlePeriod = 0L; + mPowerStatsThrottlePeriods = Map.of(); + } private BatteryStatsConfig(Builder builder) { int flags = 0; @@ -478,6 +484,7 @@ public class BatteryStatsImpl extends BatteryStats { flags |= RESET_ON_UNPLUG_AFTER_SIGNIFICANT_CHARGE_FLAG; } mFlags = flags; + mDefaultPowerStatsThrottlePeriod = builder.mDefaultPowerStatsThrottlePeriod; mPowerStatsThrottlePeriods = builder.mPowerStatsThrottlePeriods; } @@ -485,7 +492,7 @@ public class BatteryStatsImpl extends BatteryStats { * Returns whether a BatteryStats reset should occur on unplug when the battery level is * high. */ - boolean shouldResetOnUnplugHighBatteryLevel() { + public boolean shouldResetOnUnplugHighBatteryLevel() { return (mFlags & RESET_ON_UNPLUG_HIGH_BATTERY_LEVEL_FLAG) == RESET_ON_UNPLUG_HIGH_BATTERY_LEVEL_FLAG; } @@ -494,14 +501,18 @@ public class BatteryStatsImpl extends BatteryStats { * Returns whether a BatteryStats reset should occur on unplug if the battery charge a * significant amount since it has been plugged in. */ - boolean shouldResetOnUnplugAfterSignificantCharge() { + public boolean shouldResetOnUnplugAfterSignificantCharge() { return (mFlags & RESET_ON_UNPLUG_AFTER_SIGNIFICANT_CHARGE_FLAG) == RESET_ON_UNPLUG_AFTER_SIGNIFICANT_CHARGE_FLAG; } - long getPowerStatsThrottlePeriod(@BatteryConsumer.PowerComponent int powerComponent) { - return mPowerStatsThrottlePeriods.get(powerComponent, - DEFAULT_POWER_STATS_COLLECTION_THROTTLE_PERIOD); + /** + * Returns the minimum amount of time (in millis) to wait between passes + * of power stats collection for the specified power component. + */ + public long getPowerStatsThrottlePeriod(String powerComponentName) { + return mPowerStatsThrottlePeriods.getOrDefault(powerComponentName, + mDefaultPowerStatsThrottlePeriod); } /** @@ -510,18 +521,19 @@ public class BatteryStatsImpl extends BatteryStats { public static class Builder { private boolean mResetOnUnplugHighBatteryLevel; private boolean mResetOnUnplugAfterSignificantCharge; - private SparseLongArray mPowerStatsThrottlePeriods; + public static final long DEFAULT_POWER_STATS_THROTTLE_PERIOD = + TimeUnit.HOURS.toMillis(1); + public static final long DEFAULT_POWER_STATS_THROTTLE_PERIOD_CPU = + TimeUnit.MINUTES.toMillis(1); + private long mDefaultPowerStatsThrottlePeriod = DEFAULT_POWER_STATS_THROTTLE_PERIOD; + private final Map<String, Long> mPowerStatsThrottlePeriods = new HashMap<>(); public Builder() { mResetOnUnplugHighBatteryLevel = true; mResetOnUnplugAfterSignificantCharge = true; - mPowerStatsThrottlePeriods = new SparseLongArray(); - setPowerStatsThrottlePeriodMillis(BatteryConsumer.POWER_COMPONENT_CPU, - TimeUnit.MINUTES.toMillis(1)); - setPowerStatsThrottlePeriodMillis(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO, - TimeUnit.HOURS.toMillis(1)); - setPowerStatsThrottlePeriodMillis(BatteryConsumer.POWER_COMPONENT_WIFI, - TimeUnit.HOURS.toMillis(1)); + setPowerStatsThrottlePeriodMillis(BatteryConsumer.powerComponentIdToString( + BatteryConsumer.POWER_COMPONENT_CPU), + DEFAULT_POWER_STATS_THROTTLE_PERIOD_CPU); } /** @@ -553,9 +565,18 @@ public class BatteryStatsImpl extends BatteryStats { * Sets the minimum amount of time (in millis) to wait between passes * of power stats collection for the specified power component. */ - public Builder setPowerStatsThrottlePeriodMillis( - @BatteryConsumer.PowerComponent int powerComponent, long periodMs) { - mPowerStatsThrottlePeriods.put(powerComponent, periodMs); + public Builder setPowerStatsThrottlePeriodMillis(String powerComponentName, + long periodMs) { + mPowerStatsThrottlePeriods.put(powerComponentName, periodMs); + return this; + } + + /** + * Sets the minimum amount of time (in millis) to wait between passes + * of power stats collection for any components not configured explicitly. + */ + public Builder setDefaultPowerStatsThrottlePeriodMillis(long periodMs) { + mDefaultPowerStatsThrottlePeriod = periodMs; return this; } } @@ -1586,8 +1607,7 @@ public class BatteryStatsImpl extends BatteryStats { protected final Constants mConstants; @VisibleForTesting - @GuardedBy("this") - protected BatteryStatsConfig mBatteryStatsConfig; + protected final BatteryStatsConfig mBatteryStatsConfig; @GuardedBy("this") private AlarmManager mAlarmManager = null; @@ -1933,6 +1953,11 @@ public class BatteryStatsImpl extends BatteryStats { } @Override + public long getPowerStatsCollectionThrottlePeriod(String powerComponentName) { + return mBatteryStatsConfig.getPowerStatsThrottlePeriod(powerComponentName); + } + + @Override public PowerStatsUidResolver getUidResolver() { return mPowerStatsUidResolver; } @@ -11167,19 +11192,14 @@ public class BatteryStatsImpl extends BatteryStats { mConstants.MAX_HISTORY_FILES, mConstants.MAX_HISTORY_BUFFER, mStepDetailsCalculator, mClock, mMonotonicClock, traceDelegate, eventLogger); - mCpuPowerStatsCollector = new CpuPowerStatsCollector(mPowerStatsCollectorInjector, - mBatteryStatsConfig.getPowerStatsThrottlePeriod( - BatteryConsumer.POWER_COMPONENT_CPU)); + mCpuPowerStatsCollector = new CpuPowerStatsCollector(mPowerStatsCollectorInjector); mCpuPowerStatsCollector.addConsumer(this::recordPowerStats); mMobileRadioPowerStatsCollector = new MobileRadioPowerStatsCollector( - mPowerStatsCollectorInjector, mBatteryStatsConfig.getPowerStatsThrottlePeriod( - BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO)); + mPowerStatsCollectorInjector); mMobileRadioPowerStatsCollector.addConsumer(this::recordPowerStats); - mWifiPowerStatsCollector = new WifiPowerStatsCollector( - mPowerStatsCollectorInjector, mBatteryStatsConfig.getPowerStatsThrottlePeriod( - BatteryConsumer.POWER_COMPONENT_WIFI)); + mWifiPowerStatsCollector = new WifiPowerStatsCollector(mPowerStatsCollectorInjector); mWifiPowerStatsCollector.addConsumer(this::recordPowerStats); mStartCount++; diff --git a/services/core/java/com/android/server/power/stats/CpuPowerStatsCollector.java b/services/core/java/com/android/server/power/stats/CpuPowerStatsCollector.java index f53a1b0682c0..b5ef67b44e75 100644 --- a/services/core/java/com/android/server/power/stats/CpuPowerStatsCollector.java +++ b/services/core/java/com/android/server/power/stats/CpuPowerStatsCollector.java @@ -59,6 +59,7 @@ public class CpuPowerStatsCollector extends PowerStatsCollector { KernelCpuStatsReader getKernelCpuStatsReader(); ConsumedEnergyRetriever getConsumedEnergyRetriever(); IntSupplier getVoltageSupplier(); + long getPowerStatsCollectionThrottlePeriod(String powerComponentName); default int getDefaultCpuPowerBrackets() { return DEFAULT_CPU_POWER_BRACKETS; @@ -94,9 +95,11 @@ public class CpuPowerStatsCollector extends PowerStatsCollector { private int mLastVoltageMv; private long[] mLastConsumedEnergyUws; - public CpuPowerStatsCollector(Injector injector, long throttlePeriodMs) { - super(injector.getHandler(), throttlePeriodMs, injector.getUidResolver(), - injector.getClock()); + CpuPowerStatsCollector(Injector injector) { + super(injector.getHandler(), injector.getPowerStatsCollectionThrottlePeriod( + BatteryConsumer.powerComponentIdToString( + BatteryConsumer.POWER_COMPONENT_CPU)), + injector.getUidResolver(), injector.getClock()); mInjector = injector; } diff --git a/services/core/java/com/android/server/power/stats/MobileRadioPowerStatsCollector.java b/services/core/java/com/android/server/power/stats/MobileRadioPowerStatsCollector.java index 7bc681752802..a96e01bdeadf 100644 --- a/services/core/java/com/android/server/power/stats/MobileRadioPowerStatsCollector.java +++ b/services/core/java/com/android/server/power/stats/MobileRadioPowerStatsCollector.java @@ -73,6 +73,7 @@ public class MobileRadioPowerStatsCollector extends PowerStatsCollector { Handler getHandler(); Clock getClock(); PowerStatsUidResolver getUidResolver(); + long getPowerStatsCollectionThrottlePeriod(String powerComponentName); PackageManager getPackageManager(); ConsumedEnergyRetriever getConsumedEnergyRetriever(); IntSupplier getVoltageSupplier(); @@ -104,8 +105,11 @@ public class MobileRadioPowerStatsCollector extends PowerStatsCollector { private long mLastCallDuration; private long mLastScanDuration; - public MobileRadioPowerStatsCollector(Injector injector, long throttlePeriodMs) { - super(injector.getHandler(), throttlePeriodMs, injector.getUidResolver(), + MobileRadioPowerStatsCollector(Injector injector) { + super(injector.getHandler(), injector.getPowerStatsCollectionThrottlePeriod( + BatteryConsumer.powerComponentIdToString( + BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO)), + injector.getUidResolver(), injector.getClock()); mInjector = injector; } diff --git a/services/core/java/com/android/server/power/stats/WifiPowerStatsCollector.java b/services/core/java/com/android/server/power/stats/WifiPowerStatsCollector.java index 632105352ad2..bd04199fc227 100644 --- a/services/core/java/com/android/server/power/stats/WifiPowerStatsCollector.java +++ b/services/core/java/com/android/server/power/stats/WifiPowerStatsCollector.java @@ -56,6 +56,7 @@ public class WifiPowerStatsCollector extends PowerStatsCollector { Handler getHandler(); Clock getClock(); PowerStatsUidResolver getUidResolver(); + long getPowerStatsCollectionThrottlePeriod(String powerComponentName); PackageManager getPackageManager(); ConsumedEnergyRetriever getConsumedEnergyRetriever(); IntSupplier getVoltageSupplier(); @@ -92,9 +93,11 @@ public class WifiPowerStatsCollector extends PowerStatsCollector { private final SparseArray<WifiScanTimes> mLastScanTimes = new SparseArray<>(); private long mLastWifiActiveDuration; - public WifiPowerStatsCollector(Injector injector, long throttlePeriodMs) { - super(injector.getHandler(), throttlePeriodMs, injector.getUidResolver(), - injector.getClock()); + WifiPowerStatsCollector(Injector injector) { + super(injector.getHandler(), injector.getPowerStatsCollectionThrottlePeriod( + BatteryConsumer.powerComponentIdToString( + BatteryConsumer.POWER_COMPONENT_WIFI)), + injector.getUidResolver(), injector.getClock()); mInjector = injector; } diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsResetTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsResetTest.java index d29bf1abd7a3..3635e9a749e2 100644 --- a/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsResetTest.java +++ b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryStatsResetTest.java @@ -19,6 +19,7 @@ package com.android.server.power.stats; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; import android.content.Context; import android.os.BatteryManager; @@ -49,9 +50,9 @@ public class BatteryStatsResetTest { private static final int BATTERY_CHARGE_RATE_SECONDS_PER_LEVEL = 100; private MockClock mMockClock; + private BatteryStatsImpl.BatteryStatsConfig mConfig; private MockBatteryStatsImpl mBatteryStatsImpl; - /** * Battery status. Must be one of the following: * {@link BatteryManager#BATTERY_STATUS_UNKNOWN} @@ -91,8 +92,9 @@ public class BatteryStatsResetTest { @Before public void setUp() throws IOException { + mConfig = mock(BatteryStatsImpl.BatteryStatsConfig.class); mMockClock = new MockClock(); - mBatteryStatsImpl = new MockBatteryStatsImpl(mMockClock, + mBatteryStatsImpl = new MockBatteryStatsImpl(mConfig, mMockClock, Files.createTempDirectory("BatteryStatsResetTest").toFile()); mBatteryStatsImpl.onSystemReady(mock(Context.class)); @@ -110,10 +112,7 @@ public class BatteryStatsResetTest { @Test public void testResetOnUnplug_highBatteryLevel() { - mBatteryStatsImpl.setBatteryStatsConfig( - new BatteryStatsImpl.BatteryStatsConfig.Builder() - .setResetOnUnplugHighBatteryLevel(true) - .build()); + when(mConfig.shouldResetOnUnplugHighBatteryLevel()).thenReturn(true); long expectedResetTimeUs = 0; @@ -137,10 +136,7 @@ public class BatteryStatsResetTest { assertThat(mBatteryStatsImpl.getStatsStartRealtime()).isEqualTo(expectedResetTimeUs); // disable high battery level reset on unplug. - mBatteryStatsImpl.setBatteryStatsConfig( - new BatteryStatsImpl.BatteryStatsConfig.Builder() - .setResetOnUnplugHighBatteryLevel(false) - .build()); + when(mConfig.shouldResetOnUnplugHighBatteryLevel()).thenReturn(false); dischargeToLevel(60); @@ -153,10 +149,7 @@ public class BatteryStatsResetTest { @Test public void testResetOnUnplug_significantCharge() { - mBatteryStatsImpl.setBatteryStatsConfig( - new BatteryStatsImpl.BatteryStatsConfig.Builder() - .setResetOnUnplugAfterSignificantCharge(true) - .build()); + when(mConfig.shouldResetOnUnplugAfterSignificantCharge()).thenReturn(true); long expectedResetTimeUs = 0; unplugBattery(); @@ -186,10 +179,7 @@ public class BatteryStatsResetTest { assertThat(mBatteryStatsImpl.getStatsStartRealtime()).isEqualTo(expectedResetTimeUs); // disable reset on unplug after significant charge. - mBatteryStatsImpl.setBatteryStatsConfig( - new BatteryStatsImpl.BatteryStatsConfig.Builder() - .setResetOnUnplugAfterSignificantCharge(false) - .build()); + when(mConfig.shouldResetOnUnplugAfterSignificantCharge()).thenReturn(false); // Battery level dropped below 20%. dischargeToLevel(15); @@ -256,11 +246,9 @@ public class BatteryStatsResetTest { @Test public void testResetWhilePluggedIn_longPlugIn() { // disable high battery level reset on unplug. - mBatteryStatsImpl.setBatteryStatsConfig( - new BatteryStatsImpl.BatteryStatsConfig.Builder() - .setResetOnUnplugHighBatteryLevel(false) - .setResetOnUnplugAfterSignificantCharge(false) - .build()); + when(mConfig.shouldResetOnUnplugHighBatteryLevel()).thenReturn(false); + when(mConfig.shouldResetOnUnplugAfterSignificantCharge()).thenReturn(false); + long expectedResetTimeUs = 0; plugBattery(BatteryManager.BATTERY_PLUGGED_USB); diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryUsageStatsRule.java b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryUsageStatsRule.java index 2d7cb2245c0a..6edfedee9e5b 100644 --- a/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryUsageStatsRule.java +++ b/services/tests/powerstatstests/src/com/android/server/power/stats/BatteryUsageStatsRule.java @@ -98,10 +98,12 @@ public class BatteryUsageStatsRule implements TestRule { mFreqsByPolicy.put(0, new int[]{300000, 1000000, 2000000}); mFreqsByPolicy.put(4, new int[]{300000, 1000000, 2500000, 3000000}); mBatteryStatsConfigBuilder = new BatteryStatsImpl.BatteryStatsConfig.Builder() - .setPowerStatsThrottlePeriodMillis(BatteryConsumer.POWER_COMPONENT_CPU, - 10000) - .setPowerStatsThrottlePeriodMillis(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO, - 10000); + .setPowerStatsThrottlePeriodMillis( + BatteryConsumer.powerComponentIdToString( + BatteryConsumer.POWER_COMPONENT_CPU), 10000) + .setPowerStatsThrottlePeriodMillis( + BatteryConsumer.powerComponentIdToString( + BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO), 10000); } private void initBatteryStats() { @@ -290,7 +292,8 @@ public class BatteryUsageStatsRule implements TestRule { public BatteryUsageStatsRule setPowerStatsThrottlePeriodMillis(int powerComponent, long throttleMs) { - mBatteryStatsConfigBuilder.setPowerStatsThrottlePeriodMillis(powerComponent, throttleMs); + mBatteryStatsConfigBuilder.setPowerStatsThrottlePeriodMillis( + BatteryConsumer.powerComponentIdToString(powerComponent), throttleMs); return this; } diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/CpuPowerStatsCollectorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/CpuPowerStatsCollectorTest.java index b5bdafeb4696..d1105a4a9077 100644 --- a/services/tests/powerstatstests/src/com/android/server/power/stats/CpuPowerStatsCollectorTest.java +++ b/services/tests/powerstatstests/src/com/android/server/power/stats/CpuPowerStatsCollectorTest.java @@ -129,6 +129,11 @@ public class CpuPowerStatsCollectorTest { } @Override + public long getPowerStatsCollectionThrottlePeriod(String powerComponentName) { + return 0; + } + + @Override public int getDefaultCpuPowerBrackets() { return mDefaultCpuPowerBrackets; } @@ -418,8 +423,8 @@ public class CpuPowerStatsCollectorTest { private CpuPowerStatsCollector createCollector(int defaultCpuPowerBrackets, int defaultCpuPowerBracketsPerEnergyConsumer) { CpuPowerStatsCollector collector = new CpuPowerStatsCollector( - new TestInjector(defaultCpuPowerBrackets, defaultCpuPowerBracketsPerEnergyConsumer), - 0); + new TestInjector(defaultCpuPowerBrackets, defaultCpuPowerBracketsPerEnergyConsumer) + ); collector.addConsumer(stats -> mCollectedStats = stats); collector.setEnabled(true); return collector; diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/MobileRadioPowerStatsCollectorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/MobileRadioPowerStatsCollectorTest.java index ca58db1bcad5..0275319a40e2 100644 --- a/services/tests/powerstatstests/src/com/android/server/power/stats/MobileRadioPowerStatsCollectorTest.java +++ b/services/tests/powerstatstests/src/com/android/server/power/stats/MobileRadioPowerStatsCollectorTest.java @@ -123,6 +123,11 @@ public class MobileRadioPowerStatsCollectorTest { } @Override + public long getPowerStatsCollectionThrottlePeriod(String powerComponentName) { + return 0; + } + + @Override public PackageManager getPackageManager() { return mPackageManager; } @@ -348,7 +353,7 @@ public class MobileRadioPowerStatsCollectorTest { } private PowerStats collectPowerStats(boolean perNetworkTypeData) throws Throwable { - MobileRadioPowerStatsCollector collector = new MobileRadioPowerStatsCollector(mInjector, 0); + MobileRadioPowerStatsCollector collector = new MobileRadioPowerStatsCollector(mInjector); collector.setEnabled(true); when(mConsumedEnergyRetriever.getEnergyConsumerIds( diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/MobileRadioPowerStatsProcessorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/MobileRadioPowerStatsProcessorTest.java index d80ffb4a66c8..29ef3b6551a6 100644 --- a/services/tests/powerstatstests/src/com/android/server/power/stats/MobileRadioPowerStatsProcessorTest.java +++ b/services/tests/powerstatstests/src/com/android/server/power/stats/MobileRadioPowerStatsProcessorTest.java @@ -114,6 +114,11 @@ public class MobileRadioPowerStatsProcessorTest { } @Override + public long getPowerStatsCollectionThrottlePeriod(String powerComponentName) { + return 0; + } + + @Override public PackageManager getPackageManager() { return mPackageManager; } @@ -186,7 +191,7 @@ public class MobileRadioPowerStatsProcessorTest { aggregatedStats.setUidState(APP_UID, STATE_PROCESS_STATE, PROCESS_STATE_FOREGROUND, 0); aggregatedStats.setUidState(APP_UID2, STATE_PROCESS_STATE, PROCESS_STATE_CACHED, 0); - MobileRadioPowerStatsCollector collector = new MobileRadioPowerStatsCollector(mInjector, 0); + MobileRadioPowerStatsCollector collector = new MobileRadioPowerStatsCollector(mInjector); collector.setEnabled(true); // Initial empty ModemActivityInfo. @@ -425,7 +430,7 @@ public class MobileRadioPowerStatsProcessorTest { aggregatedStats.setUidState(APP_UID, STATE_PROCESS_STATE, PROCESS_STATE_FOREGROUND, 0); aggregatedStats.setUidState(APP_UID2, STATE_PROCESS_STATE, PROCESS_STATE_CACHED, 0); - MobileRadioPowerStatsCollector collector = new MobileRadioPowerStatsCollector(mInjector, 0); + MobileRadioPowerStatsCollector collector = new MobileRadioPowerStatsCollector(mInjector); collector.setEnabled(true); // Initial empty ModemActivityInfo. diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/MockBatteryStatsImpl.java b/services/tests/powerstatstests/src/com/android/server/power/stats/MockBatteryStatsImpl.java index 1d48975c086e..2c03f9d1a9aa 100644 --- a/services/tests/powerstatstests/src/com/android/server/power/stats/MockBatteryStatsImpl.java +++ b/services/tests/powerstatstests/src/com/android/server/power/stats/MockBatteryStatsImpl.java @@ -72,6 +72,11 @@ public class MockBatteryStatsImpl extends BatteryStatsImpl { this(DEFAULT_CONFIG, clock, historyDirectory, handler, new PowerStatsUidResolver()); } + MockBatteryStatsImpl(BatteryStatsConfig config, Clock clock, File historyDirectory) { + this(config, clock, historyDirectory, new Handler(Looper.getMainLooper()), + new PowerStatsUidResolver()); + } + MockBatteryStatsImpl(BatteryStatsConfig config, Clock clock, File historyDirectory, Handler handler, PowerStatsUidResolver powerStatsUidResolver) { super(config, clock, new MonotonicClock(0, clock), historyDirectory, handler, @@ -137,13 +142,6 @@ public class MockBatteryStatsImpl extends BatteryStatsImpl { return MOBILE_RADIO_POWER_STATE_UPDATE_FREQ_MS; } - public MockBatteryStatsImpl setBatteryStatsConfig(BatteryStatsConfig config) { - synchronized (this) { - mBatteryStatsConfig = config; - } - return this; - } - public MockBatteryStatsImpl setNetworkStats(NetworkStats networkStats) { mNetworkStats = networkStats; return this; diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/PhoneCallPowerStatsProcessorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/PhoneCallPowerStatsProcessorTest.java index dadcf3f3871e..69d655bc35c0 100644 --- a/services/tests/powerstatstests/src/com/android/server/power/stats/PhoneCallPowerStatsProcessorTest.java +++ b/services/tests/powerstatstests/src/com/android/server/power/stats/PhoneCallPowerStatsProcessorTest.java @@ -98,6 +98,11 @@ public class PhoneCallPowerStatsProcessorTest { } @Override + public long getPowerStatsCollectionThrottlePeriod(String powerComponentName) { + return 0; + } + + @Override public PackageManager getPackageManager() { return mPackageManager; } @@ -175,7 +180,7 @@ public class PhoneCallPowerStatsProcessorTest { aggregatedPowerStats.setDeviceState(STATE_POWER, POWER_STATE_OTHER, 0); aggregatedPowerStats.setDeviceState(STATE_SCREEN, SCREEN_STATE_ON, 0); - MobileRadioPowerStatsCollector collector = new MobileRadioPowerStatsCollector(mInjector, 0); + MobileRadioPowerStatsCollector collector = new MobileRadioPowerStatsCollector(mInjector); collector.setEnabled(true); // Initial empty ModemActivityInfo. diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/WifiPowerStatsCollectorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/WifiPowerStatsCollectorTest.java index b4c012b3460f..a280cfe176a3 100644 --- a/services/tests/powerstatstests/src/com/android/server/power/stats/WifiPowerStatsCollectorTest.java +++ b/services/tests/powerstatstests/src/com/android/server/power/stats/WifiPowerStatsCollectorTest.java @@ -138,6 +138,11 @@ public class WifiPowerStatsCollectorTest { } @Override + public long getPowerStatsCollectionThrottlePeriod(String powerComponentName) { + return 0; + } + + @Override public PackageManager getPackageManager() { return mPackageManager; } @@ -317,7 +322,7 @@ public class WifiPowerStatsCollectorTest { private PowerStats collectPowerStats(boolean hasPowerReporting) { when(mWifiManager.isEnhancedPowerReportingSupported()).thenReturn(hasPowerReporting); - WifiPowerStatsCollector collector = new WifiPowerStatsCollector(mInjector, 0); + WifiPowerStatsCollector collector = new WifiPowerStatsCollector(mInjector); collector.setEnabled(true); when(mConsumedEnergyRetriever.getEnergyConsumerIds(EnergyConsumerType.WIFI)) diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/WifiPowerStatsProcessorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/WifiPowerStatsProcessorTest.java index 257a1a67f7b0..3ceaf357150e 100644 --- a/services/tests/powerstatstests/src/com/android/server/power/stats/WifiPowerStatsProcessorTest.java +++ b/services/tests/powerstatstests/src/com/android/server/power/stats/WifiPowerStatsProcessorTest.java @@ -142,6 +142,11 @@ public class WifiPowerStatsProcessorTest { } @Override + public long getPowerStatsCollectionThrottlePeriod(String powerComponentName) { + return 0; + } + + @Override public PackageManager getPackageManager() { return mPackageManager; } @@ -195,7 +200,7 @@ public class WifiPowerStatsProcessorTest { PowerComponentAggregatedPowerStats aggregatedStats = createAggregatedPowerStats(processor); - WifiPowerStatsCollector collector = new WifiPowerStatsCollector(mInjector, 0); + WifiPowerStatsCollector collector = new WifiPowerStatsCollector(mInjector); collector.setEnabled(true); // Initial empty WifiActivityEnergyInfo. @@ -307,7 +312,7 @@ public class WifiPowerStatsProcessorTest { PowerComponentAggregatedPowerStats aggregatedStats = createAggregatedPowerStats(processor); - WifiPowerStatsCollector collector = new WifiPowerStatsCollector(mInjector, 0); + WifiPowerStatsCollector collector = new WifiPowerStatsCollector(mInjector); collector.setEnabled(true); // Initial empty WifiActivityEnergyInfo. @@ -420,7 +425,7 @@ public class WifiPowerStatsProcessorTest { PowerComponentAggregatedPowerStats aggregatedStats = createAggregatedPowerStats(processor); - WifiPowerStatsCollector collector = new WifiPowerStatsCollector(mInjector, 0); + WifiPowerStatsCollector collector = new WifiPowerStatsCollector(mInjector); collector.setEnabled(true); // Establish a baseline |