From b2113c7c5b278feaa3cde10231ece5ac884c595e Mon Sep 17 00:00:00 2001 From: William Loh Date: Tue, 3 Jan 2023 20:32:32 +0000 Subject: [PATCH] Add perf test for getAppMetadata API Bug: 260727169 Test: atest android.os.PackageManagerPerfTest#testGetAppMetadata Change-Id: Icb388751db5f4010d83666d1214014e27834c4d2 --- .../packagemanager/AndroidManifest.xml | 1 + .../android/os/PackageManagerPerfTest.java | 65 ++++++++++++++++++- 2 files changed, 65 insertions(+), 1 deletion(-) diff --git a/apct-tests/perftests/packagemanager/AndroidManifest.xml b/apct-tests/perftests/packagemanager/AndroidManifest.xml index 3b9431f1b97ad..b4a34b89d3836 100644 --- a/apct-tests/perftests/packagemanager/AndroidManifest.xml +++ b/apct-tests/perftests/packagemanager/AndroidManifest.xml @@ -26,6 +26,7 @@ + diff --git a/apct-tests/perftests/packagemanager/src/android/os/PackageManagerPerfTest.java b/apct-tests/perftests/packagemanager/src/android/os/PackageManagerPerfTest.java index 673c6a39f4b35..4bcc8c499f0da 100644 --- a/apct-tests/perftests/packagemanager/src/android/os/PackageManagerPerfTest.java +++ b/apct-tests/perftests/packagemanager/src/android/os/PackageManagerPerfTest.java @@ -19,10 +19,15 @@ package android.os; import static libcore.junit.util.compat.CoreCompatChangeRule.DisableCompatChanges; import static libcore.junit.util.compat.CoreCompatChangeRule.EnableCompatChanges; +import static org.junit.Assert.assertEquals; + +import android.Manifest; import android.compat.testing.PlatformCompatChangeRule; import android.content.ComponentName; import android.content.Context; import android.content.Intent; +import android.content.IntentSender; +import android.content.pm.PackageInstaller; import android.content.pm.PackageManager; import android.perftests.utils.BenchmarkState; import android.perftests.utils.PerfStatusReporter; @@ -31,11 +36,19 @@ import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.LargeTest; import androidx.test.platform.app.InstrumentationRegistry; +import com.android.compatibility.common.util.AdoptShellPermissionsRule; +import com.android.cts.install.lib.Install; +import com.android.cts.install.lib.InstallUtils; +import com.android.cts.install.lib.LocalIntentSender; +import com.android.cts.install.lib.TestApp; + import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; +import java.io.IOException; + @RunWith(AndroidJUnit4.class) @LargeTest public class PackageManagerPerfTest { @@ -46,6 +59,8 @@ public class PackageManagerPerfTest { private static final ComponentName TEST_ACTIVITY = new ComponentName("com.android.perftests.packagemanager", "android.perftests.utils.PerfTestActivity"); + private static final String TEST_FIELD = "test"; + private static final String TEST_VALUE = "value"; @Rule public final PerfStatusReporter mPerfStatusReporter = new PerfStatusReporter(); @@ -53,9 +68,39 @@ public class PackageManagerPerfTest { @Rule public final PlatformCompatChangeRule mPlatformCompatChangeRule = new PlatformCompatChangeRule(); + @Rule + public AdoptShellPermissionsRule mAdoptShellPermissionsRule = new AdoptShellPermissionsRule( + InstrumentationRegistry.getInstrumentation().getUiAutomation(), + Manifest.permission.INSTALL_PACKAGES, + Manifest.permission.DELETE_PACKAGES); + + final Context mContext = InstrumentationRegistry.getInstrumentation().getContext(); + private PackageInstaller mPackageInstaller; public PackageManagerPerfTest() throws PackageManager.NameNotFoundException { - final Context context = InstrumentationRegistry.getInstrumentation().getContext(); + mPackageInstaller = mContext.getPackageManager().getPackageInstaller(); + } + + private void installTestApp(TestApp testApp) throws IOException, InterruptedException { + Install install = Install.single(testApp); + final int expectedSessionId = install.createSession(); + PackageInstaller.Session session = + InstallUtils.openPackageInstallerSession(expectedSessionId); + PersistableBundle bundle = new PersistableBundle(); + bundle.putString(TEST_FIELD, TEST_VALUE); + session.setAppMetadata(bundle); + LocalIntentSender localIntentSender = new LocalIntentSender(); + session.commit(localIntentSender.getIntentSender()); + Intent intent = localIntentSender.getResult(); + InstallUtils.assertStatusSuccess(intent); + } + + private void uninstallTestApp(String packageName) throws InterruptedException { + LocalIntentSender localIntentSender = new LocalIntentSender(); + IntentSender intentSender = localIntentSender.getIntentSender(); + mPackageInstaller.uninstall(packageName, intentSender); + Intent intent = localIntentSender.getResult(); + InstallUtils.assertStatusSuccess(intent); } @Before @@ -64,6 +109,24 @@ public class PackageManagerPerfTest { PackageManager.disablePackageInfoCache(); } + @Test + public void testGetAppMetadata() throws Exception { + final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); + installTestApp(TestApp.A1); + final PackageManager pm = + InstrumentationRegistry.getInstrumentation().getTargetContext().getPackageManager(); + final String packageName = TestApp.A1.getPackageName(); + + while (state.keepRunning()) { + PersistableBundle bundle = pm.getAppMetadata(packageName); + state.pauseTiming(); + assertEquals(bundle.size(), 1); + assertEquals(bundle.getString(TEST_FIELD), TEST_VALUE); + state.resumeTiming(); + } + uninstallTestApp(packageName); + } + @Test @DisableCompatChanges(PackageManager.FILTER_APPLICATION_QUERY) public void testCheckPermissionExists() {