Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6ef3babc authored by William Loh's avatar William Loh Committed by Android (Google) Code Review
Browse files

Merge "Add perf test for getAppMetadata API"

parents f31bd18f b2113c7c
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@

    <permission android:name="com.android.perftests.packagemanager.TestPermission" />
    <uses-permission android:name="com.android.perftests.packagemanager.TestPermission" />
    <uses-permission android:name="android.permission.GET_APP_METADATA" />

    <queries>
        <package android:name="com.android.perftests.appenumeration0" />
+64 −1
Original line number Diff line number Diff line
@@ -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() {