summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apct-tests/perftests/packagemanager/src/android/content/pm/PackageInstallerBenchmark.java36
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerShellCommand.java9
2 files changed, 38 insertions, 7 deletions
diff --git a/apct-tests/perftests/packagemanager/src/android/content/pm/PackageInstallerBenchmark.java b/apct-tests/perftests/packagemanager/src/android/content/pm/PackageInstallerBenchmark.java
index 3b4f72b2e50a..e20f30d1810b 100644
--- a/apct-tests/perftests/packagemanager/src/android/content/pm/PackageInstallerBenchmark.java
+++ b/apct-tests/perftests/packagemanager/src/android/content/pm/PackageInstallerBenchmark.java
@@ -17,10 +17,12 @@
package android.content.pm;
import android.Manifest;
+import android.app.UiAutomation;
import android.content.Context;
import android.content.Intent;
import android.content.IntentSender;
import android.os.HandlerThread;
+import android.os.ParcelFileDescriptor;
import android.perftests.utils.BenchmarkState;
import android.perftests.utils.PerfStatusReporter;
import android.util.Log;
@@ -39,7 +41,10 @@ import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
+import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
@@ -203,13 +208,33 @@ public class PackageInstallerBenchmark {
}
private void uninstallSession(BenchmarkState state, String...packageNames)
- throws InterruptedException {
+ throws Exception {
state.pauseTiming();
uninstall(true /* stop at fail */, packageNames);
mPackageInstaller.unregisterSessionCallback(mSessionCallback);
+ executeShellCommand("pm gc");
state.resumeTiming();
}
+ private static String executeShellCommand(String command) throws IOException {
+ UiAutomation uiAutomation = InstrumentationRegistry.getInstrumentation().getUiAutomation();
+ final ParcelFileDescriptor stdout = uiAutomation.executeShellCommand(command);
+ try (InputStream inputStream = new ParcelFileDescriptor.AutoCloseInputStream(stdout);
+ ByteArrayOutputStream result = new ByteArrayOutputStream()) {
+ writeFullStream(inputStream, result);
+ return result.toString("UTF-8");
+ }
+ }
+
+ private static void writeFullStream(InputStream inputStream, OutputStream outputStream)
+ throws IOException {
+ final byte[] buffer = new byte[1024];
+ int length;
+ while ((length = inputStream.read(buffer)) != -1) {
+ outputStream.write(buffer, 0, length);
+ }
+ }
+
@Test(timeout = 600_000L)
public void commit_aSingleApkSession_untilFinishBenchmark() throws Exception {
uninstall(false /* stop at fail */, TestApp.A);
@@ -247,8 +272,7 @@ public class PackageInstallerBenchmark {
}
@Test(timeout = 600_000L)
- public void commit_aMultiplePackagesSession_untilFinishBenchmark()
- throws IOException, InterruptedException {
+ public void commit_aMultiplePackagesSession_untilFinishBenchmark() throws Exception {
uninstall(false /* stop at fail */, TestApp.A, TestApp.B, TestApp.C);
final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
@@ -269,8 +293,7 @@ public class PackageInstallerBenchmark {
}
@Test(timeout = 600_000L)
- public void commit_threeMultiplePackageSessions_untilFinishBenchmark()
- throws Exception {
+ public void commit_threeMultiplePackageSessions_untilFinishBenchmark() throws Exception {
uninstall(false /* stop at fail */, TestApp.A, TestApp.B, TestApp.C);
final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
@@ -293,8 +316,7 @@ public class PackageInstallerBenchmark {
}
@Test(timeout = 600_000L)
- public void commit_aMultipleApksSession_untilFinishBenchmark()
- throws IOException, InterruptedException {
+ public void commit_aMultipleApksSession_untilFinishBenchmark() throws Exception {
uninstall(false /* stop at fail */, TestApp.A);
final BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
index 15753cd24e85..581e4e26da81 100644
--- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
+++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
@@ -188,6 +188,8 @@ class PackageManagerShellCommand extends ShellCommand {
return runDump();
case "list":
return runList();
+ case "gc":
+ return runGc();
case "resolve-activity":
return runResolveActivity();
case "query-activities":
@@ -687,6 +689,13 @@ class PackageManagerShellCommand extends ShellCommand {
return -1;
}
+ private int runGc() throws RemoteException {
+ Runtime.getRuntime().gc();
+ final PrintWriter pw = getOutPrintWriter();
+ pw.println("Ok");
+ return 0;
+ }
+
private int runListFeatures() throws RemoteException {
final PrintWriter pw = getOutPrintWriter();
final List<FeatureInfo> list = mInterface.getSystemAvailableFeatures().getList();