diff options
21 files changed, 222 insertions, 197 deletions
diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java index 4aac7a0a04eb..5137b4c72fae 100644 --- a/services/core/java/com/android/server/am/BatteryStatsService.java +++ b/services/core/java/com/android/server/am/BatteryStatsService.java @@ -488,8 +488,8 @@ public final class BatteryStatsService extends IBatteryStats.Stub AggregatedPowerStatsConfig.STATE_POWER, AggregatedPowerStatsConfig.STATE_SCREEN, AggregatedPowerStatsConfig.STATE_PROCESS_STATE) - .setProcessor( - new CpuPowerStatsProcessor(mPowerProfile, mCpuScalingPolicies)); + .setProcessorSupplier( + () -> new CpuPowerStatsProcessor(mPowerProfile, mCpuScalingPolicies)); config.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_SCREEN) .trackDeviceStates( @@ -498,12 +498,12 @@ public final class BatteryStatsService extends IBatteryStats.Stub .trackUidStates( AggregatedPowerStatsConfig.STATE_POWER, AggregatedPowerStatsConfig.STATE_SCREEN) - .setProcessor( - new ScreenPowerStatsProcessor(mPowerProfile)); + .setProcessorSupplier( + () -> new ScreenPowerStatsProcessor(mPowerProfile)); config.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_AMBIENT_DISPLAY, BatteryConsumer.POWER_COMPONENT_SCREEN) - .setProcessor(new AmbientDisplayPowerStatsProcessor()); + .setProcessorSupplier(AmbientDisplayPowerStatsProcessor::new); config.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO) .trackDeviceStates( @@ -513,12 +513,12 @@ public final class BatteryStatsService extends IBatteryStats.Stub AggregatedPowerStatsConfig.STATE_POWER, AggregatedPowerStatsConfig.STATE_SCREEN, AggregatedPowerStatsConfig.STATE_PROCESS_STATE) - .setProcessor( - new MobileRadioPowerStatsProcessor(mPowerProfile)); + .setProcessorSupplier( + () -> new MobileRadioPowerStatsProcessor(mPowerProfile)); config.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_PHONE, BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO) - .setProcessor(new PhoneCallPowerStatsProcessor()); + .setProcessorSupplier(PhoneCallPowerStatsProcessor::new); config.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_WIFI) .trackDeviceStates( @@ -528,8 +528,8 @@ public final class BatteryStatsService extends IBatteryStats.Stub AggregatedPowerStatsConfig.STATE_POWER, AggregatedPowerStatsConfig.STATE_SCREEN, AggregatedPowerStatsConfig.STATE_PROCESS_STATE) - .setProcessor( - new WifiPowerStatsProcessor(mPowerProfile)); + .setProcessorSupplier( + () -> new WifiPowerStatsProcessor(mPowerProfile)); config.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_BLUETOOTH) .trackDeviceStates( @@ -539,8 +539,8 @@ public final class BatteryStatsService extends IBatteryStats.Stub AggregatedPowerStatsConfig.STATE_POWER, AggregatedPowerStatsConfig.STATE_SCREEN, AggregatedPowerStatsConfig.STATE_PROCESS_STATE) - .setProcessor( - new BluetoothPowerStatsProcessor(mPowerProfile)); + .setProcessorSupplier( + () -> new BluetoothPowerStatsProcessor(mPowerProfile)); config.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_AUDIO) .trackDeviceStates( @@ -550,8 +550,8 @@ public final class BatteryStatsService extends IBatteryStats.Stub AggregatedPowerStatsConfig.STATE_POWER, AggregatedPowerStatsConfig.STATE_SCREEN, AggregatedPowerStatsConfig.STATE_PROCESS_STATE) - .setProcessor( - new AudioPowerStatsProcessor(mPowerProfile, mPowerStatsUidResolver)); + .setProcessorSupplier( + () -> new AudioPowerStatsProcessor(mPowerProfile, mPowerStatsUidResolver)); config.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_VIDEO) .trackDeviceStates( @@ -561,7 +561,8 @@ public final class BatteryStatsService extends IBatteryStats.Stub AggregatedPowerStatsConfig.STATE_POWER, AggregatedPowerStatsConfig.STATE_SCREEN, AggregatedPowerStatsConfig.STATE_PROCESS_STATE) - .setProcessor(new VideoPowerStatsProcessor(mPowerProfile, mPowerStatsUidResolver)); + .setProcessorSupplier( + () -> new VideoPowerStatsProcessor(mPowerProfile, mPowerStatsUidResolver)); config.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_FLASHLIGHT) .trackDeviceStates( @@ -571,8 +572,9 @@ public final class BatteryStatsService extends IBatteryStats.Stub AggregatedPowerStatsConfig.STATE_POWER, AggregatedPowerStatsConfig.STATE_SCREEN, AggregatedPowerStatsConfig.STATE_PROCESS_STATE) - .setProcessor( - new FlashlightPowerStatsProcessor(mPowerProfile, mPowerStatsUidResolver)); + .setProcessorSupplier( + () -> new FlashlightPowerStatsProcessor(mPowerProfile, + mPowerStatsUidResolver)); config.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_CAMERA) .trackDeviceStates( @@ -582,8 +584,8 @@ public final class BatteryStatsService extends IBatteryStats.Stub AggregatedPowerStatsConfig.STATE_POWER, AggregatedPowerStatsConfig.STATE_SCREEN, AggregatedPowerStatsConfig.STATE_PROCESS_STATE) - .setProcessor( - new CameraPowerStatsProcessor(mPowerProfile, mPowerStatsUidResolver)); + .setProcessorSupplier( + () -> new CameraPowerStatsProcessor(mPowerProfile, mPowerStatsUidResolver)); config.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_GNSS) .trackDeviceStates( @@ -593,8 +595,8 @@ public final class BatteryStatsService extends IBatteryStats.Stub AggregatedPowerStatsConfig.STATE_POWER, AggregatedPowerStatsConfig.STATE_SCREEN, AggregatedPowerStatsConfig.STATE_PROCESS_STATE) - .setProcessor( - new GnssPowerStatsProcessor(mPowerProfile, mPowerStatsUidResolver)); + .setProcessorSupplier( + () -> new GnssPowerStatsProcessor(mPowerProfile, mPowerStatsUidResolver)); config.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_SENSORS) .trackDeviceStates( @@ -604,7 +606,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub AggregatedPowerStatsConfig.STATE_POWER, AggregatedPowerStatsConfig.STATE_SCREEN, AggregatedPowerStatsConfig.STATE_PROCESS_STATE) - .setProcessor(new SensorPowerStatsProcessor( + .setProcessorSupplier(() -> new SensorPowerStatsProcessor( () -> mContext.getSystemService(SensorManager.class))); config.trackCustomPowerComponents(CustomEnergyConsumerPowerStatsProcessor::new) diff --git a/services/core/java/com/android/server/power/stats/AggregatedPowerStats.java b/services/core/java/com/android/server/power/stats/AggregatedPowerStats.java index 7496d2d0689d..674b4bc29ffa 100644 --- a/services/core/java/com/android/server/power/stats/AggregatedPowerStats.java +++ b/services/core/java/com/android/server/power/stats/AggregatedPowerStats.java @@ -174,8 +174,7 @@ class AggregatedPowerStats { void start(long timestampMs) { for (int i = 0; i < mPowerComponentStats.size(); i++) { - PowerComponentAggregatedPowerStats component = mPowerComponentStats.valueAt(i); - component.getConfig().getProcessor().start(component, timestampMs); + mPowerComponentStats.valueAt(i).start(timestampMs); } } @@ -211,24 +210,23 @@ class AggregatedPowerStats { stats = new PowerComponentAggregatedPowerStats(this, powerComponent); stats.setPowerStatsDescriptor(powerStats.descriptor); stats.copyStatesFrom(mGenericPowerComponent); + stats.start(time); mPowerComponentStats.put(powerComponentId, stats); } - PowerStatsProcessor processor = stats.getConfig().getProcessor(); - processor.addPowerStats(stats, powerStats, time); + stats.addPowerStats(powerStats, time); } public void noteStateChange(BatteryStats.HistoryItem item) { for (int i = 0; i < mPowerComponentStats.size(); i++) { - PowerComponentAggregatedPowerStats stats = mPowerComponentStats.valueAt(i); - stats.getConfig().getProcessor().noteStateChange(stats, item); + mPowerComponentStats.valueAt(i).noteStateChange(item); } } void finish(long timestampMs) { for (int i = 0; i < mPowerComponentStats.size(); i++) { PowerComponentAggregatedPowerStats component = mPowerComponentStats.valueAt(i); - component.getConfig().getProcessor().finish(component, timestampMs); + component.finish(timestampMs); } } diff --git a/services/core/java/com/android/server/power/stats/AggregatedPowerStatsConfig.java b/services/core/java/com/android/server/power/stats/AggregatedPowerStatsConfig.java index 1f4a3915e1ff..ec122282e863 100644 --- a/services/core/java/com/android/server/power/stats/AggregatedPowerStatsConfig.java +++ b/services/core/java/com/android/server/power/stats/AggregatedPowerStatsConfig.java @@ -74,7 +74,7 @@ public class AggregatedPowerStatsConfig { private final int mPowerComponentId; private @TrackedState int[] mTrackedDeviceStates; private @TrackedState int[] mTrackedUidStates; - private PowerStatsProcessor mProcessor = NO_OP_PROCESSOR; + private Supplier<PowerStatsProcessor> mProcessorSupplier; PowerComponent(int powerComponentId) { this.mPowerComponentId = powerComponentId; @@ -103,12 +103,13 @@ public class AggregatedPowerStatsConfig { } /** - * Takes an object that should be invoked for every aggregated stats span - * before giving the aggregates stats to consumers. The processor can complete the - * aggregation process, for example by computing estimated power usage. + * A PowerStatsProcessor takes an object that should be invoked for every aggregated + * stats span before giving the aggregates stats to consumers. The processor can complete + * the aggregation process, for example by computing estimated power usage. */ - public PowerComponent setProcessor(@NonNull PowerStatsProcessor processor) { - mProcessor = processor; + public PowerComponent setProcessorSupplier( + @NonNull Supplier<PowerStatsProcessor> processorSupplier) { + mProcessorSupplier = processorSupplier; return this; } @@ -142,8 +143,11 @@ public class AggregatedPowerStatsConfig { } @NonNull - PowerStatsProcessor getProcessor() { - return mProcessor; + PowerStatsProcessor createProcessor() { + if (mProcessorSupplier == null) { + return NO_OP_PROCESSOR; + } + return mProcessorSupplier.get(); } private boolean isTracked(int[] trackedStates, int state) { @@ -236,7 +240,7 @@ public class AggregatedPowerStatsConfig { powerComponent.trackUidStates(mCustomPowerComponent.mTrackedUidStates); if (mCustomPowerStatsProcessorFactory != null) { - powerComponent.setProcessor(mCustomPowerStatsProcessorFactory.get()); + powerComponent.setProcessorSupplier(mCustomPowerStatsProcessorFactory); } return powerComponent; diff --git a/services/core/java/com/android/server/power/stats/BinaryStatePowerStatsProcessor.java b/services/core/java/com/android/server/power/stats/BinaryStatePowerStatsProcessor.java index 599e63d12906..393fa39cdff6 100644 --- a/services/core/java/com/android/server/power/stats/BinaryStatePowerStatsProcessor.java +++ b/services/core/java/com/android/server/power/stats/BinaryStatePowerStatsProcessor.java @@ -163,7 +163,7 @@ abstract class BinaryStatePowerStatsProcessor extends PowerStatsProcessor { private void flushPowerStats(PowerComponentAggregatedPowerStats stats, long timestamp) { mPowerStats.durationMs = timestamp - mLastUpdateTimestamp; - stats.addPowerStats(mPowerStats, timestamp); + stats.addProcessedPowerStats(mPowerStats, timestamp); Arrays.fill(mPowerStats.stats, 0); mPowerStats.uidStats.clear(); diff --git a/services/core/java/com/android/server/power/stats/PowerComponentAggregatedPowerStats.java b/services/core/java/com/android/server/power/stats/PowerComponentAggregatedPowerStats.java index 950674147861..a92a6fd3e3d5 100644 --- a/services/core/java/com/android/server/power/stats/PowerComponentAggregatedPowerStats.java +++ b/services/core/java/com/android/server/power/stats/PowerComponentAggregatedPowerStats.java @@ -20,6 +20,7 @@ import static com.android.server.power.stats.MultiStateStats.STATE_DOES_NOT_EXIS import android.annotation.NonNull; import android.annotation.Nullable; +import android.os.BatteryStats; import android.os.UserHandle; import android.util.IndentingPrintWriter; import android.util.Slog; @@ -64,6 +65,7 @@ class PowerComponentAggregatedPowerStats { private final MultiStateStats.States[] mUidStateConfig; private final int[] mDeviceStates; + private PowerStatsProcessor mProcessor; private MultiStateStats.Factory mStatsFactory; private MultiStateStats.Factory mStateStatsFactory; private MultiStateStats.Factory mUidStatsFactory; @@ -110,6 +112,21 @@ class PowerComponentAggregatedPowerStats { mPowerStatsDescriptor = powerStatsDescriptor; } + void start(long timestampMs) { + if (mProcessor == null) { + mProcessor = mConfig.createProcessor(); + } + mProcessor.start(this, timestampMs); + } + + void finish(long timestampMs) { + mProcessor.finish(this, timestampMs); + } + + void noteStateChange(BatteryStats.HistoryItem item) { + mProcessor.noteStateChange(this, item); + } + void setState(@AggregatedPowerStatsConfig.TrackedState int stateId, int state, long timestampMs) { if (mDeviceStats == null) { @@ -183,6 +200,14 @@ class PowerComponentAggregatedPowerStats { } void addPowerStats(PowerStats powerStats, long timestampMs) { + // Should call powerStats.addProcessedPowerStats + mProcessor.addPowerStats(this, powerStats, timestampMs); + } + + /** + * Should be called ONLY by PowerStatsProcessor.processPowerStats. + */ + void addProcessedPowerStats(PowerStats powerStats, long timestampMs) { mPowerStatsDescriptor = powerStats.descriptor; if (mDeviceStats == null) { diff --git a/services/core/java/com/android/server/power/stats/PowerStatsProcessor.java b/services/core/java/com/android/server/power/stats/PowerStatsProcessor.java index c81c7ffe5371..6a8c6b124674 100644 --- a/services/core/java/com/android/server/power/stats/PowerStatsProcessor.java +++ b/services/core/java/com/android/server/power/stats/PowerStatsProcessor.java @@ -57,7 +57,7 @@ public abstract class PowerStatsProcessor { void addPowerStats(PowerComponentAggregatedPowerStats stats, PowerStats powerStats, long timestampMs) { - stats.addPowerStats(powerStats, timestampMs); + stats.addProcessedPowerStats(powerStats, timestampMs); } abstract void finish(PowerComponentAggregatedPowerStats stats, long timestampMs); diff --git a/services/core/java/com/android/server/power/stats/SensorPowerStatsProcessor.java b/services/core/java/com/android/server/power/stats/SensorPowerStatsProcessor.java index 5bd32882c1b1..79d807679970 100644 --- a/services/core/java/com/android/server/power/stats/SensorPowerStatsProcessor.java +++ b/services/core/java/com/android/server/power/stats/SensorPowerStatsProcessor.java @@ -233,7 +233,7 @@ public class SensorPowerStatsProcessor extends PowerStatsProcessor { private void flushPowerStats(PowerComponentAggregatedPowerStats stats, long timestamp) { mPowerStats.durationMs = timestamp - mLastUpdateTimestamp; - stats.addPowerStats(mPowerStats, timestamp); + stats.addProcessedPowerStats(mPowerStats, timestamp); Arrays.fill(mPowerStats.stats, 0); mPowerStats.uidStats.clear(); diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/AggregatedPowerStatsTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/AggregatedPowerStatsTest.java index a4688ccc04ce..04d53dec2a09 100644 --- a/services/tests/powerstatstests/src/com/android/server/power/stats/AggregatedPowerStatsTest.java +++ b/services/tests/powerstatstests/src/com/android/server/power/stats/AggregatedPowerStatsTest.java @@ -111,6 +111,7 @@ public class AggregatedPowerStatsTest { private AggregatedPowerStats prepareAggregatePowerStats() { AggregatedPowerStats stats = new AggregatedPowerStats(mAggregatedPowerStatsConfig); + stats.start(0); PowerStats ps = new PowerStats(mPowerComponentDescriptor); stats.addPowerStats(ps, 0); diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/AmbientDisplayPowerStatsProcessorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/AmbientDisplayPowerStatsProcessorTest.java index 8d2849bdfe73..a2a7e00a39b4 100644 --- a/services/tests/powerstatstests/src/com/android/server/power/stats/AmbientDisplayPowerStatsProcessorTest.java +++ b/services/tests/powerstatstests/src/com/android/server/power/stats/AmbientDisplayPowerStatsProcessorTest.java @@ -124,22 +124,18 @@ public class AmbientDisplayPowerStatsProcessorTest { } private PowerComponentAggregatedPowerStats collectAndAggregatePowerStats() { - ScreenPowerStatsProcessor screenPowerStatsProcessor = - new ScreenPowerStatsProcessor(mStatsRule.getPowerProfile()); - AmbientDisplayPowerStatsProcessor ambientDisplayPowerStatsProcessor = - new AmbientDisplayPowerStatsProcessor(); - AggregatedPowerStatsConfig config = new AggregatedPowerStatsConfig(); config.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_SCREEN) .trackDeviceStates(STATE_POWER, STATE_SCREEN) .trackUidStates(STATE_POWER, STATE_SCREEN) - .setProcessor(screenPowerStatsProcessor); + .setProcessorSupplier( + () -> new ScreenPowerStatsProcessor(mStatsRule.getPowerProfile())); config.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_AMBIENT_DISPLAY, BatteryConsumer.POWER_COMPONENT_SCREEN) - .setProcessor(ambientDisplayPowerStatsProcessor); + .setProcessorSupplier(AmbientDisplayPowerStatsProcessor::new); AggregatedPowerStats stats = new AggregatedPowerStats(config); - + stats.start(0); stats.setDeviceState(STATE_POWER, POWER_STATE_OTHER, 0); stats.setDeviceState(STATE_SCREEN, SCREEN_STATE_OTHER, 0); diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/BinaryStatePowerStatsProcessorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/BinaryStatePowerStatsProcessorTest.java index be1c121cfb29..4b40f6897c88 100644 --- a/services/tests/powerstatstests/src/com/android/server/power/stats/BinaryStatePowerStatsProcessorTest.java +++ b/services/tests/powerstatstests/src/com/android/server/power/stats/BinaryStatePowerStatsProcessorTest.java @@ -44,6 +44,8 @@ import com.android.internal.os.PowerStats; import org.junit.Rule; import org.junit.Test; +import java.util.function.Supplier; + public class BinaryStatePowerStatsProcessorTest { @Rule(order = 0) public final RavenwoodRule mRavenwood = new RavenwoodRule.Builder() @@ -74,25 +76,24 @@ public class BinaryStatePowerStatsProcessorTest { @Test public void powerProfileModel() { - TestBinaryStatePowerStatsProcessor processor = new TestBinaryStatePowerStatsProcessor( - POWER_COMPONENT, /* averagePowerMilliAmp */ 100, mUidResolver); - BinaryStatePowerStatsLayout statsLayout = new BinaryStatePowerStatsLayout(); - PowerComponentAggregatedPowerStats stats = createAggregatedPowerStats(processor); + PowerComponentAggregatedPowerStats stats = createAggregatedPowerStats( + () -> new TestBinaryStatePowerStatsProcessor( + POWER_COMPONENT, /* averagePowerMilliAmp */ 100, mUidResolver)); - processor.noteStateChange(stats, buildHistoryItem(0, true, APP_UID1)); + stats.noteStateChange(buildHistoryItem(0, true, APP_UID1)); // Turn the screen off after 2.5 seconds stats.setState(STATE_SCREEN, SCREEN_STATE_OTHER, 2500); stats.setUidState(APP_UID1, STATE_PROCESS_STATE, PROCESS_STATE_BACKGROUND, 2500); stats.setUidState(APP_UID1, STATE_PROCESS_STATE, PROCESS_STATE_FOREGROUND_SERVICE, 5000); - processor.noteStateChange(stats, buildHistoryItem(6000, false, APP_UID1)); + stats.noteStateChange(buildHistoryItem(6000, false, APP_UID1)); - processor.noteStateChange(stats, buildHistoryItem(7000, true, APP_UID2)); + stats.noteStateChange(buildHistoryItem(7000, true, APP_UID2)); - processor.finish(stats, 11000); + stats.finish(11000); // Total usage duration is 10000 // Total estimated power = 10000 * 100 = 1000000 mA-ms = 0.277777 mAh @@ -145,9 +146,6 @@ public class BinaryStatePowerStatsProcessorTest { @Test public void energyConsumerModel() { - TestBinaryStatePowerStatsProcessor processor = new TestBinaryStatePowerStatsProcessor( - POWER_COMPONENT, /* averagePowerMilliAmp */ 100, mUidResolver); - BinaryStatePowerStatsLayout statsLayout = new BinaryStatePowerStatsLayout(); PersistableBundle extras = new PersistableBundle(); statsLayout.toExtras(extras); @@ -157,30 +155,34 @@ public class BinaryStatePowerStatsProcessorTest { PowerStats powerStats = new PowerStats(descriptor); powerStats.stats = new long[descriptor.statsArrayLength]; - PowerComponentAggregatedPowerStats stats = createAggregatedPowerStats(processor); + PowerComponentAggregatedPowerStats stats = createAggregatedPowerStats( + () -> new TestBinaryStatePowerStatsProcessor( + POWER_COMPONENT, /* averagePowerMilliAmp */ 100, mUidResolver)); + + stats.start(0); // Establish a baseline - processor.addPowerStats(stats, powerStats, mMonotonicClock.monotonicTime()); + stats.addPowerStats(powerStats, mMonotonicClock.monotonicTime()); - processor.noteStateChange(stats, buildHistoryItem(0, true, APP_UID1)); + stats.noteStateChange(buildHistoryItem(0, true, APP_UID1)); // Turn the screen off after 2.5 seconds stats.setState(STATE_SCREEN, SCREEN_STATE_OTHER, 2500); stats.setUidState(APP_UID1, STATE_PROCESS_STATE, PROCESS_STATE_BACKGROUND, 2500); stats.setUidState(APP_UID1, STATE_PROCESS_STATE, PROCESS_STATE_FOREGROUND_SERVICE, 5000); - processor.noteStateChange(stats, buildHistoryItem(6000, false, APP_UID1)); + stats.noteStateChange(buildHistoryItem(6000, false, APP_UID1)); statsLayout.setConsumedEnergy(powerStats.stats, 0, 2_160_000); - processor.addPowerStats(stats, powerStats, mMonotonicClock.monotonicTime()); + stats.addPowerStats(powerStats, mMonotonicClock.monotonicTime()); - processor.noteStateChange(stats, buildHistoryItem(7000, true, APP_UID2)); + stats.noteStateChange(buildHistoryItem(7000, true, APP_UID2)); mClock.realtime = 11000; statsLayout.setConsumedEnergy(powerStats.stats, 0, 1_440_000); - processor.addPowerStats(stats, powerStats, mMonotonicClock.monotonicTime()); + stats.addPowerStats(powerStats, mMonotonicClock.monotonicTime()); - processor.finish(stats, 11000); + stats.finish(11000); // Total estimated power = 3,600,000 uC = 1.0 mAh // of which 3,000,000 is distributed: @@ -261,17 +263,17 @@ public class BinaryStatePowerStatsProcessorTest { } private static PowerComponentAggregatedPowerStats createAggregatedPowerStats( - BinaryStatePowerStatsProcessor processor) { + Supplier<PowerStatsProcessor> processorSupplier) { AggregatedPowerStatsConfig config = new AggregatedPowerStatsConfig(); config.trackPowerComponent(POWER_COMPONENT) .trackDeviceStates(STATE_POWER, STATE_SCREEN) .trackUidStates(STATE_POWER, STATE_SCREEN, STATE_PROCESS_STATE) - .setProcessor(processor); + .setProcessorSupplier(processorSupplier); AggregatedPowerStats aggregatedPowerStats = new AggregatedPowerStats(config); PowerComponentAggregatedPowerStats powerComponentStats = aggregatedPowerStats.getPowerComponentStats(POWER_COMPONENT); - processor.start(powerComponentStats, 0); + powerComponentStats.start(0); powerComponentStats.setState(STATE_POWER, POWER_STATE_OTHER, 0); powerComponentStats.setState(STATE_SCREEN, SCREEN_STATE_ON, 0); diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/BluetoothPowerStatsProcessorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/BluetoothPowerStatsProcessorTest.java index c88f0a9d11e1..4a8125f8b4c2 100644 --- a/services/tests/powerstatstests/src/com/android/server/power/stats/BluetoothPowerStatsProcessorTest.java +++ b/services/tests/powerstatstests/src/com/android/server/power/stats/BluetoothPowerStatsProcessorTest.java @@ -59,6 +59,7 @@ import org.mockito.MockitoAnnotations; import java.util.List; import java.util.concurrent.Executor; import java.util.function.IntSupplier; +import java.util.function.Supplier; public class BluetoothPowerStatsProcessorTest { @@ -166,10 +167,8 @@ public class BluetoothPowerStatsProcessorTest { when(mConsumedEnergyRetriever.getEnergyConsumerIds(EnergyConsumerType.BLUETOOTH)) .thenReturn(new int[0]); - BluetoothPowerStatsProcessor processor = - new BluetoothPowerStatsProcessor(mStatsRule.getPowerProfile()); - - PowerComponentAggregatedPowerStats aggregatedStats = createAggregatedPowerStats(processor); + PowerComponentAggregatedPowerStats aggregatedStats = createAggregatedPowerStats( + () -> new BluetoothPowerStatsProcessor(mStatsRule.getPowerProfile())); BluetoothPowerStatsCollector collector = new BluetoothPowerStatsCollector(mInjector); collector.setEnabled(true); @@ -179,6 +178,8 @@ public class BluetoothPowerStatsProcessorTest { mUidScanTimes.put(APP_UID1, 100); + aggregatedStats.start(0); + // Establish a baseline aggregatedStats.addPowerStats(collector.collectStats(), 0); @@ -200,7 +201,7 @@ public class BluetoothPowerStatsProcessorTest { aggregatedStats.addPowerStats(collector.collectStats(), 10_000); - processor.finish(aggregatedStats, 10_000); + aggregatedStats.finish(10_000); BluetoothPowerStatsLayout statsLayout = new BluetoothPowerStatsLayout(aggregatedStats.getPowerStatsDescriptor()); @@ -267,10 +268,8 @@ public class BluetoothPowerStatsProcessorTest { when(mConsumedEnergyRetriever.getEnergyConsumerIds(EnergyConsumerType.BLUETOOTH)) .thenReturn(new int[0]); - BluetoothPowerStatsProcessor processor = - new BluetoothPowerStatsProcessor(mStatsRule.getPowerProfile()); - - PowerComponentAggregatedPowerStats aggregatedStats = createAggregatedPowerStats(processor); + PowerComponentAggregatedPowerStats aggregatedStats = createAggregatedPowerStats( + () -> new BluetoothPowerStatsProcessor(mStatsRule.getPowerProfile())); BluetoothPowerStatsCollector collector = new BluetoothPowerStatsCollector(mInjector); collector.setEnabled(true); @@ -280,6 +279,8 @@ public class BluetoothPowerStatsProcessorTest { mUidScanTimes.put(APP_UID1, 100); + aggregatedStats.start(0); + // Establish a baseline aggregatedStats.addPowerStats(collector.collectStats(), 0); @@ -301,7 +302,7 @@ public class BluetoothPowerStatsProcessorTest { aggregatedStats.addPowerStats(collector.collectStats(), 10_000); - processor.finish(aggregatedStats, 10_000); + aggregatedStats.finish(10_000); BluetoothPowerStatsLayout statsLayout = new BluetoothPowerStatsLayout(aggregatedStats.getPowerStatsDescriptor()); @@ -366,10 +367,8 @@ public class BluetoothPowerStatsProcessorTest { when(mConsumedEnergyRetriever.getEnergyConsumerIds(EnergyConsumerType.BLUETOOTH)) .thenReturn(new int[]{BLUETOOTH_ENERGY_CONSUMER_ID}); - BluetoothPowerStatsProcessor processor = - new BluetoothPowerStatsProcessor(mStatsRule.getPowerProfile()); - - PowerComponentAggregatedPowerStats aggregatedStats = createAggregatedPowerStats(processor); + PowerComponentAggregatedPowerStats aggregatedStats = createAggregatedPowerStats( + () -> new BluetoothPowerStatsProcessor(mStatsRule.getPowerProfile())); BluetoothPowerStatsCollector collector = new BluetoothPowerStatsCollector(mInjector); collector.setEnabled(true); @@ -382,6 +381,8 @@ public class BluetoothPowerStatsProcessorTest { when(mConsumedEnergyRetriever.getConsumedEnergyUws( new int[]{BLUETOOTH_ENERGY_CONSUMER_ID})).thenReturn(new long[]{0}); + aggregatedStats.start(0); + // Establish a baseline aggregatedStats.addPowerStats(collector.collectStats(), 0); @@ -408,7 +409,7 @@ public class BluetoothPowerStatsProcessorTest { aggregatedStats.addPowerStats(collector.collectStats(), 10_000); - processor.finish(aggregatedStats, 10_000); + aggregatedStats.finish(10_000); BluetoothPowerStatsLayout statsLayout = new BluetoothPowerStatsLayout(aggregatedStats.getPowerStatsDescriptor()); @@ -466,13 +467,13 @@ public class BluetoothPowerStatsProcessorTest { } private static PowerComponentAggregatedPowerStats createAggregatedPowerStats( - BluetoothPowerStatsProcessor processor) { + Supplier<PowerStatsProcessor> processorSupplier) { AggregatedPowerStatsConfig.PowerComponent config = new AggregatedPowerStatsConfig.PowerComponent( BatteryConsumer.POWER_COMPONENT_BLUETOOTH) .trackDeviceStates(STATE_POWER, STATE_SCREEN) .trackUidStates(STATE_POWER, STATE_SCREEN, STATE_PROCESS_STATE) - .setProcessor(processor); + .setProcessorSupplier(processorSupplier); PowerComponentAggregatedPowerStats aggregatedStats = new PowerComponentAggregatedPowerStats( diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/CameraPowerStatsTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/CameraPowerStatsTest.java index efbd1b7f42fd..88a4f5e7891e 100644 --- a/services/tests/powerstatstests/src/com/android/server/power/stats/CameraPowerStatsTest.java +++ b/services/tests/powerstatstests/src/com/android/server/power/stats/CameraPowerStatsTest.java @@ -54,6 +54,7 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import java.util.function.IntSupplier; +import java.util.function.Supplier; public class CameraPowerStatsTest { @Rule(order = 0) @@ -123,44 +124,41 @@ public class CameraPowerStatsTest { .getEnergyConsumerIds(eq((int) EnergyConsumerType.CAMERA), any())) .thenReturn(new int[]{ENERGY_CONSUMER_ID}); - CameraPowerStatsProcessor processor = new CameraPowerStatsProcessor( - mStatsRule.getPowerProfile(), mUidResolver); - - PowerComponentAggregatedPowerStats stats = createAggregatedPowerStats(processor); + PowerComponentAggregatedPowerStats stats = createAggregatedPowerStats( + () -> new CameraPowerStatsProcessor(mStatsRule.getPowerProfile(), mUidResolver)); CameraPowerStatsCollector collector = new CameraPowerStatsCollector(mInjector); collector.addConsumer( - powerStats -> { - processor.addPowerStats(stats, powerStats, mMonotonicClock.monotonicTime()); - }); + powerStats -> stats.addPowerStats(powerStats, mMonotonicClock.monotonicTime())); collector.setEnabled(true); // Establish a baseline + stats.start(0); when(mConsumedEnergyRetriever.getConsumedEnergy(new int[]{ENERGY_CONSUMER_ID})) .thenReturn(createEnergyConsumerResults(ENERGY_CONSUMER_ID, 10000)); collector.collectAndDeliverStats(); - processor.noteStateChange(stats, buildHistoryItem(0, true, APP_UID1)); + stats.noteStateChange(buildHistoryItem(0, true, APP_UID1)); // Turn the screen off after 2.5 seconds stats.setState(STATE_SCREEN, SCREEN_STATE_OTHER, 2500); stats.setUidState(APP_UID1, STATE_PROCESS_STATE, PROCESS_STATE_BACKGROUND, 2500); stats.setUidState(APP_UID1, STATE_PROCESS_STATE, PROCESS_STATE_FOREGROUND_SERVICE, 5000); - processor.noteStateChange(stats, buildHistoryItem(6000, false, APP_UID1)); + stats.noteStateChange(buildHistoryItem(6000, false, APP_UID1)); when(mConsumedEnergyRetriever.getConsumedEnergy(new int[]{ENERGY_CONSUMER_ID})) .thenReturn(createEnergyConsumerResults(ENERGY_CONSUMER_ID, 2_170_000)); collector.collectAndDeliverStats(); - processor.noteStateChange(stats, buildHistoryItem(7000, true, APP_UID2)); + stats.noteStateChange(buildHistoryItem(7000, true, APP_UID2)); mStatsRule.setTime(11_000, 11_000); when(mConsumedEnergyRetriever.getConsumedEnergy(new int[]{ENERGY_CONSUMER_ID})) .thenReturn(createEnergyConsumerResults(ENERGY_CONSUMER_ID, 3_610_000)); collector.collectAndDeliverStats(); - processor.finish(stats, 11_000); + stats.finish(11_000); PowerStats.Descriptor descriptor = stats.getPowerStatsDescriptor(); BinaryStatePowerStatsLayout statsLayout = new BinaryStatePowerStatsLayout(); @@ -244,7 +242,7 @@ public class CameraPowerStatsTest { } private static PowerComponentAggregatedPowerStats createAggregatedPowerStats( - BinaryStatePowerStatsProcessor processor) { + Supplier<PowerStatsProcessor> processorSupplier) { AggregatedPowerStatsConfig config = new AggregatedPowerStatsConfig(); config.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_CAMERA) .trackDeviceStates( @@ -254,12 +252,12 @@ public class CameraPowerStatsTest { AggregatedPowerStatsConfig.STATE_POWER, AggregatedPowerStatsConfig.STATE_SCREEN, AggregatedPowerStatsConfig.STATE_PROCESS_STATE) - .setProcessor(processor); + .setProcessorSupplier(processorSupplier); AggregatedPowerStats aggregatedPowerStats = new AggregatedPowerStats(config); PowerComponentAggregatedPowerStats powerComponentStats = aggregatedPowerStats.getPowerComponentStats(BatteryConsumer.POWER_COMPONENT_CAMERA); - processor.start(powerComponentStats, 0); + powerComponentStats.start(0); powerComponentStats.setState(STATE_POWER, POWER_STATE_OTHER, 0); powerComponentStats.setState(STATE_SCREEN, SCREEN_STATE_ON, 0); diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/CpuPowerStatsProcessorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/CpuPowerStatsProcessorTest.java index b6b759e8f0af..ab2e631453ef 100644 --- a/services/tests/powerstatstests/src/com/android/server/power/stats/CpuPowerStatsProcessorTest.java +++ b/services/tests/powerstatstests/src/com/android/server/power/stats/CpuPowerStatsProcessorTest.java @@ -78,22 +78,22 @@ public class CpuPowerStatsProcessorTest { .setCpuPowerBracket(2, 0, 2); private AggregatedPowerStatsConfig.PowerComponent mConfig; - private CpuPowerStatsProcessor mProcessor; private MockPowerComponentAggregatedPowerStats mStats; @Before public void setup() { mConfig = new AggregatedPowerStatsConfig.PowerComponent(BatteryConsumer.POWER_COMPONENT_CPU) .trackDeviceStates(STATE_POWER, STATE_SCREEN) - .trackUidStates(STATE_POWER, STATE_SCREEN, STATE_PROCESS_STATE); - - mProcessor = new CpuPowerStatsProcessor( - mStatsRule.getPowerProfile(), mStatsRule.getCpuScalingPolicies()); + .trackUidStates(STATE_POWER, STATE_SCREEN, STATE_PROCESS_STATE) + .setProcessorSupplier(() -> new CpuPowerStatsProcessor(mStatsRule.getPowerProfile(), + mStatsRule.getCpuScalingPolicies())); } @Test public void powerProfileModel() { mStats = new MockPowerComponentAggregatedPowerStats(mConfig, false); + mStats.start(0); + mStats.setDeviceStats( states(POWER_STATE_BATTERY, SCREEN_STATE_ON), concat( @@ -128,7 +128,7 @@ public class CpuPowerStatsProcessorTest { states(POWER_STATE_OTHER, SCREEN_STATE_ON, PROCESS_STATE_CACHED), values(1500, 2000, 1000), 1.252578); - mProcessor.finish(mStats, 10_000); + mStats.finish(10_000); mStats.verifyPowerEstimates(); } @@ -136,6 +136,8 @@ public class CpuPowerStatsProcessorTest { @Test public void energyConsumerModel() { mStats = new MockPowerComponentAggregatedPowerStats(mConfig, true); + mStats.start(0); + mStats.setDeviceStats( states(POWER_STATE_BATTERY, SCREEN_STATE_ON), concat( @@ -173,7 +175,7 @@ public class CpuPowerStatsProcessorTest { states(POWER_STATE_OTHER, SCREEN_STATE_ON, PROCESS_STATE_CACHED), values(1500, 2000, 1000), 0.80773); - mProcessor.finish(mStats, 10_000); + mStats.finish(10_000); mStats.verifyPowerEstimates(); } diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/CustomEnergyConsumerPowerStatsTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/CustomEnergyConsumerPowerStatsTest.java index 1621d47d62b5..8239fdbd04e9 100644 --- a/services/tests/powerstatstests/src/com/android/server/power/stats/CustomEnergyConsumerPowerStatsTest.java +++ b/services/tests/powerstatstests/src/com/android/server/power/stats/CustomEnergyConsumerPowerStatsTest.java @@ -157,6 +157,7 @@ public class CustomEnergyConsumerPowerStatsTest { @Test public void processStats() throws Exception { AggregatedPowerStats aggregatedPowerStats = createAggregatedPowerStats(); + aggregatedPowerStats.start(0); aggregatedPowerStats.setDeviceState(STATE_POWER, POWER_STATE_OTHER, 0); aggregatedPowerStats.setDeviceState(STATE_SCREEN, SCREEN_STATE_ON, 0); aggregatedPowerStats.setUidState(APP_UID1, STATE_PROCESS_STATE, PROCESS_STATE_FOREGROUND, diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/GnssPowerStatsTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/GnssPowerStatsTest.java index 774be897692a..127ab8a6e549 100644 --- a/services/tests/powerstatstests/src/com/android/server/power/stats/GnssPowerStatsTest.java +++ b/services/tests/powerstatstests/src/com/android/server/power/stats/GnssPowerStatsTest.java @@ -55,6 +55,7 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import java.util.function.IntSupplier; +import java.util.function.Supplier; public class GnssPowerStatsTest { @Rule(order = 0) @@ -126,41 +127,38 @@ public class GnssPowerStatsTest { .getEnergyConsumerIds(eq((int) EnergyConsumerType.GNSS), any())) .thenReturn(new int[0]); - GnssPowerStatsProcessor processor = new GnssPowerStatsProcessor( - mStatsRule.getPowerProfile(), mUidResolver); - - PowerComponentAggregatedPowerStats stats = createAggregatedPowerStats(processor); + PowerComponentAggregatedPowerStats stats = createAggregatedPowerStats( + () -> new GnssPowerStatsProcessor(mStatsRule.getPowerProfile(), mUidResolver)); + stats.start(0); GnssPowerStatsCollector collector = new GnssPowerStatsCollector(mInjector); collector.addConsumer( - powerStats -> { - processor.addPowerStats(stats, powerStats, mMonotonicClock.monotonicTime()); - }); + powerStats -> stats.addPowerStats(powerStats, mMonotonicClock.monotonicTime())); collector.setEnabled(true); // Establish a baseline collector.collectAndDeliverStats(); - processor.noteStateChange(stats, buildHistoryItem(0, true, APP_UID1)); + stats.noteStateChange(buildHistoryItem(0, true, APP_UID1)); // Turn the screen off after 2.5 seconds stats.setState(STATE_SCREEN, SCREEN_STATE_OTHER, 2500); stats.setUidState(APP_UID1, STATE_PROCESS_STATE, PROCESS_STATE_BACKGROUND, 2500); stats.setUidState(APP_UID1, STATE_PROCESS_STATE, PROCESS_STATE_FOREGROUND_SERVICE, 5000); - processor.noteStateChange(stats, buildHistoryItem(6000, false, APP_UID1)); + stats.noteStateChange(buildHistoryItem(6000, false, APP_UID1)); collector.collectAndDeliverStats(); - processor.noteStateChange(stats, buildHistoryItem(7000, true, APP_UID2)); - processor.noteStateChange(stats, buildHistoryItem(7000, + stats.noteStateChange(buildHistoryItem(7000, true, APP_UID2)); + stats.noteStateChange(buildHistoryItem(7000, GnssSignalQuality.GNSS_SIGNAL_QUALITY_GOOD)); - processor.noteStateChange(stats, buildHistoryItem(8000, + stats.noteStateChange(buildHistoryItem(8000, GnssSignalQuality.GNSS_SIGNAL_QUALITY_POOR)); mStatsRule.setTime(11_000, 11_000); collector.collectAndDeliverStats(); - processor.finish(stats, 11_000); + stats.finish(11_000); PowerStats.Descriptor descriptor = stats.getPowerStatsDescriptor(); BinaryStatePowerStatsLayout statsLayout = new BinaryStatePowerStatsLayout(); @@ -217,47 +215,46 @@ public class GnssPowerStatsTest { when(mConsumedEnergyRetriever .getEnergyConsumerIds(eq((int) EnergyConsumerType.GNSS), any())) .thenReturn(new int[]{ENERGY_CONSUMER_ID}); - GnssPowerStatsProcessor processor = new GnssPowerStatsProcessor( - mStatsRule.getPowerProfile(), mUidResolver); - PowerComponentAggregatedPowerStats stats = createAggregatedPowerStats(processor); + PowerComponentAggregatedPowerStats stats = createAggregatedPowerStats( + () -> new GnssPowerStatsProcessor(mStatsRule.getPowerProfile(), mUidResolver)); GnssPowerStatsCollector collector = new GnssPowerStatsCollector(mInjector); collector.addConsumer( - powerStats -> { - processor.addPowerStats(stats, powerStats, mMonotonicClock.monotonicTime()); - }); + powerStats -> stats.addPowerStats(powerStats, mMonotonicClock.monotonicTime())); collector.setEnabled(true); + stats.start(0); + // Establish a baseline when(mConsumedEnergyRetriever.getConsumedEnergy(new int[]{ENERGY_CONSUMER_ID})) .thenReturn(createEnergyConsumerResults(ENERGY_CONSUMER_ID, 10000)); collector.collectAndDeliverStats(); - processor.noteStateChange(stats, buildHistoryItem(0, true, APP_UID1)); + stats.noteStateChange(buildHistoryItem(0, true, APP_UID1)); // Turn the screen off after 2.5 seconds stats.setState(STATE_SCREEN, SCREEN_STATE_OTHER, 2500); stats.setUidState(APP_UID1, STATE_PROCESS_STATE, PROCESS_STATE_BACKGROUND, 2500); stats.setUidState(APP_UID1, STATE_PROCESS_STATE, PROCESS_STATE_FOREGROUND_SERVICE, 5000); - processor.noteStateChange(stats, buildHistoryItem(6000, false, APP_UID1)); + stats.noteStateChange(buildHistoryItem(6000, false, APP_UID1)); when(mConsumedEnergyRetriever.getConsumedEnergy(new int[]{ENERGY_CONSUMER_ID})) .thenReturn(createEnergyConsumerResults(ENERGY_CONSUMER_ID, 2_170_000)); collector.collectAndDeliverStats(); - processor.noteStateChange(stats, buildHistoryItem(7000, true, APP_UID2)); - processor.noteStateChange(stats, buildHistoryItem(7000, + stats.noteStateChange(buildHistoryItem(7000, true, APP_UID2)); + stats.noteStateChange(buildHistoryItem(7000, GnssSignalQuality.GNSS_SIGNAL_QUALITY_GOOD)); - processor.noteStateChange(stats, buildHistoryItem(8000, + stats.noteStateChange(buildHistoryItem(8000, GnssSignalQuality.GNSS_SIGNAL_QUALITY_POOR)); mStatsRule.setTime(11_000, 11_000); when(mConsumedEnergyRetriever.getConsumedEnergy(new int[]{ENERGY_CONSUMER_ID})) .thenReturn(createEnergyConsumerResults(ENERGY_CONSUMER_ID, 3_610_000)); collector.collectAndDeliverStats(); - processor.finish(stats, 11_000); + stats.finish(11_000); PowerStats.Descriptor descriptor = stats.getPowerStatsDescriptor(); BinaryStatePowerStatsLayout statsLayout = new BinaryStatePowerStatsLayout(); @@ -350,7 +347,7 @@ public class GnssPowerStatsTest { } private static PowerComponentAggregatedPowerStats createAggregatedPowerStats( - BinaryStatePowerStatsProcessor processor) { + Supplier<PowerStatsProcessor> processorSupplier) { AggregatedPowerStatsConfig config = new AggregatedPowerStatsConfig(); config.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_GNSS) .trackDeviceStates( @@ -360,12 +357,12 @@ public class GnssPowerStatsTest { AggregatedPowerStatsConfig.STATE_POWER, AggregatedPowerStatsConfig.STATE_SCREEN, AggregatedPowerStatsConfig.STATE_PROCESS_STATE) - .setProcessor(processor); + .setProcessorSupplier(processorSupplier); AggregatedPowerStats aggregatedPowerStats = new AggregatedPowerStats(config); PowerComponentAggregatedPowerStats powerComponentStats = aggregatedPowerStats.getPowerComponentStats(BatteryConsumer.POWER_COMPONENT_GNSS); - processor.start(powerComponentStats, 0); + powerComponentStats.start(0); powerComponentStats.setState(STATE_POWER, POWER_STATE_OTHER, 0); powerComponentStats.setState(STATE_SCREEN, SCREEN_STATE_ON, 0); 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 d7024e5e45fe..89d59a9be14f 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 @@ -172,15 +172,13 @@ public class MobileRadioPowerStatsProcessorTest { mStatsRule.setTestPowerProfile("power_profile_test_modem_calculator"); - MobileRadioPowerStatsProcessor processor = - new MobileRadioPowerStatsProcessor(mStatsRule.getPowerProfile()); - AggregatedPowerStatsConfig.PowerComponent config = new AggregatedPowerStatsConfig.PowerComponent( BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO) .trackDeviceStates(STATE_POWER, STATE_SCREEN) .trackUidStates(STATE_POWER, STATE_SCREEN, STATE_PROCESS_STATE) - .setProcessor(processor); + .setProcessorSupplier(() -> new MobileRadioPowerStatsProcessor( + mStatsRule.getPowerProfile())); PowerComponentAggregatedPowerStats aggregatedStats = new PowerComponentAggregatedPowerStats( @@ -198,6 +196,8 @@ public class MobileRadioPowerStatsProcessorTest { // Initial empty ModemActivityInfo. mockModemActivityInfo(new ModemActivityInfo(0L, 0L, 0L, new int[5], 0L)); + aggregatedStats.start(0); + // Establish a baseline aggregatedStats.addPowerStats(collector.collectStats(), 0); @@ -229,7 +229,7 @@ public class MobileRadioPowerStatsProcessorTest { aggregatedStats.addPowerStats(powerStats, 10_000); - processor.finish(aggregatedStats, 10_000); + aggregatedStats.finish(10_000); MobileRadioPowerStatsLayout statsLayout = new MobileRadioPowerStatsLayout( @@ -412,15 +412,13 @@ public class MobileRadioPowerStatsProcessorTest { mStatsRule.setTestPowerProfile("power_profile_test_legacy_modem") .initMeasuredEnergyStatsLocked(); - MobileRadioPowerStatsProcessor processor = - new MobileRadioPowerStatsProcessor(mStatsRule.getPowerProfile()); - AggregatedPowerStatsConfig.PowerComponent config = new AggregatedPowerStatsConfig.PowerComponent( BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO) .trackDeviceStates(STATE_POWER, STATE_SCREEN) .trackUidStates(STATE_POWER, STATE_SCREEN, STATE_PROCESS_STATE) - .setProcessor(processor); + .setProcessorSupplier(() -> new MobileRadioPowerStatsProcessor( + mStatsRule.getPowerProfile())); PowerComponentAggregatedPowerStats aggregatedStats = new PowerComponentAggregatedPowerStats( @@ -442,6 +440,8 @@ public class MobileRadioPowerStatsProcessorTest { new int[]{MOBILE_RADIO_ENERGY_CONSUMER_ID})) .thenReturn(new long[]{0}); + aggregatedStats.start(0); + // Establish a baseline aggregatedStats.addPowerStats(collector.collectStats(), 0); @@ -477,7 +477,7 @@ public class MobileRadioPowerStatsProcessorTest { aggregatedStats.addPowerStats(powerStats, 10_000); - processor.finish(aggregatedStats, 10_000); + aggregatedStats.finish(10_000); return aggregatedStats; } 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 c2681106a28c..cb1bcfe2cb2b 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 @@ -156,20 +156,16 @@ public class PhoneCallPowerStatsProcessorTest { @Test public void copyEstimatesFromMobileRadioPowerStats() { - MobileRadioPowerStatsProcessor mobileStatsProcessor = - new MobileRadioPowerStatsProcessor(mStatsRule.getPowerProfile()); - - PhoneCallPowerStatsProcessor phoneStatsProcessor = - new PhoneCallPowerStatsProcessor(); AggregatedPowerStatsConfig aggregatedPowerStatsConfig = new AggregatedPowerStatsConfig(); aggregatedPowerStatsConfig.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO) .trackDeviceStates(STATE_POWER, STATE_SCREEN) .trackUidStates(STATE_POWER, STATE_SCREEN, STATE_PROCESS_STATE) - .setProcessor(mobileStatsProcessor); + .setProcessorSupplier( + () -> new MobileRadioPowerStatsProcessor(mStatsRule.getPowerProfile())); aggregatedPowerStatsConfig.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_PHONE, BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO) - .setProcessor(phoneStatsProcessor); + .setProcessorSupplier(PhoneCallPowerStatsProcessor::new); AggregatedPowerStats aggregatedPowerStats = new AggregatedPowerStats(aggregatedPowerStatsConfig); @@ -177,6 +173,8 @@ public class PhoneCallPowerStatsProcessorTest { aggregatedPowerStats.getPowerComponentStats( BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO); + aggregatedPowerStats.start(0); + aggregatedPowerStats.setDeviceState(STATE_POWER, POWER_STATE_OTHER, 0); aggregatedPowerStats.setDeviceState(STATE_SCREEN, SCREEN_STATE_ON, 0); @@ -204,11 +202,11 @@ public class PhoneCallPowerStatsProcessorTest { aggregatedPowerStats.addPowerStats(collector.collectStats(), 10_000); - mobileStatsProcessor.finish(mobileRadioStats, 10_000); + mobileRadioStats.finish(10_000); PowerComponentAggregatedPowerStats stats = aggregatedPowerStats.getPowerComponentStats(BatteryConsumer.POWER_COMPONENT_PHONE); - phoneStatsProcessor.finish(stats, 10_000); + stats.finish(10_000); PowerStatsLayout statsLayout = new PowerStatsLayout(stats.getPowerStatsDescriptor()); diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/PowerStatsExporterTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/PowerStatsExporterTest.java index 1f5fba6dd410..96203a5b6f47 100644 --- a/services/tests/powerstatstests/src/com/android/server/power/stats/PowerStatsExporterTest.java +++ b/services/tests/powerstatstests/src/com/android/server/power/stats/PowerStatsExporterTest.java @@ -96,8 +96,8 @@ public class PowerStatsExporterTest { AggregatedPowerStatsConfig.STATE_POWER, AggregatedPowerStatsConfig.STATE_SCREEN, AggregatedPowerStatsConfig.STATE_PROCESS_STATE) - .setProcessor( - new CpuPowerStatsProcessor(mStatsRule.getPowerProfile(), + .setProcessorSupplier( + () -> new CpuPowerStatsProcessor(mStatsRule.getPowerProfile(), mStatsRule.getCpuScalingPolicies())); config.trackCustomPowerComponents(CustomEnergyConsumerPowerStatsProcessor::new) .trackDeviceStates( @@ -508,9 +508,8 @@ public class PowerStatsExporterTest { mCpuStatsArrayLayout.setUidTimeByPowerBracket(uidStats2, 0, 2469); mHistory.recordPowerStats(3000, 3000, powerStats); - mPowerStatsAggregator.aggregatePowerStats(0, 3500, stats -> { - mPowerStatsStore.storeAggregatedPowerStats(stats); - }); + mPowerStatsAggregator.aggregatePowerStats(0, 3500, + stats -> mPowerStatsStore.storeAggregatedPowerStats(stats)); mHistory.recordProcessStateChange(4000, 4000, APP_UID1, BatteryConsumer.PROCESS_STATE_BACKGROUND); diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/ScreenPowerStatsProcessorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/ScreenPowerStatsProcessorTest.java index c05a91062368..94f5662a032f 100644 --- a/services/tests/powerstatstests/src/com/android/server/power/stats/ScreenPowerStatsProcessorTest.java +++ b/services/tests/powerstatstests/src/com/android/server/power/stats/ScreenPowerStatsProcessorTest.java @@ -49,6 +49,7 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import java.util.function.IntSupplier; +import java.util.function.Supplier; public class ScreenPowerStatsProcessorTest { @@ -167,10 +168,8 @@ public class ScreenPowerStatsProcessorTest { private PowerComponentAggregatedPowerStats collectAndAggregatePowerStats( boolean energyConsumer) { - ScreenPowerStatsProcessor processor = - new ScreenPowerStatsProcessor(mStatsRule.getPowerProfile()); - - PowerComponentAggregatedPowerStats aggregatedStats = createAggregatedPowerStats(processor); + PowerComponentAggregatedPowerStats aggregatedStats = createAggregatedPowerStats( + () -> new ScreenPowerStatsProcessor(mStatsRule.getPowerProfile())); ScreenPowerStatsCollector collector = new ScreenPowerStatsCollector(mInjector); collector.setEnabled(true); @@ -194,6 +193,8 @@ public class ScreenPowerStatsProcessorTest { }).when(mScreenUsageTimeRetriever).retrieveTopActivityTimes(any( ScreenPowerStatsCollector.ScreenUsageTimeRetriever.Callback.class)); + aggregatedStats.start(0); + aggregatedStats.addPowerStats(collector.collectStats(), 1000); if (energyConsumer) { @@ -236,18 +237,18 @@ public class ScreenPowerStatsProcessorTest { // between state changes and power stats collection aggregatedStats.addPowerStats(collector.collectStats(), 612_000); - aggregatedStats.getConfig().getProcessor().finish(aggregatedStats, 180_000); + aggregatedStats.finish(180_000); return aggregatedStats; } private static PowerComponentAggregatedPowerStats createAggregatedPowerStats( - ScreenPowerStatsProcessor processor) { + Supplier<PowerStatsProcessor> processorSupplier) { AggregatedPowerStatsConfig.PowerComponent config = new AggregatedPowerStatsConfig.PowerComponent( BatteryConsumer.POWER_COMPONENT_SCREEN) .trackDeviceStates(STATE_POWER, STATE_SCREEN) .trackUidStates(STATE_POWER, STATE_SCREEN) - .setProcessor(processor); + .setProcessorSupplier(processorSupplier); PowerComponentAggregatedPowerStats aggregatedStats = new PowerComponentAggregatedPowerStats( diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/SensorPowerStatsProcessorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/SensorPowerStatsProcessorTest.java index 7000487e7912..687d70be74f4 100644 --- a/services/tests/powerstatstests/src/com/android/server/power/stats/SensorPowerStatsProcessorTest.java +++ b/services/tests/powerstatstests/src/com/android/server/power/stats/SensorPowerStatsProcessorTest.java @@ -51,6 +51,7 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import java.util.List; +import java.util.function.Supplier; public class SensorPowerStatsProcessorTest { @Rule(order = 0) @@ -90,23 +91,22 @@ public class SensorPowerStatsProcessorTest { @Test public void testPowerEstimation() { - SensorPowerStatsProcessor processor = new SensorPowerStatsProcessor(() -> mSensorManager); + PowerComponentAggregatedPowerStats stats = createAggregatedPowerStats( + () -> new SensorPowerStatsProcessor(() -> mSensorManager)); - PowerComponentAggregatedPowerStats stats = createAggregatedPowerStats(processor); - - processor.noteStateChange(stats, buildHistoryItem(0, true, APP_UID1, SENSOR_HANDLE_1)); + stats.noteStateChange(buildHistoryItem(0, true, APP_UID1, SENSOR_HANDLE_1)); // Turn the screen off after 2.5 seconds stats.setState(STATE_SCREEN, SCREEN_STATE_OTHER, 2500); stats.setUidState(APP_UID1, STATE_PROCESS_STATE, PROCESS_STATE_BACKGROUND, 2500); stats.setUidState(APP_UID1, STATE_PROCESS_STATE, PROCESS_STATE_FOREGROUND_SERVICE, 5000); - processor.noteStateChange(stats, buildHistoryItem(6000, false, APP_UID1, SENSOR_HANDLE_1)); - processor.noteStateChange(stats, buildHistoryItem(7000, true, APP_UID2, SENSOR_HANDLE_1)); - processor.noteStateChange(stats, buildHistoryItem(8000, true, APP_UID2, SENSOR_HANDLE_2)); - processor.noteStateChange(stats, buildHistoryItem(9000, false, APP_UID2, SENSOR_HANDLE_1)); + stats.noteStateChange(buildHistoryItem(6000, false, APP_UID1, SENSOR_HANDLE_1)); + stats.noteStateChange(buildHistoryItem(7000, true, APP_UID2, SENSOR_HANDLE_1)); + stats.noteStateChange(buildHistoryItem(8000, true, APP_UID2, SENSOR_HANDLE_2)); + stats.noteStateChange(buildHistoryItem(9000, false, APP_UID2, SENSOR_HANDLE_1)); - processor.finish(stats, 10000); + stats.finish(10000); PowerStats.Descriptor descriptor = stats.getPowerStatsDescriptor(); SensorPowerStatsLayout statsLayout = new SensorPowerStatsLayout(); @@ -195,7 +195,7 @@ public class SensorPowerStatsProcessorTest { } private static PowerComponentAggregatedPowerStats createAggregatedPowerStats( - SensorPowerStatsProcessor processor) { + Supplier<PowerStatsProcessor> processorSupplier) { AggregatedPowerStatsConfig config = new AggregatedPowerStatsConfig(); config.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_SENSORS) .trackDeviceStates( @@ -205,13 +205,13 @@ public class SensorPowerStatsProcessorTest { AggregatedPowerStatsConfig.STATE_POWER, AggregatedPowerStatsConfig.STATE_SCREEN, AggregatedPowerStatsConfig.STATE_PROCESS_STATE) - .setProcessor(processor); + .setProcessorSupplier(processorSupplier); AggregatedPowerStats aggregatedPowerStats = new AggregatedPowerStats(config); PowerComponentAggregatedPowerStats powerComponentStats = aggregatedPowerStats.getPowerComponentStats( BatteryConsumer.POWER_COMPONENT_SENSORS); - processor.start(powerComponentStats, 0); + powerComponentStats.start(0); powerComponentStats.setState(STATE_POWER, POWER_STATE_OTHER, 0); powerComponentStats.setState(STATE_SCREEN, SCREEN_STATE_ON, 0); 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 7ddaefd811ff..11c09bc78ad2 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 @@ -199,10 +199,8 @@ public class WifiPowerStatsProcessorTest { when(mConsumedEnergyRetriever.getEnergyConsumerIds(EnergyConsumerType.WIFI)) .thenReturn(new int[0]); - WifiPowerStatsProcessor processor = - new WifiPowerStatsProcessor(mStatsRule.getPowerProfile()); - - PowerComponentAggregatedPowerStats aggregatedStats = createAggregatedPowerStats(processor); + PowerComponentAggregatedPowerStats aggregatedStats = createAggregatedPowerStats( + () -> new WifiPowerStatsProcessor(mStatsRule.getPowerProfile())); WifiPowerStatsCollector collector = new WifiPowerStatsCollector(mInjector, null); collector.setEnabled(true); @@ -211,6 +209,8 @@ public class WifiPowerStatsProcessorTest { mockWifiActivityEnergyInfo(new WifiActivityEnergyInfo(0L, WifiActivityEnergyInfo.STACK_STATE_INVALID, 0L, 0L, 0L, 0L)); + aggregatedStats.start(0); + // Establish a baseline aggregatedStats.addPowerStats(collector.collectStats(), 0); @@ -238,7 +238,7 @@ public class WifiPowerStatsProcessorTest { aggregatedStats.addPowerStats(collector.collectStats(), 10_000); - processor.finish(aggregatedStats, 10_000); + aggregatedStats.finish(10_000); WifiPowerStatsLayout statsLayout = new WifiPowerStatsLayout(aggregatedStats.getPowerStatsDescriptor()); @@ -311,10 +311,8 @@ public class WifiPowerStatsProcessorTest { when(mConsumedEnergyRetriever.getEnergyConsumerIds(EnergyConsumerType.WIFI)) .thenReturn(new int[] {WIFI_ENERGY_CONSUMER_ID}); - WifiPowerStatsProcessor processor = - new WifiPowerStatsProcessor(mStatsRule.getPowerProfile()); - - PowerComponentAggregatedPowerStats aggregatedStats = createAggregatedPowerStats(processor); + PowerComponentAggregatedPowerStats aggregatedStats = createAggregatedPowerStats( + () -> new WifiPowerStatsProcessor(mStatsRule.getPowerProfile())); WifiPowerStatsCollector collector = new WifiPowerStatsCollector(mInjector, null); collector.setEnabled(true); @@ -327,6 +325,8 @@ public class WifiPowerStatsProcessorTest { new int[]{WIFI_ENERGY_CONSUMER_ID})) .thenReturn(new long[]{0}); + aggregatedStats.start(0); + // Establish a baseline aggregatedStats.addPowerStats(collector.collectStats(), 0); @@ -359,7 +359,7 @@ public class WifiPowerStatsProcessorTest { aggregatedStats.addPowerStats(collector.collectStats(), 10_000); - processor.finish(aggregatedStats, 10_000); + aggregatedStats.finish(10_000); WifiPowerStatsLayout statsLayout = new WifiPowerStatsLayout(aggregatedStats.getPowerStatsDescriptor()); @@ -424,14 +424,14 @@ public class WifiPowerStatsProcessorTest { when(mConsumedEnergyRetriever.getEnergyConsumerIds(EnergyConsumerType.WIFI)) .thenReturn(new int[0]); - WifiPowerStatsProcessor processor = - new WifiPowerStatsProcessor(mStatsRule.getPowerProfile()); - - PowerComponentAggregatedPowerStats aggregatedStats = createAggregatedPowerStats(processor); + PowerComponentAggregatedPowerStats aggregatedStats = createAggregatedPowerStats( + () -> new WifiPowerStatsProcessor(mStatsRule.getPowerProfile())); WifiPowerStatsCollector collector = new WifiPowerStatsCollector(mInjector, null); collector.setEnabled(true); + aggregatedStats.start(0); + // Establish a baseline aggregatedStats.addPowerStats(collector.collectStats(), 0); @@ -458,7 +458,7 @@ public class WifiPowerStatsProcessorTest { aggregatedStats.addPowerStats(collector.collectStats(), 10_000); - processor.finish(aggregatedStats, 10_000); + aggregatedStats.finish(10_000); WifiPowerStatsLayout statsLayout = new WifiPowerStatsLayout(aggregatedStats.getPowerStatsDescriptor()); @@ -524,12 +524,12 @@ public class WifiPowerStatsProcessorTest { } private static PowerComponentAggregatedPowerStats createAggregatedPowerStats( - WifiPowerStatsProcessor processor) { + Supplier<PowerStatsProcessor> processorSupplier) { AggregatedPowerStatsConfig.PowerComponent config = new AggregatedPowerStatsConfig.PowerComponent(BatteryConsumer.POWER_COMPONENT_WIFI) .trackDeviceStates(STATE_POWER, STATE_SCREEN) .trackUidStates(STATE_POWER, STATE_SCREEN, STATE_PROCESS_STATE) - .setProcessor(processor); + .setProcessorSupplier(processorSupplier); PowerComponentAggregatedPowerStats aggregatedStats = new PowerComponentAggregatedPowerStats( |