From 606a7f9a5e340e9f237fbb9f8ef0849a7ce4b711 Mon Sep 17 00:00:00 2001 From: Varun Shah Date: Tue, 25 Feb 2020 19:48:13 -0800 Subject: [PATCH] Remove UsageStats files older than 2 years. As a privacy improvement, do not store usage stats data that is older than 2 years. Previously, stats were kept for 3 years. This will also help reduce the storage taken up by stats and improve the performance of query stats API calls which require files to be read from disk since the number of files read are significantly less. Bug: 148524623 Test: atest UsageStatsDatabaseTest Change-Id: I159914a87ba4137f0f3d869c69abf3b16ae77657 --- .../android/server/usage/UsageStatsDatabase.java | 14 ++++++++++++-- 1 file changed, 12 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 361b1c06a6b5b..a8e374f0edc28 100644 --- a/services/usage/java/com/android/server/usage/UsageStatsDatabase.java +++ b/services/usage/java/com/android/server/usage/UsageStatsDatabase.java @@ -178,7 +178,12 @@ public class UsageStatsDatabase { } checkVersionAndBuildLocked(); - indexFilesLocked(); + // Perform a pruning of older files if there was an upgrade, otherwise do indexing. + if (mUpgradePerformed) { + prune(currentTimeMillis); // prune performs an indexing when done + } else { + indexFilesLocked(); + } // Delete files that are in the future. for (TimeSparseArray files : mSortedStatFiles) { @@ -914,26 +919,31 @@ public class UsageStatsDatabase { */ public void prune(final long currentTimeMillis) { synchronized (mLock) { + // prune all files older than 2 years in the yearly directory mCal.setTimeInMillis(currentTimeMillis); - mCal.addYears(-3); + mCal.addYears(-2); pruneFilesOlderThan(mIntervalDirs[UsageStatsManager.INTERVAL_YEARLY], mCal.getTimeInMillis()); + // prune all files older than 6 months in the monthly directory mCal.setTimeInMillis(currentTimeMillis); mCal.addMonths(-6); pruneFilesOlderThan(mIntervalDirs[UsageStatsManager.INTERVAL_MONTHLY], mCal.getTimeInMillis()); + // prune all files older than 4 weeks in the weekly directory mCal.setTimeInMillis(currentTimeMillis); mCal.addWeeks(-4); pruneFilesOlderThan(mIntervalDirs[UsageStatsManager.INTERVAL_WEEKLY], mCal.getTimeInMillis()); + // prune all files older than 10 days in the weekly directory mCal.setTimeInMillis(currentTimeMillis); mCal.addDays(-10); pruneFilesOlderThan(mIntervalDirs[UsageStatsManager.INTERVAL_DAILY], mCal.getTimeInMillis()); + // prune chooser counts for all usage stats older than the defined period mCal.setTimeInMillis(currentTimeMillis); mCal.addDays(-SELECTION_LOG_RETENTION_LEN); for (int i = 0; i < mIntervalDirs.length; ++i) {