1 /* 2 * Copyright (C) 2020 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.os; 18 19 import static libcore.junit.util.compat.CoreCompatChangeRule.DisableCompatChanges; 20 import static libcore.junit.util.compat.CoreCompatChangeRule.EnableCompatChanges; 21 22 import android.compat.testing.PlatformCompatChangeRule; 23 import android.content.ComponentName; 24 import android.content.Context; 25 import android.content.Intent; 26 import android.content.pm.PackageManager; 27 import android.perftests.utils.BenchmarkState; 28 import android.perftests.utils.PerfStatusReporter; 29 30 import androidx.test.ext.junit.runners.AndroidJUnit4; 31 import androidx.test.filters.LargeTest; 32 import androidx.test.platform.app.InstrumentationRegistry; 33 34 import org.junit.Before; 35 import org.junit.Rule; 36 import org.junit.Test; 37 import org.junit.runner.RunWith; 38 39 @RunWith(AndroidJUnit4.class) 40 @LargeTest 41 public class PackageManagerPerfTest { 42 private static final String PERMISSION_NAME_EXISTS = 43 "com.android.perftests.packagemanager.TestPermission"; 44 private static final String PERMISSION_NAME_DOESNT_EXIST = 45 "com.android.perftests.packagemanager.TestBadPermission"; 46 private static final ComponentName TEST_ACTIVITY = 47 new ComponentName("com.android.perftests.packagemanager", 48 "android.perftests.utils.PerfTestActivity"); 49 50 @Rule 51 public final PerfStatusReporter mPerfStatusReporter = new PerfStatusReporter(); 52 53 @Rule 54 public final PlatformCompatChangeRule mPlatformCompatChangeRule = 55 new PlatformCompatChangeRule(); 56 PackageManagerPerfTest()57 public PackageManagerPerfTest() throws PackageManager.NameNotFoundException { 58 final Context context = InstrumentationRegistry.getInstrumentation().getContext(); 59 } 60 61 @Before setup()62 public void setup() { 63 PackageManager.disableApplicationInfoCache(); 64 PackageManager.disablePackageInfoCache(); 65 } 66 67 @Test 68 @DisableCompatChanges(PackageManager.FILTER_APPLICATION_QUERY) testCheckPermissionExists()69 public void testCheckPermissionExists() { 70 final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); 71 final PackageManager pm = 72 InstrumentationRegistry.getInstrumentation().getTargetContext().getPackageManager(); 73 final String packageName = TEST_ACTIVITY.getPackageName(); 74 75 while (state.keepRunning()) { 76 int ret = pm.checkPermission(PERMISSION_NAME_EXISTS, packageName); 77 } 78 } 79 80 @Test 81 @EnableCompatChanges(PackageManager.FILTER_APPLICATION_QUERY) testCheckPermissionExistsWithFiltering()82 public void testCheckPermissionExistsWithFiltering() { 83 testCheckPermissionExists(); 84 } 85 86 @Test 87 @DisableCompatChanges(PackageManager.FILTER_APPLICATION_QUERY) testCheckPermissionDoesntExist()88 public void testCheckPermissionDoesntExist() { 89 final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); 90 final PackageManager pm = 91 InstrumentationRegistry.getInstrumentation().getTargetContext().getPackageManager(); 92 final String packageName = TEST_ACTIVITY.getPackageName(); 93 94 while (state.keepRunning()) { 95 int ret = pm.checkPermission(PERMISSION_NAME_DOESNT_EXIST, packageName); 96 } 97 } 98 99 @Test 100 @EnableCompatChanges(PackageManager.FILTER_APPLICATION_QUERY) testCheckPermissionDoesntExistWithFiltering()101 public void testCheckPermissionDoesntExistWithFiltering() { 102 testCheckPermissionDoesntExist(); 103 } 104 105 @Test 106 @DisableCompatChanges(PackageManager.FILTER_APPLICATION_QUERY) testQueryIntentActivities()107 public void testQueryIntentActivities() { 108 final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); 109 final PackageManager pm = 110 InstrumentationRegistry.getInstrumentation().getTargetContext().getPackageManager(); 111 final Intent intent = new Intent("com.android.perftests.core.PERFTEST"); 112 113 while (state.keepRunning()) { 114 pm.queryIntentActivities(intent, 0); 115 } 116 } 117 118 @Test 119 @EnableCompatChanges(PackageManager.FILTER_APPLICATION_QUERY) testQueryIntentActivitiesWithFiltering()120 public void testQueryIntentActivitiesWithFiltering() { 121 testQueryIntentActivities(); 122 } 123 124 @Test 125 @DisableCompatChanges(PackageManager.FILTER_APPLICATION_QUERY) testGetPackageInfo()126 public void testGetPackageInfo() throws Exception { 127 final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); 128 final PackageManager pm = 129 InstrumentationRegistry.getInstrumentation().getTargetContext().getPackageManager(); 130 131 while (state.keepRunning()) { 132 pm.getPackageInfo(TEST_ACTIVITY.getPackageName(), 0); 133 } 134 } 135 136 @Test 137 @EnableCompatChanges(PackageManager.FILTER_APPLICATION_QUERY) testGetPackageInfoWithFiltering()138 public void testGetPackageInfoWithFiltering() throws Exception { 139 testGetPackageInfo(); 140 } 141 142 @Test 143 @DisableCompatChanges(PackageManager.FILTER_APPLICATION_QUERY) testGetApplicationInfo()144 public void testGetApplicationInfo() throws Exception { 145 final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); 146 final PackageManager pm = 147 InstrumentationRegistry.getInstrumentation().getTargetContext().getPackageManager(); 148 149 while (state.keepRunning()) { 150 pm.getApplicationInfo(TEST_ACTIVITY.getPackageName(), 0); 151 } 152 } 153 154 @Test 155 @EnableCompatChanges(PackageManager.FILTER_APPLICATION_QUERY) testGetApplicationInfoWithFiltering()156 public void testGetApplicationInfoWithFiltering() throws Exception { 157 testGetApplicationInfo(); 158 } 159 160 @Test 161 @DisableCompatChanges(PackageManager.FILTER_APPLICATION_QUERY) testGetActivityInfo()162 public void testGetActivityInfo() throws Exception { 163 final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); 164 final PackageManager pm = 165 InstrumentationRegistry.getInstrumentation().getTargetContext().getPackageManager(); 166 167 while (state.keepRunning()) { 168 pm.getActivityInfo(TEST_ACTIVITY, 0); 169 } 170 } 171 172 @Test 173 @EnableCompatChanges(PackageManager.FILTER_APPLICATION_QUERY) testGetActivityInfoWithFiltering()174 public void testGetActivityInfoWithFiltering() throws Exception { 175 testGetActivityInfo(); 176 } 177 178 @Test 179 @DisableCompatChanges(PackageManager.FILTER_APPLICATION_QUERY) testGetInstalledPackages()180 public void testGetInstalledPackages() throws Exception { 181 final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); 182 final PackageManager pm = 183 InstrumentationRegistry.getInstrumentation().getTargetContext().getPackageManager(); 184 185 while (state.keepRunning()) { 186 pm.getInstalledPackages(0); 187 } 188 } 189 190 @Test 191 @EnableCompatChanges(PackageManager.FILTER_APPLICATION_QUERY) testGetInstalledPackagesWithFiltering()192 public void testGetInstalledPackagesWithFiltering() throws Exception { 193 testGetInstalledPackages(); 194 } 195 } 196