Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e71206d0 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Replace max_history_files with max_history_size" into main

parents 3625d8bb d36cbf27
Loading
Loading
Loading
Loading
+27 −20
Original line number Diff line number Diff line
@@ -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();
        }

@@ -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();
@@ -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) {
@@ -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) {
@@ -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);
        }
    }

@@ -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.
     */
+2 −0
Original line number Diff line number Diff line
@@ -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>
+1 −0
Original line number Diff line number Diff line
@@ -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"/>
+4 −1
Original line number Diff line number Diff line
@@ -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();
+40 −24
Original line number Diff line number Diff line
@@ -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;
@@ -619,6 +613,7 @@ public class BatteryStatsImpl extends BatteryStats {
            mFlags = flags;
            mDefaultPowerStatsThrottlePeriod = builder.mDefaultPowerStatsThrottlePeriod;
            mPowerStatsThrottlePeriods = builder.mPowerStatsThrottlePeriods;
            mMaxHistorySizeBytes = builder.mMaxHistorySizeBytes;
        }
        /**
@@ -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;
@@ -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;
            }
        }
    }
@@ -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);
@@ -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() {
@@ -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";
@@ -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;
@@ -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;
@@ -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) {
@@ -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);
@@ -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);
        }
@@ -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