diff options
author | Varun Shah <varunshah@google.com> | 2019-12-06 17:26:41 -0800 |
---|---|---|
committer | Varun Shah <varunshah@google.com> | 2019-12-06 17:26:41 -0800 |
commit | 6b993a7408b64e9bf09cfa1a626f94752d6ed7f0 (patch) | |
tree | 5615106c779a6820663a3f7c459e52721864b265 | |
parent | 55ae88164962ee6f139b9580cc829cb10afe212f (diff) |
Ensure UsageStats data is read correctly.
Add documentation that the IntervalStats object passed into the read
methods in UsageStatsDatabase should ideally be used only as a temporary
reading object unless the caller specifically has other use-cases. Also
updated all the internal calls to match this behavior.
Bug: n/a
Test: atest UsageStatsDatabaseTest
Change-Id: Id3aa2575fa29bf5adc6a52ee8e75690aecf50b8e
-rw-r--r-- | services/usage/java/com/android/server/usage/UsageStatsDatabase.java | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/services/usage/java/com/android/server/usage/UsageStatsDatabase.java b/services/usage/java/com/android/server/usage/UsageStatsDatabase.java index 1996dd4f6545..ef9a73b794f7 100644 --- a/services/usage/java/com/android/server/usage/UsageStatsDatabase.java +++ b/services/usage/java/com/android/server/usage/UsageStatsDatabase.java @@ -229,8 +229,8 @@ public class UsageStatsDatabase { } try { - IntervalStats stats = new IntervalStats(); for (int i = start; i < fileCount - 1; i++) { + final IntervalStats stats = new IntervalStats(); readLocked(files.valueAt(i), stats); if (!checkinAction.checkin(stats)) { return false; @@ -848,10 +848,10 @@ public class UsageStatsDatabase { } } - final IntervalStats stats = new IntervalStats(); final ArrayList<T> results = new ArrayList<>(); for (int i = startIndex; i <= endIndex; i++) { final AtomicFile f = intervalStats.valueAt(i); + final IntervalStats stats = new IntervalStats(); if (DEBUG) { Slog.d(TAG, "Reading stat file " + f.getBaseFile().getAbsolutePath()); @@ -1061,6 +1061,11 @@ public class UsageStatsDatabase { } } + /** + * Note: the data read from the given file will add to the IntervalStats object passed into this + * method. It is up to the caller to ensure that this is the desired behavior - if not, the + * caller should ensure that the data in the reused object is being cleared. + */ private void readLocked(AtomicFile file, IntervalStats statsOut) throws IOException, RuntimeException { if (mCurrentVersion <= 3) { @@ -1072,6 +1077,10 @@ public class UsageStatsDatabase { /** * Returns {@code true} if any stats were omitted while reading, {@code false} otherwise. + * <p/> + * Note: the data read from the given file will add to the IntervalStats object passed into this + * method. It is up to the caller to ensure that this is the desired behavior - if not, the + * caller should ensure that the data in the reused object is being cleared. */ private static boolean readLocked(AtomicFile file, IntervalStats statsOut, int version, PackagesTokenData packagesTokenData) throws IOException, RuntimeException { @@ -1098,6 +1107,10 @@ public class UsageStatsDatabase { /** * Returns {@code true} if any stats were omitted while reading, {@code false} otherwise. + * <p/> + * Note: the data read from the given file will add to the IntervalStats object passed into this + * method. It is up to the caller to ensure that this is the desired behavior - if not, the + * caller should ensure that the data in the reused object is being cleared. */ private static boolean readLocked(InputStream in, IntervalStats statsOut, int version, PackagesTokenData packagesTokenData) throws RuntimeException { |