Loading services/core/java/com/android/server/power/stats/BatteryStatsImpl.java +1 −7 Original line number Diff line number Diff line Loading @@ -179,7 +179,6 @@ import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.locks.ReentrantLock; import java.util.function.IntSupplier; import java.util.function.LongSupplier; import java.util.function.Supplier; Loading Loading @@ -2027,7 +2026,7 @@ public class BatteryStatsImpl extends BatteryStats { void setContext(Context context) { mPackageManager = context.getPackageManager(); mConsumedEnergyRetriever = new PowerStatsCollector.ConsumedEnergyRetrieverImpl( LocalServices.getService(PowerStatsInternal.class)); LocalServices.getService(PowerStatsInternal.class), () -> mBatteryVoltageMv); mNetworkStatsManager = context.getSystemService(NetworkStatsManager.class); mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); Loading Loading @@ -2081,11 +2080,6 @@ public class BatteryStatsImpl extends BatteryStats { return mConsumedEnergyRetriever; } @Override public IntSupplier getVoltageSupplier() { return () -> mBatteryVoltageMv; } @Override public ScreenPowerStatsCollector.ScreenUsageTimeRetriever getScreenUsageTimeRetriever() { return mScreenUsageTimeRetriever; Loading services/core/java/com/android/server/power/stats/BluetoothPowerStatsCollector.java +6 −46 Original line number Diff line number Diff line Loading @@ -30,12 +30,10 @@ import com.android.internal.os.Clock; import com.android.internal.os.PowerStats; import com.android.server.power.stats.format.BluetoothPowerStatsLayout; import java.util.Arrays; import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; import java.util.concurrent.TimeUnit; import java.util.function.IntSupplier; public class BluetoothPowerStatsCollector extends PowerStatsCollector { private static final String TAG = "BluetoothPowerStatsCollector"; Loading @@ -62,7 +60,6 @@ public class BluetoothPowerStatsCollector extends PowerStatsCollector { long getPowerStatsCollectionThrottlePeriod(String powerComponentName); PackageManager getPackageManager(); ConsumedEnergyRetriever getConsumedEnergyRetriever(); IntSupplier getVoltageSupplier(); BluetoothStatsRetriever getBluetoothStatsRetriever(); } Loading @@ -74,10 +71,7 @@ public class BluetoothPowerStatsCollector extends PowerStatsCollector { private long[] mDeviceStats; private BluetoothStatsRetriever mBluetoothStatsRetriever; private ConsumedEnergyRetriever mConsumedEnergyRetriever; private IntSupplier mVoltageSupplier; private int[] mEnergyConsumerIds = new int[0]; private long[] mLastConsumedEnergyUws; private int mLastVoltageMv; private ConsumedEnergyHelper mConsumedEnergyHelper; private long mLastRxTime; private long mLastTxTime; Loading Loading @@ -123,15 +117,11 @@ public class BluetoothPowerStatsCollector extends PowerStatsCollector { return false; } mConsumedEnergyRetriever = mInjector.getConsumedEnergyRetriever(); mVoltageSupplier = mInjector.getVoltageSupplier(); mBluetoothStatsRetriever = mInjector.getBluetoothStatsRetriever(); mEnergyConsumerIds = mConsumedEnergyRetriever.getEnergyConsumerIds(EnergyConsumerType.BLUETOOTH); mLastConsumedEnergyUws = new long[mEnergyConsumerIds.length]; Arrays.fill(mLastConsumedEnergyUws, ENERGY_UNSPECIFIED); mLayout = new BluetoothPowerStatsLayout(mEnergyConsumerIds.length); mConsumedEnergyRetriever = mInjector.getConsumedEnergyRetriever(); mConsumedEnergyHelper = new ConsumedEnergyHelper(mConsumedEnergyRetriever, EnergyConsumerType.BLUETOOTH); mLayout = new BluetoothPowerStatsLayout(mConsumedEnergyHelper.getEnergyConsumerCount()); PersistableBundle extras = new PersistableBundle(); mLayout.toExtras(extras); Loading @@ -157,9 +147,7 @@ public class BluetoothPowerStatsCollector extends PowerStatsCollector { collectBluetoothActivityInfo(); collectBluetoothScanStats(); if (mEnergyConsumerIds.length != 0) { collectEnergyConsumers(); } mConsumedEnergyHelper.collectConsumedEnergy(mPowerStats, mLayout); return mPowerStats; } Loading Loading @@ -291,34 +279,6 @@ public class BluetoothPowerStatsCollector extends PowerStatsCollector { mLayout.setDeviceScanTime(mDeviceStats, totalScanTime); } private void collectEnergyConsumers() { int voltageMv = mVoltageSupplier.getAsInt(); if (voltageMv <= 0) { Slog.wtf(TAG, "Unexpected battery voltage (" + voltageMv + " mV) when querying energy consumers"); return; } int averageVoltage = mLastVoltageMv != 0 ? (mLastVoltageMv + voltageMv) / 2 : voltageMv; mLastVoltageMv = voltageMv; long[] energyUws = mConsumedEnergyRetriever.getConsumedEnergyUws(mEnergyConsumerIds); if (energyUws == null) { return; } for (int i = energyUws.length - 1; i >= 0; i--) { long energyDelta = mLastConsumedEnergyUws[i] != ENERGY_UNSPECIFIED ? energyUws[i] - mLastConsumedEnergyUws[i] : 0; if (energyDelta < 0) { // Likely, restart of powerstats HAL energyDelta = 0; } mLayout.setConsumedEnergy(mPowerStats.stats, i, uJtoUc(energyDelta, averageVoltage)); mLastConsumedEnergyUws[i] = energyUws[i]; } } @Override protected void onUidRemoved(int uid) { super.onUidRemoved(uid); Loading services/core/java/com/android/server/power/stats/CameraPowerStatsCollector.java +1 −2 Original line number Diff line number Diff line Loading @@ -26,7 +26,6 @@ public class CameraPowerStatsCollector extends EnergyConsumerPowerStatsCollector public CameraPowerStatsCollector(Injector injector) { super(injector, BatteryConsumer.POWER_COMPONENT_CAMERA, BatteryConsumer.powerComponentIdToString(BatteryConsumer.POWER_COMPONENT_CAMERA), EnergyConsumerType.CAMERA, /* energy consumer name */ null, new BinaryStatePowerStatsLayout()); EnergyConsumerType.CAMERA, new BinaryStatePowerStatsLayout()); } } services/core/java/com/android/server/power/stats/CpuPowerStatsCollector.java +11 −50 Original line number Diff line number Diff line Loading @@ -34,9 +34,7 @@ import com.android.internal.os.PowerStats; import com.android.server.power.stats.format.CpuPowerStatsLayout; import java.io.PrintWriter; import java.util.Arrays; import java.util.Locale; import java.util.function.IntSupplier; /** * Collects snapshots of power-related system statistics. Loading @@ -47,7 +45,6 @@ import java.util.function.IntSupplier; public class CpuPowerStatsCollector extends PowerStatsCollector { private static final String TAG = "CpuPowerStatsCollector"; private static final long NANOS_PER_MILLIS = 1000000; private static final long ENERGY_UNSPECIFIED = -1; private static final int DEFAULT_CPU_POWER_BRACKETS = 3; private static final int DEFAULT_CPU_POWER_BRACKETS_PER_ENERGY_CONSUMER = 2; Loading @@ -59,7 +56,6 @@ public class CpuPowerStatsCollector extends PowerStatsCollector { PowerProfile getPowerProfile(); KernelCpuStatsReader getKernelCpuStatsReader(); ConsumedEnergyRetriever getConsumedEnergyRetriever(); IntSupplier getVoltageSupplier(); long getPowerStatsCollectionThrottlePeriod(String powerComponentName); default int getDefaultCpuPowerBrackets() { Loading @@ -77,8 +73,7 @@ public class CpuPowerStatsCollector extends PowerStatsCollector { private CpuScalingPolicies mCpuScalingPolicies; private PowerProfile mPowerProfile; private KernelCpuStatsReader mKernelCpuStatsReader; private ConsumedEnergyRetriever mConsumedEnergyRetriever; private IntSupplier mVoltageSupplier; private ConsumedEnergyHelper mConsumedEnergyHelper; private int mDefaultCpuPowerBrackets; private int mDefaultCpuPowerBracketsPerEnergyConsumer; private long[] mCpuTimeByScalingStep; Loading @@ -86,15 +81,12 @@ public class CpuPowerStatsCollector extends PowerStatsCollector { private long[] mTempUidStats; private final SparseArray<UidStats> mUidStats = new SparseArray<>(); private boolean mIsPerUidTimeInStateSupported; private int[] mCpuEnergyConsumerIds = new int[0]; private PowerStats.Descriptor mPowerStatsDescriptor; // Reusable instance private PowerStats mCpuPowerStats; private CpuPowerStatsLayout mLayout; private long mLastUpdateTimestampNanos; private long mLastUpdateUptimeMillis; private int mLastVoltageMv; private long[] mLastConsumedEnergyUws; CpuPowerStatsCollector(Injector injector) { super(injector.getHandler(), injector.getPowerStatsCollectionThrottlePeriod( Loading @@ -116,24 +108,21 @@ public class CpuPowerStatsCollector extends PowerStatsCollector { mCpuScalingPolicies = mInjector.getCpuScalingPolicies(); mPowerProfile = mInjector.getPowerProfile(); mKernelCpuStatsReader = mInjector.getKernelCpuStatsReader(); mConsumedEnergyRetriever = mInjector.getConsumedEnergyRetriever(); mVoltageSupplier = mInjector.getVoltageSupplier(); mDefaultCpuPowerBrackets = mInjector.getDefaultCpuPowerBrackets(); mDefaultCpuPowerBracketsPerEnergyConsumer = mInjector.getDefaultCpuPowerBracketsPerEnergyConsumer(); mIsPerUidTimeInStateSupported = mKernelCpuStatsReader.isSupportedFeature(); mCpuEnergyConsumerIds = mConsumedEnergyRetriever.getEnergyConsumerIds(EnergyConsumerType.CPU_CLUSTER); mLastConsumedEnergyUws = new long[mCpuEnergyConsumerIds.length]; Arrays.fill(mLastConsumedEnergyUws, ENERGY_UNSPECIFIED); mConsumedEnergyHelper = new ConsumedEnergyHelper(mInjector.getConsumedEnergyRetriever(), EnergyConsumerType.CPU_CLUSTER); int cpuScalingStepCount = mCpuScalingPolicies.getScalingStepCount(); mCpuTimeByScalingStep = new long[cpuScalingStepCount]; mTempCpuTimeByScalingStep = new long[cpuScalingStepCount]; int[] scalingStepToPowerBracketMap = initPowerBrackets(); mLayout = new CpuPowerStatsLayout(mCpuEnergyConsumerIds.length, mLayout = new CpuPowerStatsLayout(mConsumedEnergyHelper.getEnergyConsumerCount(), mCpuScalingPolicies.getPolicies().length, scalingStepToPowerBracketMap); PersistableBundle extras = new PersistableBundle(); Loading @@ -153,16 +142,18 @@ public class CpuPowerStatsCollector extends PowerStatsCollector { private int[] initPowerBrackets() { if (mPowerProfile.getCpuPowerBracketCount() != PowerProfile.POWER_BRACKETS_UNSPECIFIED) { return initPowerBracketsFromPowerProfile(); } else if (mCpuEnergyConsumerIds.length == 0 || mCpuEnergyConsumerIds.length == 1) { } else if (mConsumedEnergyHelper.getEnergyConsumerCount() == 0 || mConsumedEnergyHelper.getEnergyConsumerCount() == 1) { return initDefaultPowerBrackets(mDefaultCpuPowerBrackets); } else if (mCpuScalingPolicies.getPolicies().length == mCpuEnergyConsumerIds.length) { } else if (mCpuScalingPolicies.getPolicies().length == mConsumedEnergyHelper.getEnergyConsumerCount()) { return initPowerBracketsByCluster(mDefaultCpuPowerBracketsPerEnergyConsumer); } else { Slog.i(TAG, "Assigning a single power brackets to each CPU_CLUSTER energy consumer." + " Number of CPU clusters (" + mCpuScalingPolicies.getPolicies().length + ") does not match the number of energy consumers (" + mCpuEnergyConsumerIds.length + "). " + mConsumedEnergyHelper.getEnergyConsumerCount() + "). " + " Using default power bucket assignment."); return initDefaultPowerBrackets(mDefaultCpuPowerBrackets); } Loading Loading @@ -363,41 +354,11 @@ public class CpuPowerStatsCollector extends PowerStatsCollector { } mLayout.setUsageDuration(mCpuPowerStats.stats, uptimeDelta); if (mCpuEnergyConsumerIds.length != 0) { collectEnergyConsumers(); } mConsumedEnergyHelper.collectConsumedEnergy(mCpuPowerStats, mLayout); return mCpuPowerStats; } private void collectEnergyConsumers() { int voltageMv = mVoltageSupplier.getAsInt(); if (voltageMv <= 0) { Slog.wtf(TAG, "Unexpected battery voltage (" + voltageMv + " mV) when querying energy consumers"); return; } int averageVoltage = mLastVoltageMv != 0 ? (mLastVoltageMv + voltageMv) / 2 : voltageMv; mLastVoltageMv = voltageMv; long[] energyUws = mConsumedEnergyRetriever.getConsumedEnergyUws(mCpuEnergyConsumerIds); if (energyUws == null) { return; } for (int i = energyUws.length - 1; i >= 0; i--) { long energyDelta = mLastConsumedEnergyUws[i] != ENERGY_UNSPECIFIED ? energyUws[i] - mLastConsumedEnergyUws[i] : 0; if (energyDelta < 0) { // Likely, restart of powerstats HAL energyDelta = 0; } mLayout.setConsumedEnergy(mCpuPowerStats.stats, i, uJtoUc(energyDelta, averageVoltage)); mLastConsumedEnergyUws[i] = energyUws[i]; } } @VisibleForNative interface KernelCpuStatsCallback { @Keep // Called from native Loading services/core/java/com/android/server/power/stats/CustomEnergyConsumerPowerStatsCollector.java +2 −1 Original line number Diff line number Diff line Loading @@ -49,7 +49,8 @@ public class CustomEnergyConsumerPowerStatsCollector extends PowerStatsCollector for (int i = 0; i < energyConsumerIds.length; i++) { String name = retriever.getEnergyConsumerName(energyConsumerIds[i]); EnergyConsumerPowerStatsCollector collector = new EnergyConsumerPowerStatsCollector( mInjector, powerComponentId++, name, energyConsumerIds[i], sLayout); mInjector, powerComponentId++, name, EnergyConsumerType.OTHER, energyConsumerIds[i], sLayout); collector.setEnabled(true); collector.addConsumer(this::deliverStats); mCollectors.add(collector); Loading Loading
services/core/java/com/android/server/power/stats/BatteryStatsImpl.java +1 −7 Original line number Diff line number Diff line Loading @@ -179,7 +179,6 @@ import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.locks.ReentrantLock; import java.util.function.IntSupplier; import java.util.function.LongSupplier; import java.util.function.Supplier; Loading Loading @@ -2027,7 +2026,7 @@ public class BatteryStatsImpl extends BatteryStats { void setContext(Context context) { mPackageManager = context.getPackageManager(); mConsumedEnergyRetriever = new PowerStatsCollector.ConsumedEnergyRetrieverImpl( LocalServices.getService(PowerStatsInternal.class)); LocalServices.getService(PowerStatsInternal.class), () -> mBatteryVoltageMv); mNetworkStatsManager = context.getSystemService(NetworkStatsManager.class); mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); Loading Loading @@ -2081,11 +2080,6 @@ public class BatteryStatsImpl extends BatteryStats { return mConsumedEnergyRetriever; } @Override public IntSupplier getVoltageSupplier() { return () -> mBatteryVoltageMv; } @Override public ScreenPowerStatsCollector.ScreenUsageTimeRetriever getScreenUsageTimeRetriever() { return mScreenUsageTimeRetriever; Loading
services/core/java/com/android/server/power/stats/BluetoothPowerStatsCollector.java +6 −46 Original line number Diff line number Diff line Loading @@ -30,12 +30,10 @@ import com.android.internal.os.Clock; import com.android.internal.os.PowerStats; import com.android.server.power.stats.format.BluetoothPowerStatsLayout; import java.util.Arrays; import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; import java.util.concurrent.TimeUnit; import java.util.function.IntSupplier; public class BluetoothPowerStatsCollector extends PowerStatsCollector { private static final String TAG = "BluetoothPowerStatsCollector"; Loading @@ -62,7 +60,6 @@ public class BluetoothPowerStatsCollector extends PowerStatsCollector { long getPowerStatsCollectionThrottlePeriod(String powerComponentName); PackageManager getPackageManager(); ConsumedEnergyRetriever getConsumedEnergyRetriever(); IntSupplier getVoltageSupplier(); BluetoothStatsRetriever getBluetoothStatsRetriever(); } Loading @@ -74,10 +71,7 @@ public class BluetoothPowerStatsCollector extends PowerStatsCollector { private long[] mDeviceStats; private BluetoothStatsRetriever mBluetoothStatsRetriever; private ConsumedEnergyRetriever mConsumedEnergyRetriever; private IntSupplier mVoltageSupplier; private int[] mEnergyConsumerIds = new int[0]; private long[] mLastConsumedEnergyUws; private int mLastVoltageMv; private ConsumedEnergyHelper mConsumedEnergyHelper; private long mLastRxTime; private long mLastTxTime; Loading Loading @@ -123,15 +117,11 @@ public class BluetoothPowerStatsCollector extends PowerStatsCollector { return false; } mConsumedEnergyRetriever = mInjector.getConsumedEnergyRetriever(); mVoltageSupplier = mInjector.getVoltageSupplier(); mBluetoothStatsRetriever = mInjector.getBluetoothStatsRetriever(); mEnergyConsumerIds = mConsumedEnergyRetriever.getEnergyConsumerIds(EnergyConsumerType.BLUETOOTH); mLastConsumedEnergyUws = new long[mEnergyConsumerIds.length]; Arrays.fill(mLastConsumedEnergyUws, ENERGY_UNSPECIFIED); mLayout = new BluetoothPowerStatsLayout(mEnergyConsumerIds.length); mConsumedEnergyRetriever = mInjector.getConsumedEnergyRetriever(); mConsumedEnergyHelper = new ConsumedEnergyHelper(mConsumedEnergyRetriever, EnergyConsumerType.BLUETOOTH); mLayout = new BluetoothPowerStatsLayout(mConsumedEnergyHelper.getEnergyConsumerCount()); PersistableBundle extras = new PersistableBundle(); mLayout.toExtras(extras); Loading @@ -157,9 +147,7 @@ public class BluetoothPowerStatsCollector extends PowerStatsCollector { collectBluetoothActivityInfo(); collectBluetoothScanStats(); if (mEnergyConsumerIds.length != 0) { collectEnergyConsumers(); } mConsumedEnergyHelper.collectConsumedEnergy(mPowerStats, mLayout); return mPowerStats; } Loading Loading @@ -291,34 +279,6 @@ public class BluetoothPowerStatsCollector extends PowerStatsCollector { mLayout.setDeviceScanTime(mDeviceStats, totalScanTime); } private void collectEnergyConsumers() { int voltageMv = mVoltageSupplier.getAsInt(); if (voltageMv <= 0) { Slog.wtf(TAG, "Unexpected battery voltage (" + voltageMv + " mV) when querying energy consumers"); return; } int averageVoltage = mLastVoltageMv != 0 ? (mLastVoltageMv + voltageMv) / 2 : voltageMv; mLastVoltageMv = voltageMv; long[] energyUws = mConsumedEnergyRetriever.getConsumedEnergyUws(mEnergyConsumerIds); if (energyUws == null) { return; } for (int i = energyUws.length - 1; i >= 0; i--) { long energyDelta = mLastConsumedEnergyUws[i] != ENERGY_UNSPECIFIED ? energyUws[i] - mLastConsumedEnergyUws[i] : 0; if (energyDelta < 0) { // Likely, restart of powerstats HAL energyDelta = 0; } mLayout.setConsumedEnergy(mPowerStats.stats, i, uJtoUc(energyDelta, averageVoltage)); mLastConsumedEnergyUws[i] = energyUws[i]; } } @Override protected void onUidRemoved(int uid) { super.onUidRemoved(uid); Loading
services/core/java/com/android/server/power/stats/CameraPowerStatsCollector.java +1 −2 Original line number Diff line number Diff line Loading @@ -26,7 +26,6 @@ public class CameraPowerStatsCollector extends EnergyConsumerPowerStatsCollector public CameraPowerStatsCollector(Injector injector) { super(injector, BatteryConsumer.POWER_COMPONENT_CAMERA, BatteryConsumer.powerComponentIdToString(BatteryConsumer.POWER_COMPONENT_CAMERA), EnergyConsumerType.CAMERA, /* energy consumer name */ null, new BinaryStatePowerStatsLayout()); EnergyConsumerType.CAMERA, new BinaryStatePowerStatsLayout()); } }
services/core/java/com/android/server/power/stats/CpuPowerStatsCollector.java +11 −50 Original line number Diff line number Diff line Loading @@ -34,9 +34,7 @@ import com.android.internal.os.PowerStats; import com.android.server.power.stats.format.CpuPowerStatsLayout; import java.io.PrintWriter; import java.util.Arrays; import java.util.Locale; import java.util.function.IntSupplier; /** * Collects snapshots of power-related system statistics. Loading @@ -47,7 +45,6 @@ import java.util.function.IntSupplier; public class CpuPowerStatsCollector extends PowerStatsCollector { private static final String TAG = "CpuPowerStatsCollector"; private static final long NANOS_PER_MILLIS = 1000000; private static final long ENERGY_UNSPECIFIED = -1; private static final int DEFAULT_CPU_POWER_BRACKETS = 3; private static final int DEFAULT_CPU_POWER_BRACKETS_PER_ENERGY_CONSUMER = 2; Loading @@ -59,7 +56,6 @@ public class CpuPowerStatsCollector extends PowerStatsCollector { PowerProfile getPowerProfile(); KernelCpuStatsReader getKernelCpuStatsReader(); ConsumedEnergyRetriever getConsumedEnergyRetriever(); IntSupplier getVoltageSupplier(); long getPowerStatsCollectionThrottlePeriod(String powerComponentName); default int getDefaultCpuPowerBrackets() { Loading @@ -77,8 +73,7 @@ public class CpuPowerStatsCollector extends PowerStatsCollector { private CpuScalingPolicies mCpuScalingPolicies; private PowerProfile mPowerProfile; private KernelCpuStatsReader mKernelCpuStatsReader; private ConsumedEnergyRetriever mConsumedEnergyRetriever; private IntSupplier mVoltageSupplier; private ConsumedEnergyHelper mConsumedEnergyHelper; private int mDefaultCpuPowerBrackets; private int mDefaultCpuPowerBracketsPerEnergyConsumer; private long[] mCpuTimeByScalingStep; Loading @@ -86,15 +81,12 @@ public class CpuPowerStatsCollector extends PowerStatsCollector { private long[] mTempUidStats; private final SparseArray<UidStats> mUidStats = new SparseArray<>(); private boolean mIsPerUidTimeInStateSupported; private int[] mCpuEnergyConsumerIds = new int[0]; private PowerStats.Descriptor mPowerStatsDescriptor; // Reusable instance private PowerStats mCpuPowerStats; private CpuPowerStatsLayout mLayout; private long mLastUpdateTimestampNanos; private long mLastUpdateUptimeMillis; private int mLastVoltageMv; private long[] mLastConsumedEnergyUws; CpuPowerStatsCollector(Injector injector) { super(injector.getHandler(), injector.getPowerStatsCollectionThrottlePeriod( Loading @@ -116,24 +108,21 @@ public class CpuPowerStatsCollector extends PowerStatsCollector { mCpuScalingPolicies = mInjector.getCpuScalingPolicies(); mPowerProfile = mInjector.getPowerProfile(); mKernelCpuStatsReader = mInjector.getKernelCpuStatsReader(); mConsumedEnergyRetriever = mInjector.getConsumedEnergyRetriever(); mVoltageSupplier = mInjector.getVoltageSupplier(); mDefaultCpuPowerBrackets = mInjector.getDefaultCpuPowerBrackets(); mDefaultCpuPowerBracketsPerEnergyConsumer = mInjector.getDefaultCpuPowerBracketsPerEnergyConsumer(); mIsPerUidTimeInStateSupported = mKernelCpuStatsReader.isSupportedFeature(); mCpuEnergyConsumerIds = mConsumedEnergyRetriever.getEnergyConsumerIds(EnergyConsumerType.CPU_CLUSTER); mLastConsumedEnergyUws = new long[mCpuEnergyConsumerIds.length]; Arrays.fill(mLastConsumedEnergyUws, ENERGY_UNSPECIFIED); mConsumedEnergyHelper = new ConsumedEnergyHelper(mInjector.getConsumedEnergyRetriever(), EnergyConsumerType.CPU_CLUSTER); int cpuScalingStepCount = mCpuScalingPolicies.getScalingStepCount(); mCpuTimeByScalingStep = new long[cpuScalingStepCount]; mTempCpuTimeByScalingStep = new long[cpuScalingStepCount]; int[] scalingStepToPowerBracketMap = initPowerBrackets(); mLayout = new CpuPowerStatsLayout(mCpuEnergyConsumerIds.length, mLayout = new CpuPowerStatsLayout(mConsumedEnergyHelper.getEnergyConsumerCount(), mCpuScalingPolicies.getPolicies().length, scalingStepToPowerBracketMap); PersistableBundle extras = new PersistableBundle(); Loading @@ -153,16 +142,18 @@ public class CpuPowerStatsCollector extends PowerStatsCollector { private int[] initPowerBrackets() { if (mPowerProfile.getCpuPowerBracketCount() != PowerProfile.POWER_BRACKETS_UNSPECIFIED) { return initPowerBracketsFromPowerProfile(); } else if (mCpuEnergyConsumerIds.length == 0 || mCpuEnergyConsumerIds.length == 1) { } else if (mConsumedEnergyHelper.getEnergyConsumerCount() == 0 || mConsumedEnergyHelper.getEnergyConsumerCount() == 1) { return initDefaultPowerBrackets(mDefaultCpuPowerBrackets); } else if (mCpuScalingPolicies.getPolicies().length == mCpuEnergyConsumerIds.length) { } else if (mCpuScalingPolicies.getPolicies().length == mConsumedEnergyHelper.getEnergyConsumerCount()) { return initPowerBracketsByCluster(mDefaultCpuPowerBracketsPerEnergyConsumer); } else { Slog.i(TAG, "Assigning a single power brackets to each CPU_CLUSTER energy consumer." + " Number of CPU clusters (" + mCpuScalingPolicies.getPolicies().length + ") does not match the number of energy consumers (" + mCpuEnergyConsumerIds.length + "). " + mConsumedEnergyHelper.getEnergyConsumerCount() + "). " + " Using default power bucket assignment."); return initDefaultPowerBrackets(mDefaultCpuPowerBrackets); } Loading Loading @@ -363,41 +354,11 @@ public class CpuPowerStatsCollector extends PowerStatsCollector { } mLayout.setUsageDuration(mCpuPowerStats.stats, uptimeDelta); if (mCpuEnergyConsumerIds.length != 0) { collectEnergyConsumers(); } mConsumedEnergyHelper.collectConsumedEnergy(mCpuPowerStats, mLayout); return mCpuPowerStats; } private void collectEnergyConsumers() { int voltageMv = mVoltageSupplier.getAsInt(); if (voltageMv <= 0) { Slog.wtf(TAG, "Unexpected battery voltage (" + voltageMv + " mV) when querying energy consumers"); return; } int averageVoltage = mLastVoltageMv != 0 ? (mLastVoltageMv + voltageMv) / 2 : voltageMv; mLastVoltageMv = voltageMv; long[] energyUws = mConsumedEnergyRetriever.getConsumedEnergyUws(mCpuEnergyConsumerIds); if (energyUws == null) { return; } for (int i = energyUws.length - 1; i >= 0; i--) { long energyDelta = mLastConsumedEnergyUws[i] != ENERGY_UNSPECIFIED ? energyUws[i] - mLastConsumedEnergyUws[i] : 0; if (energyDelta < 0) { // Likely, restart of powerstats HAL energyDelta = 0; } mLayout.setConsumedEnergy(mCpuPowerStats.stats, i, uJtoUc(energyDelta, averageVoltage)); mLastConsumedEnergyUws[i] = energyUws[i]; } } @VisibleForNative interface KernelCpuStatsCallback { @Keep // Called from native Loading
services/core/java/com/android/server/power/stats/CustomEnergyConsumerPowerStatsCollector.java +2 −1 Original line number Diff line number Diff line Loading @@ -49,7 +49,8 @@ public class CustomEnergyConsumerPowerStatsCollector extends PowerStatsCollector for (int i = 0; i < energyConsumerIds.length; i++) { String name = retriever.getEnergyConsumerName(energyConsumerIds[i]); EnergyConsumerPowerStatsCollector collector = new EnergyConsumerPowerStatsCollector( mInjector, powerComponentId++, name, energyConsumerIds[i], sLayout); mInjector, powerComponentId++, name, EnergyConsumerType.OTHER, energyConsumerIds[i], sLayout); collector.setEnabled(true); collector.addConsumer(this::deliverStats); mCollectors.add(collector); Loading