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

Commit 04c3eeea authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Do not create EMPTY batterystats history file." into qt-dev

parents 17f08878 e40781ee
Loading
Loading
Loading
Loading
+11 −18
Original line number Diff line number Diff line
@@ -28,7 +28,6 @@ import com.android.internal.util.ParseUtils;

import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -138,11 +137,12 @@ public class BatteryStatsHistory {
        if (!dedup.isEmpty()) {
            mFileNumbers.addAll(dedup);
            Collections.sort(mFileNumbers);
            setActiveFile(mFileNumbers.get(mFileNumbers.size() - 1));
        } else {
            // No file found, default to have file 0.
            mFileNumbers.add(0);
            setActiveFile(0);
        }
        createActiveFile();
    }

    /**
@@ -157,22 +157,15 @@ public class BatteryStatsHistory {
        mHistoryBuffer = historyBuffer;
    }
    /**
     * The highest numbered history file is active file that mHistoryBuffer is backed up into.
     * If file does not exists, truncate() creates a empty file.
     * Set the active file that mHistoryBuffer is backed up into.
     *
     * @param fileNumber the history file that mHistoryBuffer is backed up into.
     */
    private void createActiveFile() {
        final AtomicFile file = getFile(mFileNumbers.get(mFileNumbers.size() - 1));
    private void setActiveFile(int fileNumber) {
        mActiveFile = getFile(fileNumber);
        if (DEBUG) {
            Slog.d(TAG, "activeHistoryFile:" + file.getBaseFile().getPath());
        }
        if (!file.exists()) {
            try {
                file.truncate();
            } catch (IOException e) {
                Slog.e(TAG, "Error creating history file "+ file.getBaseFile().getPath(), e);
            }
            Slog.d(TAG, "activeHistoryFile:" + mActiveFile.getBaseFile().getPath());
        }
        mActiveFile = file;
    }

    /**
@@ -189,7 +182,7 @@ public class BatteryStatsHistory {
     * When {@link #mHistoryBuffer} reaches {@link BatteryStatsImpl.Constants#MAX_HISTORY_BUFFER},
     * create next history file.
     */
    public void createNextFile() {
    public void startNextFile() {
        if (mFileNumbers.isEmpty()) {
            Slog.wtf(TAG, "mFileNumbers should never be empty");
            return;
@@ -198,7 +191,7 @@ public class BatteryStatsHistory {
        // number plus one.
        final int next = mFileNumbers.get(mFileNumbers.size() - 1) + 1;
        mFileNumbers.add(next);
        createActiveFile();
        setActiveFile(next);

        // if free disk space is less than 100MB, delete oldest history file.
        if (!hasFreeDiskSpace()) {
@@ -224,7 +217,7 @@ public class BatteryStatsHistory {
        }
        mFileNumbers.clear();
        mFileNumbers.add(0);
        createActiveFile();
        setActiveFile(0);
    }

    /**
+1 −1
Original line number Diff line number Diff line
@@ -3685,7 +3685,7 @@ public class BatteryStatsImpl extends BatteryStats {
                Slog.d(TAG, "addHistoryBufferLocked writeHistoryLocked takes ms:"
                        + (SystemClock.uptimeMillis() - start));
            }
            mBatteryStatsHistory.createNextFile();
            mBatteryStatsHistory.startNextFile();
            mHistoryBuffer.setDataSize(0);
            mHistoryBuffer.setDataPosition(0);
            mHistoryBuffer.setDataCapacity(mConstants.MAX_HISTORY_BUFFER / 2);
+35 −10
Original line number Diff line number Diff line
@@ -22,25 +22,28 @@ import static org.junit.Assert.assertTrue;

import android.content.Context;
import android.os.Parcel;
import android.util.Log;

import androidx.test.InstrumentationRegistry;
import androidx.test.runner.AndroidJUnit4;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.MockitoAnnotations;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.MockitoAnnotations;

/**
 * Test BatteryStatsHistory.
 */
@RunWith(AndroidJUnit4.class)
public class BatteryStatsHistoryTest {
    private static final String TAG = "BatteryStatsHistoryTest";
    private static final int MAX_HISTORY_FILES = 32;
    private final BatteryStatsImpl mBatteryStatsImpl = new MockBatteryStatsImpl();
    private final Parcel mHistoryBuffer = Parcel.obtain();
@@ -53,6 +56,12 @@ public class BatteryStatsHistoryTest {
        Context context = InstrumentationRegistry.getContext();
        mSystemDir = context.getDataDir();
        mHistoryDir = new File(mSystemDir, BatteryStatsHistory.HISTORY_DIR);
        String[] files = mHistoryDir.list();
        if (files != null) {
            for (int i = 0; i < files.length; i++) {
                new File(mHistoryDir, files[i]).delete();
            }
        }
        mHistoryDir.delete();
    }

@@ -60,28 +69,32 @@ public class BatteryStatsHistoryTest {
    public void testConstruct() {
        BatteryStatsHistory history =
                new BatteryStatsHistory(mBatteryStatsImpl, mSystemDir, mHistoryBuffer);
        createActiveFile(history);
        verifyFileNumbers(history, Arrays.asList(0));
        verifyActiveFile(history, "0.bin");
    }

    @Test
    public void testCreateNextFile() {
    public void testStartNextFile() {
        BatteryStatsHistory history =
                new BatteryStatsHistory(mBatteryStatsImpl, mSystemDir, mHistoryBuffer);

        List<Integer> fileList = new ArrayList<>();
        fileList.add(0);
        createActiveFile(history);

        // create file 1 to 31.
        for (int i = 1; i < MAX_HISTORY_FILES; i++) {
            fileList.add(i);
            history.createNextFile();
            history.startNextFile();
            createActiveFile(history);
            verifyFileNumbers(history, fileList);
            verifyActiveFile(history, i + ".bin");
        }

        // create file 32
        history.createNextFile();
        history.startNextFile();
        createActiveFile(history);
        fileList.add(32);
        fileList.remove(0);
        // verify file 0 is deleted.
@@ -90,7 +103,8 @@ public class BatteryStatsHistoryTest {
        verifyActiveFile(history, "32.bin");

        // create file 33
        history.createNextFile();
        history.startNextFile();
        createActiveFile(history);
        // verify file 1 is deleted
        fileList.add(33);
        fileList.remove(0);
@@ -108,6 +122,7 @@ public class BatteryStatsHistoryTest {
        verifyActiveFile(history2, "33.bin");

        history2.resetAllFiles();
        createActiveFile(history2);
        // verify all existing files are deleted.
        for (int i = 2; i < 33; ++i) {
            verifyFileDeleted(i + ".bin");
@@ -118,7 +133,8 @@ public class BatteryStatsHistoryTest {
        verifyActiveFile(history2, "0.bin");

        // create file 1.
        history2.createNextFile();
        history2.startNextFile();
        createActiveFile(history2);
        verifyFileNumbers(history2, Arrays.asList(0, 1));
        verifyActiveFile(history2, "1.bin");
    }
@@ -142,4 +158,13 @@ public class BatteryStatsHistoryTest {
    private void verifyFileDeleted(String file) {
        assertFalse(new File(mHistoryDir, file).exists());
    }

    private void createActiveFile(BatteryStatsHistory history) {
        final File file = history.getActiveFile().getBaseFile();
        try {
            file.createNewFile();
        } catch (IOException e) {
            Log.e(TAG, "Error creating history file " + file.getPath(), e);
        }
    }
}
 No newline at end of file