Loading core/java/com/android/internal/os/BatteryStatsHistory.java +11 −18 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); } /** Loading @@ -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; } /** Loading @@ -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; Loading @@ -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()) { Loading @@ -224,7 +217,7 @@ public class BatteryStatsHistory { } mFileNumbers.clear(); mFileNumbers.add(0); createActiveFile(); setActiveFile(0); } /** Loading core/java/com/android/internal/os/BatteryStatsImpl.java +1 −1 Original line number Diff line number Diff line Loading @@ -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); Loading core/tests/coretests/src/com/android/internal/os/BatteryStatsHistoryTest.java +35 −10 Original line number Diff line number Diff line Loading @@ -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(); Loading @@ -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(); } Loading @@ -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. Loading @@ -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); Loading @@ -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"); Loading @@ -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"); } Loading @@ -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 Loading
core/java/com/android/internal/os/BatteryStatsHistory.java +11 −18 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); } /** Loading @@ -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; } /** Loading @@ -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; Loading @@ -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()) { Loading @@ -224,7 +217,7 @@ public class BatteryStatsHistory { } mFileNumbers.clear(); mFileNumbers.add(0); createActiveFile(); setActiveFile(0); } /** Loading
core/java/com/android/internal/os/BatteryStatsImpl.java +1 −1 Original line number Diff line number Diff line Loading @@ -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); Loading
core/tests/coretests/src/com/android/internal/os/BatteryStatsHistoryTest.java +35 −10 Original line number Diff line number Diff line Loading @@ -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(); Loading @@ -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(); } Loading @@ -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. Loading @@ -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); Loading @@ -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"); Loading @@ -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"); } Loading @@ -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