summaryrefslogtreecommitdiff
path: root/tests/UsageStatsPerfTests
diff options
context:
space:
mode:
authorVarun Shah <varunshah@google.com>2019-08-27 17:11:25 -0700
committerVarun Shah <varunshah@google.com>2019-10-08 21:22:13 -0700
commite1ba9cde53546caca0befe65611bac10f7f67622 (patch)
treea98dd2e492f9fa3454851bdf96d669c4f5945c7d /tests/UsageStatsPerfTests
parent76e56e40393ad3b14a33dbbba029e521c3850bb2 (diff)
Obfuscate usage stats data stored on disk.
All of the usage stats data stored on disk will now be obfuscated. There will be a package to tokens mappings file stored on disk which has a hierarchy of mappings for each string in each package's usage stats data. A UsageStatsProtoV2 was added to keep the logic clean and separate from the original usage stats proto parser. Initial observations show a memory gain of over 60% w.r.t. the usage stats data size on disk. There is also no performance hit because of this change - in fact, even with the obfuscation overhead, reads are now over 65% faster and writes are up to 50% faster. Bug: 135484470 Test: atest UsageStatsTest Test: atest UsageStatsDatabaseTest Test: atest UsageStatsDatabasePerfTest Change-Id: I55ce729033d8b6e4051271802d57c72684053c32
Diffstat (limited to 'tests/UsageStatsPerfTests')
-rw-r--r--tests/UsageStatsPerfTests/src/com/android/frameworks/perftests/usage/tests/UsageStatsDatabasePerfTest.java72
1 files changed, 72 insertions, 0 deletions
diff --git a/tests/UsageStatsPerfTests/src/com/android/frameworks/perftests/usage/tests/UsageStatsDatabasePerfTest.java b/tests/UsageStatsPerfTests/src/com/android/frameworks/perftests/usage/tests/UsageStatsDatabasePerfTest.java
index 7d9d0d52b002..62aef876a2eb 100644
--- a/tests/UsageStatsPerfTests/src/com/android/frameworks/perftests/usage/tests/UsageStatsDatabasePerfTest.java
+++ b/tests/UsageStatsPerfTests/src/com/android/frameworks/perftests/usage/tests/UsageStatsDatabasePerfTest.java
@@ -30,6 +30,7 @@ import androidx.test.filters.LargeTest;
import androidx.test.runner.AndroidJUnit4;
import com.android.server.usage.IntervalStats;
+import com.android.server.usage.PackagesTokenData;
import com.android.server.usage.UsageStatsDatabase;
import com.android.server.usage.UsageStatsDatabase.StatCombiner;
@@ -140,6 +141,37 @@ public class UsageStatsDatabasePerfTest {
}
}
+ private void runObfuscateStatsTest(int packageCount, int eventsPerPackage) {
+ final ManualBenchmarkState benchmarkState = mPerfManualStatusReporter.getBenchmarkState();
+ IntervalStats intervalStats = new IntervalStats();
+ populateIntervalStats(intervalStats, packageCount, eventsPerPackage);
+ long elapsedTimeNs = 0;
+ while (benchmarkState.keepRunning(elapsedTimeNs)) {
+ final long startTime = SystemClock.elapsedRealtimeNanos();
+ PackagesTokenData packagesTokenData = new PackagesTokenData();
+ intervalStats.obfuscateData(packagesTokenData);
+ final long endTime = SystemClock.elapsedRealtimeNanos();
+ elapsedTimeNs = endTime - startTime;
+ clearUsageStatsFiles();
+ }
+ }
+
+ private void runDeobfuscateStatsTest(int packageCount, int eventsPerPackage) {
+ final ManualBenchmarkState benchmarkState = mPerfManualStatusReporter.getBenchmarkState();
+ IntervalStats intervalStats = new IntervalStats();
+ populateIntervalStats(intervalStats, packageCount, eventsPerPackage);
+ long elapsedTimeNs = 0;
+ while (benchmarkState.keepRunning(elapsedTimeNs)) {
+ PackagesTokenData packagesTokenData = new PackagesTokenData();
+ intervalStats.obfuscateData(packagesTokenData);
+ final long startTime = SystemClock.elapsedRealtimeNanos();
+ intervalStats.deobfuscateData(packagesTokenData);
+ final long endTime = SystemClock.elapsedRealtimeNanos();
+ elapsedTimeNs = endTime - startTime;
+ clearUsageStatsFiles();
+ }
+ }
+
@Test
public void testQueryUsageStats_FewPkgsLightUse() throws IOException {
runQueryUsageStatsTest(FEW_PKGS, LIGHT_USE);
@@ -151,6 +183,16 @@ public class UsageStatsDatabasePerfTest {
}
@Test
+ public void testObfuscateStats_FewPkgsLightUse() {
+ runObfuscateStatsTest(FEW_PKGS, LIGHT_USE);
+ }
+
+ @Test
+ public void testDeobfuscateStats_FewPkgsLightUse() {
+ runDeobfuscateStatsTest(FEW_PKGS, LIGHT_USE);
+ }
+
+ @Test
public void testQueryUsageStats_FewPkgsHeavyUse() throws IOException {
runQueryUsageStatsTest(FEW_PKGS, HEAVY_USE);
}
@@ -161,6 +203,16 @@ public class UsageStatsDatabasePerfTest {
}
@Test
+ public void testObfuscateStats_FewPkgsHeavyUse() {
+ runObfuscateStatsTest(FEW_PKGS, HEAVY_USE);
+ }
+
+ @Test
+ public void testDeobfuscateStats_FewPkgsHeavyUse() {
+ runDeobfuscateStatsTest(FEW_PKGS, HEAVY_USE);
+ }
+
+ @Test
public void testQueryUsageStats_ManyPkgsLightUse() throws IOException {
runQueryUsageStatsTest(MANY_PKGS, LIGHT_USE);
}
@@ -171,6 +223,16 @@ public class UsageStatsDatabasePerfTest {
}
@Test
+ public void testObfuscateStats_ManyPkgsLightUse() {
+ runObfuscateStatsTest(MANY_PKGS, LIGHT_USE);
+ }
+
+ @Test
+ public void testDeobfuscateStats_ManyPkgsLightUse() {
+ runDeobfuscateStatsTest(MANY_PKGS, LIGHT_USE);
+ }
+
+ @Test
public void testQueryUsageStats_ManyPkgsHeavyUse() throws IOException {
runQueryUsageStatsTest(MANY_PKGS, HEAVY_USE);
}
@@ -179,4 +241,14 @@ public class UsageStatsDatabasePerfTest {
public void testPutUsageStats_ManyPkgsHeavyUse() throws IOException {
runPutUsageStatsTest(MANY_PKGS, HEAVY_USE);
}
+
+ @Test
+ public void testObfuscateStats_ManyPkgsHeavyUse() {
+ runObfuscateStatsTest(MANY_PKGS, HEAVY_USE);
+ }
+
+ @Test
+ public void testDeobfuscateStats_ManyPkgsHeavyUse() {
+ runDeobfuscateStatsTest(MANY_PKGS, HEAVY_USE);
+ }
}