Loading core/java/com/android/internal/os/BatteryStatsHistory.java +27 −20 Original line number Diff line number Diff line Loading @@ -250,23 +250,22 @@ public class BatteryStatsHistory { private static class BatteryHistoryDirectory { private final File mDirectory; private final MonotonicClock mMonotonicClock; private int mMaxHistoryFiles; private int mMaxHistorySize; private final List<BatteryHistoryFile> mHistoryFiles = new ArrayList<>(); private final ReentrantLock mLock = new ReentrantLock(); private boolean mCleanupNeeded; BatteryHistoryDirectory(File directory, MonotonicClock monotonicClock, int maxHistoryFiles) { BatteryHistoryDirectory(File directory, MonotonicClock monotonicClock, int maxHistorySize) { mDirectory = directory; mMonotonicClock = monotonicClock; mMaxHistoryFiles = maxHistoryFiles; if (mMaxHistoryFiles == 0) { Slog.wtf(TAG, "mMaxHistoryFiles should not be zero when writing history"); mMaxHistorySize = maxHistorySize; if (mMaxHistorySize == 0) { Slog.w(TAG, "mMaxHistorySize should not be zero when writing history"); } } void setMaxHistoryFiles(int maxHistoryFiles) { mMaxHistoryFiles = maxHistoryFiles; void setMaxHistorySize(int maxHistorySize) { mMaxHistorySize = maxHistorySize; cleanup(); } Loading Loading @@ -500,13 +499,14 @@ public class BatteryStatsHistory { oldest.atomicFile.delete(); } // if there are more history files than allowed, delete oldest history files. // mMaxHistoryFiles comes from Constants.MAX_HISTORY_FILES and // can be updated by DeviceConfig at run time. while (mHistoryFiles.size() > mMaxHistoryFiles) { // if there is more history stored than allowed, delete oldest history files. int size = getSize(); while (size > mMaxHistorySize) { BatteryHistoryFile oldest = mHistoryFiles.get(0); int length = (int) oldest.atomicFile.getBaseFile().length(); oldest.atomicFile.delete(); mHistoryFiles.remove(0); size -= length; } } finally { unlock(); Loading Loading @@ -595,19 +595,19 @@ public class BatteryStatsHistory { * Constructor * * @param systemDir typically /data/system * @param maxHistoryFiles the largest number of history buffer files to keep * @param maxHistorySize the largest amount of battery history to keep on disk * @param maxHistoryBufferSize the most amount of RAM to used for buffering of history steps */ public BatteryStatsHistory(Parcel historyBuffer, File systemDir, int maxHistoryFiles, int maxHistoryBufferSize, int maxHistorySize, int maxHistoryBufferSize, HistoryStepDetailsCalculator stepDetailsCalculator, Clock clock, MonotonicClock monotonicClock, TraceDelegate tracer, EventLogger eventLogger) { this(historyBuffer, systemDir, maxHistoryFiles, maxHistoryBufferSize, stepDetailsCalculator, this(historyBuffer, systemDir, maxHistorySize, maxHistoryBufferSize, stepDetailsCalculator, clock, monotonicClock, tracer, eventLogger, null); } private BatteryStatsHistory(@Nullable Parcel historyBuffer, @Nullable File systemDir, int maxHistoryFiles, int maxHistoryBufferSize, int maxHistorySize, int maxHistoryBufferSize, @NonNull HistoryStepDetailsCalculator stepDetailsCalculator, @NonNull Clock clock, @NonNull MonotonicClock monotonicClock, @NonNull TraceDelegate tracer, @NonNull EventLogger eventLogger, @Nullable BatteryStatsHistory writableHistory) { Loading @@ -634,7 +634,7 @@ public class BatteryStatsHistory { mHistoryDir = writableHistory.mHistoryDir; } else if (systemDir != null) { mHistoryDir = new BatteryHistoryDirectory(new File(systemDir, HISTORY_DIR), monotonicClock, maxHistoryFiles); monotonicClock, maxHistorySize); mHistoryDir.load(); BatteryHistoryFile activeFile = mHistoryDir.getLastFile(); if (activeFile == null) { Loading Loading @@ -690,11 +690,11 @@ public class BatteryStatsHistory { } /** * Changes the maximum number of history files to be kept. * Changes the maximum amount of history to be kept on disk. */ public void setMaxHistoryFiles(int maxHistoryFiles) { public void setMaxHistorySize(int maxHistorySize) { if (mHistoryDir != null) { mHistoryDir.setMaxHistoryFiles(maxHistoryFiles); mHistoryDir.setMaxHistorySize(maxHistorySize); } } Loading Loading @@ -1174,6 +1174,13 @@ public class BatteryStatsHistory { return mActiveFile; } /** * Returns the maximum storage size allocated to battery history. */ public int getMaxHistorySize() { return mHistoryDir.mMaxHistorySize; } /** * @return the total size of all history files and history buffer. */ Loading core/res/res/values/config_battery_stats.xml +2 −0 Original line number Diff line number Diff line Loading @@ -53,4 +53,6 @@ battery history, in bytes. --> <integer name="config_accumulatedBatteryUsageStatsSpanSize">32768</integer> <!-- Size of storage allocated to battery history, in bytes --> <integer name="config_batteryHistoryStorageSize">4194304</integer> </resources> core/res/res/values/symbols.xml +1 −0 Original line number Diff line number Diff line Loading @@ -5358,6 +5358,7 @@ <java-symbol type="integer" name="config_powerStatsAggregationPeriod" /> <java-symbol type="integer" name="config_aggregatedPowerStatsSpanDuration" /> <java-symbol type="integer" name="config_accumulatedBatteryUsageStatsSpanSize" /> <java-symbol type="integer" name="config_batteryHistoryStorageSize" /> <!--Dynamic Tokens--> <java-symbol name="materialColorBackground" type="color"/> Loading services/core/java/com/android/server/am/BatteryStatsService.java +4 −1 Original line number Diff line number Diff line Loading @@ -427,11 +427,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 int batteryHistoryStorageSize = context.getResources().getInteger( com.android.internal.R.integer.config_batteryHistoryStorageSize); BatteryStatsImpl.BatteryStatsConfig.Builder batteryStatsConfigBuilder = new BatteryStatsImpl.BatteryStatsConfig.Builder() .setResetOnUnplugHighBatteryLevel(resetOnUnplugHighBatteryLevel) .setResetOnUnplugAfterSignificantCharge( resetOnUnplugAfterSignificantCharge); resetOnUnplugAfterSignificantCharge) .setMaxHistorySizeBytes(batteryHistoryStorageSize); setPowerStatsThrottlePeriods(batteryStatsConfigBuilder, context.getResources().getString( com.android.internal.R.string.config_powerStatsThrottlePeriods)); mBatteryStatsConfig = batteryStatsConfigBuilder.build(); Loading services/core/java/com/android/server/power/stats/BatteryStatsImpl.java +40 −24 Original line number Diff line number Diff line Loading @@ -600,13 +600,7 @@ public class BatteryStatsImpl extends BatteryStats { private final int mFlags; private final Long mDefaultPowerStatsThrottlePeriod; private final Map<String, Long> mPowerStatsThrottlePeriods; @VisibleForTesting public BatteryStatsConfig() { mFlags = 0; mDefaultPowerStatsThrottlePeriod = 0L; mPowerStatsThrottlePeriods = Map.of(); } private final int mMaxHistorySizeBytes; private BatteryStatsConfig(Builder builder) { int flags = 0; Loading @@ -619,6 +613,7 @@ public class BatteryStatsImpl extends BatteryStats { mFlags = flags; mDefaultPowerStatsThrottlePeriod = builder.mDefaultPowerStatsThrottlePeriod; mPowerStatsThrottlePeriods = builder.mPowerStatsThrottlePeriods; mMaxHistorySizeBytes = builder.mMaxHistorySizeBytes; } /** Loading Loading @@ -648,18 +643,24 @@ public class BatteryStatsImpl extends BatteryStats { mDefaultPowerStatsThrottlePeriod); } public int getMaxHistorySizeBytes() { return mMaxHistorySizeBytes; } /** * Builder for BatteryStatsConfig */ public static class Builder { private boolean mResetOnUnplugHighBatteryLevel; private boolean mResetOnUnplugAfterSignificantCharge; public static final long DEFAULT_POWER_STATS_THROTTLE_PERIOD = private static final long DEFAULT_POWER_STATS_THROTTLE_PERIOD = TimeUnit.HOURS.toMillis(1); public static final long DEFAULT_POWER_STATS_THROTTLE_PERIOD_CPU = private static final long DEFAULT_POWER_STATS_THROTTLE_PERIOD_CPU = TimeUnit.MINUTES.toMillis(1); private static final int DEFAULT_MAX_HISTORY_SIZE = 4 * 1024 * 1024; private long mDefaultPowerStatsThrottlePeriod = DEFAULT_POWER_STATS_THROTTLE_PERIOD; private final Map<String, Long> mPowerStatsThrottlePeriods = new HashMap<>(); private int mMaxHistorySizeBytes = DEFAULT_MAX_HISTORY_SIZE; public Builder() { mResetOnUnplugHighBatteryLevel = true; Loading Loading @@ -712,6 +713,15 @@ public class BatteryStatsImpl extends BatteryStats { mDefaultPowerStatsThrottlePeriod = periodMs; return this; } /** * Sets the maximum amount of disk space, in bytes, that battery history can * utilize. As this space fills up, the oldest history chunks must be expunged. */ public Builder setMaxHistorySizeBytes(int maxHistorySizeBytes) { mMaxHistorySizeBytes = maxHistorySizeBytes; return this; } } } Loading Loading @@ -11425,7 +11435,7 @@ public class BatteryStatsImpl extends BatteryStats { } mHistory = new BatteryStatsHistory(null /* historyBuffer */, systemDir, mConstants.MAX_HISTORY_FILES, mConstants.MAX_HISTORY_BUFFER, mStepDetailsCalculator, mConstants.MAX_HISTORY_SIZE, mConstants.MAX_HISTORY_BUFFER, mStepDetailsCalculator, mClock, mMonotonicClock, traceDelegate, eventLogger); mCpuPowerStatsCollector = new CpuPowerStatsCollector(mPowerStatsCollectorInjector); Loading Loading @@ -11970,9 +11980,8 @@ public class BatteryStatsImpl extends BatteryStats { return mNextMaxDailyDeadlineMs; } @GuardedBy("this") public int getHistoryTotalSize() { return mConstants.MAX_HISTORY_BUFFER * mConstants.MAX_HISTORY_FILES; return mHistory.getMaxHistorySize(); } public int getHistoryUsedSize() { Loading Loading @@ -16101,7 +16110,7 @@ public class BatteryStatsImpl extends BatteryStats { = "battery_level_collection_delay_ms"; public static final String KEY_PROC_STATE_CHANGE_COLLECTION_DELAY_MS = "procstate_change_collection_delay_ms"; public static final String KEY_MAX_HISTORY_FILES = "max_history_files"; public static final String KEY_MAX_HISTORY_SIZE = "max_history_size"; public static final String KEY_MAX_HISTORY_BUFFER_KB = "max_history_buffer_kb"; public static final String KEY_BATTERY_CHARGED_DELAY_MS = "battery_charged_delay_ms"; Loading Loading @@ -16152,9 +16161,7 @@ public class BatteryStatsImpl extends BatteryStats { private static final long DEFAULT_EXTERNAL_STATS_COLLECTION_RATE_LIMIT_MS = 600_000; private static final long DEFAULT_BATTERY_LEVEL_COLLECTION_DELAY_MS = 300_000; private static final long DEFAULT_PROC_STATE_CHANGE_COLLECTION_DELAY_MS = 60_000; private static final int DEFAULT_MAX_HISTORY_FILES = 32; private static final int DEFAULT_MAX_HISTORY_BUFFER_KB = 128; /*Kilo Bytes*/ private static final int DEFAULT_MAX_HISTORY_FILES_LOW_RAM_DEVICE = 64; private static final int DEFAULT_MAX_HISTORY_BUFFER_LOW_RAM_DEVICE_KB = 64; /*Kilo Bytes*/ private static final int DEFAULT_BATTERY_CHARGED_DELAY_MS = 900000; /* 15 min */ private static final int DEFAULT_BATTERY_CHARGING_ENFORCE_LEVEL = 90; Loading @@ -16176,7 +16183,7 @@ public class BatteryStatsImpl extends BatteryStats { = DEFAULT_BATTERY_LEVEL_COLLECTION_DELAY_MS; public long PROC_STATE_CHANGE_COLLECTION_DELAY_MS = DEFAULT_PROC_STATE_CHANGE_COLLECTION_DELAY_MS; public int MAX_HISTORY_FILES; public int MAX_HISTORY_SIZE; public int MAX_HISTORY_BUFFER; /*Bytes*/ public int BATTERY_CHARGED_DELAY_MS = DEFAULT_BATTERY_CHARGED_DELAY_MS; public int BATTERY_CHARGING_ENFORCE_LEVEL = DEFAULT_BATTERY_CHARGING_ENFORCE_LEVEL; Loading @@ -16192,12 +16199,11 @@ public class BatteryStatsImpl extends BatteryStats { public Constants(Handler handler) { super(handler); if (isLowRamDevice()) { MAX_HISTORY_FILES = DEFAULT_MAX_HISTORY_FILES_LOW_RAM_DEVICE; MAX_HISTORY_BUFFER = DEFAULT_MAX_HISTORY_BUFFER_LOW_RAM_DEVICE_KB * 1024; } else { MAX_HISTORY_FILES = DEFAULT_MAX_HISTORY_FILES; MAX_HISTORY_BUFFER = DEFAULT_MAX_HISTORY_BUFFER_KB * 1024; } MAX_HISTORY_SIZE = mBatteryStatsConfig.getMaxHistorySizeBytes(); } public void startObserving(ContentResolver resolver) { Loading Loading @@ -16260,13 +16266,23 @@ public class BatteryStatsImpl extends BatteryStats { PROC_STATE_CHANGE_COLLECTION_DELAY_MS = mParser.getLong( KEY_PROC_STATE_CHANGE_COLLECTION_DELAY_MS, DEFAULT_PROC_STATE_CHANGE_COLLECTION_DELAY_MS); MAX_HISTORY_FILES = mParser.getInt(KEY_MAX_HISTORY_FILES, isLowRamDevice() ? DEFAULT_MAX_HISTORY_FILES_LOW_RAM_DEVICE : DEFAULT_MAX_HISTORY_FILES); MAX_HISTORY_BUFFER = mParser.getInt(KEY_MAX_HISTORY_BUFFER_KB, isLowRamDevice() ? DEFAULT_MAX_HISTORY_BUFFER_LOW_RAM_DEVICE_KB : DEFAULT_MAX_HISTORY_BUFFER_KB) * 1024; int maxHistorySize = mParser.getInt(KEY_MAX_HISTORY_SIZE, -1); if (maxHistorySize == -1) { // Process the deprecated max_history_files parameter for compatibility int maxHistoryFiles = mParser.getInt("max_history_files", -1); if (maxHistoryFiles != -1) { maxHistorySize = maxHistoryFiles * MAX_HISTORY_BUFFER; } } if (maxHistorySize == -1) { maxHistorySize = mBatteryStatsConfig.getMaxHistorySizeBytes(); } MAX_HISTORY_SIZE = maxHistorySize; final String perUidModemModel = mParser.getString(KEY_PER_UID_MODEM_POWER_MODEL, ""); PER_UID_MODEM_MODEL = getPerUidModemModel(perUidModemModel); Loading @@ -16291,7 +16307,7 @@ public class BatteryStatsImpl extends BatteryStats { */ @VisibleForTesting public void onChange() { mHistory.setMaxHistoryFiles(MAX_HISTORY_FILES); mHistory.setMaxHistorySize(MAX_HISTORY_SIZE); mHistory.setMaxHistoryBufferSize(MAX_HISTORY_BUFFER); } Loading Loading @@ -16354,8 +16370,8 @@ public class BatteryStatsImpl extends BatteryStats { pw.println(BATTERY_LEVEL_COLLECTION_DELAY_MS); pw.print(KEY_PROC_STATE_CHANGE_COLLECTION_DELAY_MS); pw.print("="); pw.println(PROC_STATE_CHANGE_COLLECTION_DELAY_MS); pw.print(KEY_MAX_HISTORY_FILES); pw.print("="); pw.println(MAX_HISTORY_FILES); pw.print(KEY_MAX_HISTORY_SIZE); pw.print("="); pw.println(MAX_HISTORY_SIZE); pw.print(KEY_MAX_HISTORY_BUFFER_KB); pw.print("="); pw.println(MAX_HISTORY_BUFFER/1024); pw.print(KEY_BATTERY_CHARGED_DELAY_MS); pw.print("="); Loading
core/java/com/android/internal/os/BatteryStatsHistory.java +27 −20 Original line number Diff line number Diff line Loading @@ -250,23 +250,22 @@ public class BatteryStatsHistory { private static class BatteryHistoryDirectory { private final File mDirectory; private final MonotonicClock mMonotonicClock; private int mMaxHistoryFiles; private int mMaxHistorySize; private final List<BatteryHistoryFile> mHistoryFiles = new ArrayList<>(); private final ReentrantLock mLock = new ReentrantLock(); private boolean mCleanupNeeded; BatteryHistoryDirectory(File directory, MonotonicClock monotonicClock, int maxHistoryFiles) { BatteryHistoryDirectory(File directory, MonotonicClock monotonicClock, int maxHistorySize) { mDirectory = directory; mMonotonicClock = monotonicClock; mMaxHistoryFiles = maxHistoryFiles; if (mMaxHistoryFiles == 0) { Slog.wtf(TAG, "mMaxHistoryFiles should not be zero when writing history"); mMaxHistorySize = maxHistorySize; if (mMaxHistorySize == 0) { Slog.w(TAG, "mMaxHistorySize should not be zero when writing history"); } } void setMaxHistoryFiles(int maxHistoryFiles) { mMaxHistoryFiles = maxHistoryFiles; void setMaxHistorySize(int maxHistorySize) { mMaxHistorySize = maxHistorySize; cleanup(); } Loading Loading @@ -500,13 +499,14 @@ public class BatteryStatsHistory { oldest.atomicFile.delete(); } // if there are more history files than allowed, delete oldest history files. // mMaxHistoryFiles comes from Constants.MAX_HISTORY_FILES and // can be updated by DeviceConfig at run time. while (mHistoryFiles.size() > mMaxHistoryFiles) { // if there is more history stored than allowed, delete oldest history files. int size = getSize(); while (size > mMaxHistorySize) { BatteryHistoryFile oldest = mHistoryFiles.get(0); int length = (int) oldest.atomicFile.getBaseFile().length(); oldest.atomicFile.delete(); mHistoryFiles.remove(0); size -= length; } } finally { unlock(); Loading Loading @@ -595,19 +595,19 @@ public class BatteryStatsHistory { * Constructor * * @param systemDir typically /data/system * @param maxHistoryFiles the largest number of history buffer files to keep * @param maxHistorySize the largest amount of battery history to keep on disk * @param maxHistoryBufferSize the most amount of RAM to used for buffering of history steps */ public BatteryStatsHistory(Parcel historyBuffer, File systemDir, int maxHistoryFiles, int maxHistoryBufferSize, int maxHistorySize, int maxHistoryBufferSize, HistoryStepDetailsCalculator stepDetailsCalculator, Clock clock, MonotonicClock monotonicClock, TraceDelegate tracer, EventLogger eventLogger) { this(historyBuffer, systemDir, maxHistoryFiles, maxHistoryBufferSize, stepDetailsCalculator, this(historyBuffer, systemDir, maxHistorySize, maxHistoryBufferSize, stepDetailsCalculator, clock, monotonicClock, tracer, eventLogger, null); } private BatteryStatsHistory(@Nullable Parcel historyBuffer, @Nullable File systemDir, int maxHistoryFiles, int maxHistoryBufferSize, int maxHistorySize, int maxHistoryBufferSize, @NonNull HistoryStepDetailsCalculator stepDetailsCalculator, @NonNull Clock clock, @NonNull MonotonicClock monotonicClock, @NonNull TraceDelegate tracer, @NonNull EventLogger eventLogger, @Nullable BatteryStatsHistory writableHistory) { Loading @@ -634,7 +634,7 @@ public class BatteryStatsHistory { mHistoryDir = writableHistory.mHistoryDir; } else if (systemDir != null) { mHistoryDir = new BatteryHistoryDirectory(new File(systemDir, HISTORY_DIR), monotonicClock, maxHistoryFiles); monotonicClock, maxHistorySize); mHistoryDir.load(); BatteryHistoryFile activeFile = mHistoryDir.getLastFile(); if (activeFile == null) { Loading Loading @@ -690,11 +690,11 @@ public class BatteryStatsHistory { } /** * Changes the maximum number of history files to be kept. * Changes the maximum amount of history to be kept on disk. */ public void setMaxHistoryFiles(int maxHistoryFiles) { public void setMaxHistorySize(int maxHistorySize) { if (mHistoryDir != null) { mHistoryDir.setMaxHistoryFiles(maxHistoryFiles); mHistoryDir.setMaxHistorySize(maxHistorySize); } } Loading Loading @@ -1174,6 +1174,13 @@ public class BatteryStatsHistory { return mActiveFile; } /** * Returns the maximum storage size allocated to battery history. */ public int getMaxHistorySize() { return mHistoryDir.mMaxHistorySize; } /** * @return the total size of all history files and history buffer. */ Loading
core/res/res/values/config_battery_stats.xml +2 −0 Original line number Diff line number Diff line Loading @@ -53,4 +53,6 @@ battery history, in bytes. --> <integer name="config_accumulatedBatteryUsageStatsSpanSize">32768</integer> <!-- Size of storage allocated to battery history, in bytes --> <integer name="config_batteryHistoryStorageSize">4194304</integer> </resources>
core/res/res/values/symbols.xml +1 −0 Original line number Diff line number Diff line Loading @@ -5358,6 +5358,7 @@ <java-symbol type="integer" name="config_powerStatsAggregationPeriod" /> <java-symbol type="integer" name="config_aggregatedPowerStatsSpanDuration" /> <java-symbol type="integer" name="config_accumulatedBatteryUsageStatsSpanSize" /> <java-symbol type="integer" name="config_batteryHistoryStorageSize" /> <!--Dynamic Tokens--> <java-symbol name="materialColorBackground" type="color"/> Loading
services/core/java/com/android/server/am/BatteryStatsService.java +4 −1 Original line number Diff line number Diff line Loading @@ -427,11 +427,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 int batteryHistoryStorageSize = context.getResources().getInteger( com.android.internal.R.integer.config_batteryHistoryStorageSize); BatteryStatsImpl.BatteryStatsConfig.Builder batteryStatsConfigBuilder = new BatteryStatsImpl.BatteryStatsConfig.Builder() .setResetOnUnplugHighBatteryLevel(resetOnUnplugHighBatteryLevel) .setResetOnUnplugAfterSignificantCharge( resetOnUnplugAfterSignificantCharge); resetOnUnplugAfterSignificantCharge) .setMaxHistorySizeBytes(batteryHistoryStorageSize); setPowerStatsThrottlePeriods(batteryStatsConfigBuilder, context.getResources().getString( com.android.internal.R.string.config_powerStatsThrottlePeriods)); mBatteryStatsConfig = batteryStatsConfigBuilder.build(); Loading
services/core/java/com/android/server/power/stats/BatteryStatsImpl.java +40 −24 Original line number Diff line number Diff line Loading @@ -600,13 +600,7 @@ public class BatteryStatsImpl extends BatteryStats { private final int mFlags; private final Long mDefaultPowerStatsThrottlePeriod; private final Map<String, Long> mPowerStatsThrottlePeriods; @VisibleForTesting public BatteryStatsConfig() { mFlags = 0; mDefaultPowerStatsThrottlePeriod = 0L; mPowerStatsThrottlePeriods = Map.of(); } private final int mMaxHistorySizeBytes; private BatteryStatsConfig(Builder builder) { int flags = 0; Loading @@ -619,6 +613,7 @@ public class BatteryStatsImpl extends BatteryStats { mFlags = flags; mDefaultPowerStatsThrottlePeriod = builder.mDefaultPowerStatsThrottlePeriod; mPowerStatsThrottlePeriods = builder.mPowerStatsThrottlePeriods; mMaxHistorySizeBytes = builder.mMaxHistorySizeBytes; } /** Loading Loading @@ -648,18 +643,24 @@ public class BatteryStatsImpl extends BatteryStats { mDefaultPowerStatsThrottlePeriod); } public int getMaxHistorySizeBytes() { return mMaxHistorySizeBytes; } /** * Builder for BatteryStatsConfig */ public static class Builder { private boolean mResetOnUnplugHighBatteryLevel; private boolean mResetOnUnplugAfterSignificantCharge; public static final long DEFAULT_POWER_STATS_THROTTLE_PERIOD = private static final long DEFAULT_POWER_STATS_THROTTLE_PERIOD = TimeUnit.HOURS.toMillis(1); public static final long DEFAULT_POWER_STATS_THROTTLE_PERIOD_CPU = private static final long DEFAULT_POWER_STATS_THROTTLE_PERIOD_CPU = TimeUnit.MINUTES.toMillis(1); private static final int DEFAULT_MAX_HISTORY_SIZE = 4 * 1024 * 1024; private long mDefaultPowerStatsThrottlePeriod = DEFAULT_POWER_STATS_THROTTLE_PERIOD; private final Map<String, Long> mPowerStatsThrottlePeriods = new HashMap<>(); private int mMaxHistorySizeBytes = DEFAULT_MAX_HISTORY_SIZE; public Builder() { mResetOnUnplugHighBatteryLevel = true; Loading Loading @@ -712,6 +713,15 @@ public class BatteryStatsImpl extends BatteryStats { mDefaultPowerStatsThrottlePeriod = periodMs; return this; } /** * Sets the maximum amount of disk space, in bytes, that battery history can * utilize. As this space fills up, the oldest history chunks must be expunged. */ public Builder setMaxHistorySizeBytes(int maxHistorySizeBytes) { mMaxHistorySizeBytes = maxHistorySizeBytes; return this; } } } Loading Loading @@ -11425,7 +11435,7 @@ public class BatteryStatsImpl extends BatteryStats { } mHistory = new BatteryStatsHistory(null /* historyBuffer */, systemDir, mConstants.MAX_HISTORY_FILES, mConstants.MAX_HISTORY_BUFFER, mStepDetailsCalculator, mConstants.MAX_HISTORY_SIZE, mConstants.MAX_HISTORY_BUFFER, mStepDetailsCalculator, mClock, mMonotonicClock, traceDelegate, eventLogger); mCpuPowerStatsCollector = new CpuPowerStatsCollector(mPowerStatsCollectorInjector); Loading Loading @@ -11970,9 +11980,8 @@ public class BatteryStatsImpl extends BatteryStats { return mNextMaxDailyDeadlineMs; } @GuardedBy("this") public int getHistoryTotalSize() { return mConstants.MAX_HISTORY_BUFFER * mConstants.MAX_HISTORY_FILES; return mHistory.getMaxHistorySize(); } public int getHistoryUsedSize() { Loading Loading @@ -16101,7 +16110,7 @@ public class BatteryStatsImpl extends BatteryStats { = "battery_level_collection_delay_ms"; public static final String KEY_PROC_STATE_CHANGE_COLLECTION_DELAY_MS = "procstate_change_collection_delay_ms"; public static final String KEY_MAX_HISTORY_FILES = "max_history_files"; public static final String KEY_MAX_HISTORY_SIZE = "max_history_size"; public static final String KEY_MAX_HISTORY_BUFFER_KB = "max_history_buffer_kb"; public static final String KEY_BATTERY_CHARGED_DELAY_MS = "battery_charged_delay_ms"; Loading Loading @@ -16152,9 +16161,7 @@ public class BatteryStatsImpl extends BatteryStats { private static final long DEFAULT_EXTERNAL_STATS_COLLECTION_RATE_LIMIT_MS = 600_000; private static final long DEFAULT_BATTERY_LEVEL_COLLECTION_DELAY_MS = 300_000; private static final long DEFAULT_PROC_STATE_CHANGE_COLLECTION_DELAY_MS = 60_000; private static final int DEFAULT_MAX_HISTORY_FILES = 32; private static final int DEFAULT_MAX_HISTORY_BUFFER_KB = 128; /*Kilo Bytes*/ private static final int DEFAULT_MAX_HISTORY_FILES_LOW_RAM_DEVICE = 64; private static final int DEFAULT_MAX_HISTORY_BUFFER_LOW_RAM_DEVICE_KB = 64; /*Kilo Bytes*/ private static final int DEFAULT_BATTERY_CHARGED_DELAY_MS = 900000; /* 15 min */ private static final int DEFAULT_BATTERY_CHARGING_ENFORCE_LEVEL = 90; Loading @@ -16176,7 +16183,7 @@ public class BatteryStatsImpl extends BatteryStats { = DEFAULT_BATTERY_LEVEL_COLLECTION_DELAY_MS; public long PROC_STATE_CHANGE_COLLECTION_DELAY_MS = DEFAULT_PROC_STATE_CHANGE_COLLECTION_DELAY_MS; public int MAX_HISTORY_FILES; public int MAX_HISTORY_SIZE; public int MAX_HISTORY_BUFFER; /*Bytes*/ public int BATTERY_CHARGED_DELAY_MS = DEFAULT_BATTERY_CHARGED_DELAY_MS; public int BATTERY_CHARGING_ENFORCE_LEVEL = DEFAULT_BATTERY_CHARGING_ENFORCE_LEVEL; Loading @@ -16192,12 +16199,11 @@ public class BatteryStatsImpl extends BatteryStats { public Constants(Handler handler) { super(handler); if (isLowRamDevice()) { MAX_HISTORY_FILES = DEFAULT_MAX_HISTORY_FILES_LOW_RAM_DEVICE; MAX_HISTORY_BUFFER = DEFAULT_MAX_HISTORY_BUFFER_LOW_RAM_DEVICE_KB * 1024; } else { MAX_HISTORY_FILES = DEFAULT_MAX_HISTORY_FILES; MAX_HISTORY_BUFFER = DEFAULT_MAX_HISTORY_BUFFER_KB * 1024; } MAX_HISTORY_SIZE = mBatteryStatsConfig.getMaxHistorySizeBytes(); } public void startObserving(ContentResolver resolver) { Loading Loading @@ -16260,13 +16266,23 @@ public class BatteryStatsImpl extends BatteryStats { PROC_STATE_CHANGE_COLLECTION_DELAY_MS = mParser.getLong( KEY_PROC_STATE_CHANGE_COLLECTION_DELAY_MS, DEFAULT_PROC_STATE_CHANGE_COLLECTION_DELAY_MS); MAX_HISTORY_FILES = mParser.getInt(KEY_MAX_HISTORY_FILES, isLowRamDevice() ? DEFAULT_MAX_HISTORY_FILES_LOW_RAM_DEVICE : DEFAULT_MAX_HISTORY_FILES); MAX_HISTORY_BUFFER = mParser.getInt(KEY_MAX_HISTORY_BUFFER_KB, isLowRamDevice() ? DEFAULT_MAX_HISTORY_BUFFER_LOW_RAM_DEVICE_KB : DEFAULT_MAX_HISTORY_BUFFER_KB) * 1024; int maxHistorySize = mParser.getInt(KEY_MAX_HISTORY_SIZE, -1); if (maxHistorySize == -1) { // Process the deprecated max_history_files parameter for compatibility int maxHistoryFiles = mParser.getInt("max_history_files", -1); if (maxHistoryFiles != -1) { maxHistorySize = maxHistoryFiles * MAX_HISTORY_BUFFER; } } if (maxHistorySize == -1) { maxHistorySize = mBatteryStatsConfig.getMaxHistorySizeBytes(); } MAX_HISTORY_SIZE = maxHistorySize; final String perUidModemModel = mParser.getString(KEY_PER_UID_MODEM_POWER_MODEL, ""); PER_UID_MODEM_MODEL = getPerUidModemModel(perUidModemModel); Loading @@ -16291,7 +16307,7 @@ public class BatteryStatsImpl extends BatteryStats { */ @VisibleForTesting public void onChange() { mHistory.setMaxHistoryFiles(MAX_HISTORY_FILES); mHistory.setMaxHistorySize(MAX_HISTORY_SIZE); mHistory.setMaxHistoryBufferSize(MAX_HISTORY_BUFFER); } Loading Loading @@ -16354,8 +16370,8 @@ public class BatteryStatsImpl extends BatteryStats { pw.println(BATTERY_LEVEL_COLLECTION_DELAY_MS); pw.print(KEY_PROC_STATE_CHANGE_COLLECTION_DELAY_MS); pw.print("="); pw.println(PROC_STATE_CHANGE_COLLECTION_DELAY_MS); pw.print(KEY_MAX_HISTORY_FILES); pw.print("="); pw.println(MAX_HISTORY_FILES); pw.print(KEY_MAX_HISTORY_SIZE); pw.print("="); pw.println(MAX_HISTORY_SIZE); pw.print(KEY_MAX_HISTORY_BUFFER_KB); pw.print("="); pw.println(MAX_HISTORY_BUFFER/1024); pw.print(KEY_BATTERY_CHARGED_DELAY_MS); pw.print("=");