Loading AconfigFlags.bp +56 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ aconfig_declarations_group { "android.app.flags-aconfig-java", "android.app.ondeviceintelligence-aconfig-java", "android.app.smartspace.flags-aconfig-java", "android.app.supervision.flags-aconfig-java", "android.app.usage.flags-aconfig-java", "android.app.wearable.flags-aconfig-java", "android.appwidget.flags-aconfig-java", Loading Loading @@ -99,6 +100,7 @@ aconfig_declarations_group { "framework-jobscheduler-job.flags-aconfig-java", "framework_graphics_flags_java_lib", "hwui_flags_java_lib", "interaction_jank_monitor_flags_lib", "libcore_exported_aconfig_flags_lib", "libgui_flags_java_lib", "power_flags_lib", Loading Loading @@ -436,9 +438,22 @@ aconfig_declarations { name: "android.companion.virtualdevice.flags-aconfig", package: "android.companion.virtualdevice.flags", container: "system", exportable: true, srcs: ["core/java/android/companion/virtual/flags/*.aconfig"], } java_aconfig_library { name: "android.companion.virtualdevice.flags-aconfig-java-export", aconfig_declarations: "android.companion.virtualdevice.flags-aconfig", defaults: ["framework-minus-apex-aconfig-java-defaults"], mode: "exported", min_sdk_version: "30", apex_available: [ "//apex_available:platform", "com.android.permission", ], } java_aconfig_library { name: "android.companion.virtual.flags-aconfig-java", aconfig_declarations: "android.companion.virtual.flags-aconfig", Loading Loading @@ -1212,6 +1227,21 @@ java_aconfig_library { defaults: ["framework-minus-apex-aconfig-java-defaults"], } // Supervision aconfig_declarations { name: "android.app.supervision.flags-aconfig", exportable: true, package: "android.app.supervision.flags", container: "system", srcs: ["core/java/android/app/supervision/flags.aconfig"], } java_aconfig_library { name: "android.app.supervision.flags-aconfig-java", aconfig_declarations: "android.app.supervision.flags-aconfig", defaults: ["framework-minus-apex-aconfig-java-defaults"], } // SurfaceFlinger java_aconfig_library { name: "surfaceflinger_flags_java_lib", Loading Loading @@ -1399,6 +1429,18 @@ java_aconfig_library { defaults: ["framework-minus-apex-aconfig-java-defaults"], } java_aconfig_library { name: "android.app.appfunctions.exported-flags-aconfig-java", aconfig_declarations: "android.app.appfunctions.flags-aconfig", defaults: ["framework-minus-apex-aconfig-java-defaults"], mode: "exported", apex_available: [ "//apex_available:platform", "com.android.permission", ], min_sdk_version: "30", } // Adaptive Auth aconfig_declarations { name: "android.adaptiveauth.flags-aconfig", Loading Loading @@ -1549,3 +1591,17 @@ java_aconfig_library { aconfig_declarations: "dropbox_flags", defaults: ["framework-minus-apex-aconfig-java-defaults"], } // Zero Jank aconfig_declarations { name: "interaction_jank_monitor_flags", package: "com.android.internal.jank", container: "system", srcs: ["core/java/com/android/internal/jank/flags.aconfig"], } java_aconfig_library { name: "interaction_jank_monitor_flags_lib", aconfig_declarations: "interaction_jank_monitor_flags", defaults: ["framework-minus-apex-aconfig-java-defaults"], } Ravenwood.bp +2 −2 Original line number Diff line number Diff line Loading @@ -50,7 +50,7 @@ genrule_defaults { framework_minus_apex_cmd = "$(location hoststubgen) " + "@$(location :ravenwood-standard-options) " + "--debug-log $(location hoststubgen_framework-minus-apex.log) " + "--out-impl-jar $(location ravenwood.jar) " + "--out-jar $(location ravenwood.jar) " + "--in-jar $(location :framework-minus-apex-for-hoststubgen) " + "--policy-override-file $(location :ravenwood-framework-policies) " + "--annotation-allowed-classes-file $(location :ravenwood-annotation-allowed-classes) " Loading Loading @@ -183,7 +183,7 @@ java_genrule { "--stats-file $(location hoststubgen_services.core_stats.csv) " + "--supported-api-list-file $(location hoststubgen_services.core_apis.csv) " + "--out-impl-jar $(location ravenwood.jar) " + "--out-jar $(location ravenwood.jar) " + "--gen-keep-all-file $(location hoststubgen_services.core_keep_all.txt) " + "--gen-input-dump-file $(location hoststubgen_services.core_dump.txt) " + Loading apct-tests/perftests/core/AndroidTest.xml +11 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,17 @@ <option name="test-suite-tag" value="apct" /> <option name="test-suite-tag" value="apct-metric-instrumentation" /> // Deal with Play Protect blocking apk installations. // The first setting disables the verification, the second one lowers the timeout from // 1hr to 10s, the third one resets the value after the test is complete, and the final // setting skips the device reboot after modifying the settings. <target_preparer class="com.android.tradefed.targetprep.DeviceSetup"> <option name="set-global-setting" key="verifier_verify_adb_installs" value="0" /> <option name="set-global-setting" key="verifier_engprod" value="1" /> <option name="restore-settings" value="true" /> <option name="force-skip-system-props" value="true" /> </target_preparer> <target_preparer class="com.android.tradefed.targetprep.RootTargetPreparer"/> <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer"> <option name="push-file" key="trace_config_detailed.textproto" value="/data/misc/perfetto-traces/trace_config.textproto" /> Loading apct-tests/perftests/core/src/android/app/OverlayManagerPerfTest.java +76 −53 Original line number Diff line number Diff line Loading @@ -37,9 +37,13 @@ import org.junit.Rule; import org.junit.Test; import java.util.ArrayList; import java.util.concurrent.Executor; import java.util.concurrent.FutureTask; import java.util.Arrays; import java.util.Comparator; import java.util.concurrent.Callable; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.stream.Stream; /** * Benchmarks for {@link android.content.om.OverlayManager}. Loading @@ -49,7 +53,6 @@ public class OverlayManagerPerfTest { private static final int OVERLAY_PKG_COUNT = 10; private static Context sContext; private static OverlayManager sOverlayManager; private static Executor sExecutor; private static ArrayList<TestPackageInstaller.InstalledPackage> sSmallOverlays = new ArrayList<>(); private static ArrayList<TestPackageInstaller.InstalledPackage> sLargeOverlays = Loading @@ -58,18 +61,45 @@ public class OverlayManagerPerfTest { @Rule public PerfStatusReporter mPerfStatusReporter = new PerfStatusReporter(); // Uncheck the checked exceptions in a callable for convenient stream usage. // Any exception will fail the test anyway. private static <T> T uncheck(Callable<T> c) { try { return c.call(); } catch (RuntimeException e) { throw e; } catch (Exception e) { throw new RuntimeException(e); } } @BeforeClass public static void classSetUp() throws Exception { sContext = InstrumentationRegistry.getTargetContext(); sOverlayManager = new OverlayManager(sContext); sExecutor = (command) -> new Thread(command).start(); // Install all of the test overlays. TestPackageInstaller installer = new TestPackageInstaller(sContext); // Install all of the test overlays. Play Protect likes to block these for 10 sec each // so let's install them in parallel to speed up the wait. final var installer = new TestPackageInstaller(sContext); final var es = Executors.newFixedThreadPool(2 * OVERLAY_PKG_COUNT); final var smallFutures = new ArrayList<Future<TestPackageInstaller.InstalledPackage>>( OVERLAY_PKG_COUNT); final var largeFutures = new ArrayList<Future<TestPackageInstaller.InstalledPackage>>( OVERLAY_PKG_COUNT); for (int i = 0; i < OVERLAY_PKG_COUNT; i++) { sSmallOverlays.add(installer.installPackage("Overlay" + i +".apk")); sLargeOverlays.add(installer.installPackage("LargeOverlay" + i +".apk")); final var index = i; smallFutures.add(es.submit(() -> installer.installPackage("Overlay" + index + ".apk"))); largeFutures.add( es.submit(() -> installer.installPackage("LargeOverlay" + index + ".apk"))); } es.shutdown(); assertTrue(es.awaitTermination(15 * 2 * OVERLAY_PKG_COUNT, TimeUnit.SECONDS)); sSmallOverlays.addAll(smallFutures.stream().map(f -> uncheck(f::get)).sorted( Comparator.comparing( TestPackageInstaller.InstalledPackage::getPackageName)).toList()); sLargeOverlays.addAll(largeFutures.stream().map(f -> uncheck(f::get)).sorted( Comparator.comparing( TestPackageInstaller.InstalledPackage::getPackageName)).toList()); } @AfterClass Loading @@ -77,7 +107,6 @@ public class OverlayManagerPerfTest { for (TestPackageInstaller.InstalledPackage overlay : sSmallOverlays) { overlay.uninstall(); } for (TestPackageInstaller.InstalledPackage overlay : sLargeOverlays) { overlay.uninstall(); } Loading @@ -86,37 +115,39 @@ public class OverlayManagerPerfTest { @After public void tearDown() throws Exception { // Disable all test overlays after each test. for (TestPackageInstaller.InstalledPackage overlay : sSmallOverlays) { assertSetEnabled(sContext, overlay.getPackageName(), false); } for (TestPackageInstaller.InstalledPackage overlay : sLargeOverlays) { assertSetEnabled(sContext, overlay.getPackageName(), false); } assertSetEnabled(false, sContext, Stream.concat(sSmallOverlays.stream(), sLargeOverlays.stream()).map( p -> p.getPackageName())); } /** * Enables the overlay and waits for the APK path changes to be propagated to the context * AssetManager. */ private void assertSetEnabled(Context context, String overlayPackage, boolean eanabled) throws Exception { sOverlayManager.setEnabled(overlayPackage, true, UserHandle.SYSTEM); private void assertSetEnabled(boolean enabled, Context context, Stream<String> packagesStream) { final var overlayPackages = packagesStream.toList(); overlayPackages.forEach( name -> sOverlayManager.setEnabled(name, enabled, UserHandle.SYSTEM)); // Wait for the overlay changes to propagate FutureTask<Boolean> task = new FutureTask<>(() -> { while (true) { for (String path : context.getAssets().getApkPaths()) { if (eanabled == path.contains(overlayPackage)) { return true; } final var endTime = System.nanoTime() + TimeUnit.SECONDS.toNanos(20); final var expectedPackagesFound = enabled ? overlayPackages.size() : 0; boolean assetsUpdated = false; do { final var packagesFound = Arrays.stream(context.getAssets().getApkPaths()).filter( assetPath -> overlayPackages.stream().anyMatch(assetPath::contains)).count(); if (packagesFound == expectedPackagesFound) { assetsUpdated = true; break; } Thread.yield(); } while (System.nanoTime() < endTime); assertTrue("Failed to set state to " + enabled + " for overlays " + overlayPackages, assetsUpdated); } }); sExecutor.execute(task); assertTrue("Failed to load overlay " + overlayPackage, task.get(20, TimeUnit.SECONDS)); private void assertSetEnabled(boolean enabled, Context context, String overlayPackage) { assertSetEnabled(enabled, context, Stream.of(overlayPackage)); } @Test Loading @@ -124,11 +155,11 @@ public class OverlayManagerPerfTest { String packageName = sSmallOverlays.get(0).getPackageName(); BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); while (state.keepRunning()) { assertSetEnabled(sContext, packageName, true); assertSetEnabled(true, sContext, packageName); // Disable the overlay for the next iteration of the test state.pauseTiming(); assertSetEnabled(sContext, packageName, false); assertSetEnabled(false, sContext, packageName); state.resumeTiming(); } } Loading @@ -138,11 +169,11 @@ public class OverlayManagerPerfTest { String packageName = sSmallOverlays.get(0).getPackageName(); BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); while (state.keepRunning()) { assertSetEnabled(sContext, packageName, true); assertSetEnabled(true, sContext, packageName); // Disable the overlay and remove the idmap for the next iteration of the test state.pauseTiming(); assertSetEnabled(sContext, packageName, false); assertSetEnabled(false, sContext, packageName); sOverlayManager.invalidateCachesForOverlay(packageName, UserHandle.SYSTEM); state.resumeTiming(); } Loading @@ -153,11 +184,11 @@ public class OverlayManagerPerfTest { String packageName = sLargeOverlays.get(0).getPackageName(); BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); while (state.keepRunning()) { assertSetEnabled(sContext, packageName, true); assertSetEnabled(true, sContext, packageName); // Disable the overlay and remove the idmap for the next iteration of the test state.pauseTiming(); assertSetEnabled(sContext, packageName, false); assertSetEnabled(false, sContext, packageName); sOverlayManager.invalidateCachesForOverlay(packageName, UserHandle.SYSTEM); state.resumeTiming(); } Loading @@ -169,30 +200,28 @@ public class OverlayManagerPerfTest { BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); while (state.keepRunning()) { state.pauseTiming(); assertSetEnabled(sContext, packageName, true); assertSetEnabled(true, sContext, packageName); state.resumeTiming(); assertSetEnabled(sContext, packageName, false); assertSetEnabled(false, sContext, packageName); } } @Test public void getStringOneSmallOverlay() throws Exception { String packageName = sSmallOverlays.get(0).getPackageName(); assertSetEnabled(sContext, packageName, true); assertSetEnabled(true, sContext, packageName); BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); while (state.keepRunning()) { sContext.getString(R.string.short_text); } assertSetEnabled(sContext, packageName, false); } @Test public void getStringOneLargeOverlay() throws Exception { String packageName = sLargeOverlays.get(0).getPackageName(); assertSetEnabled(sContext, packageName, true); assertSetEnabled(true, sContext, packageName); BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); while (state.keepRunning()) { Loading @@ -200,16 +229,12 @@ public class OverlayManagerPerfTest { sContext.getString(resId); } } assertSetEnabled(sContext, packageName, false); } @Test public void getStringTenOverlays() throws Exception { // Enable all test overlays for (TestPackageInstaller.InstalledPackage overlay : sSmallOverlays) { assertSetEnabled(sContext, overlay.getPackageName(), true); } // Enable all small test overlays assertSetEnabled(true, sContext, sSmallOverlays.stream().map(p -> p.getPackageName())); BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); while (state.keepRunning()) { Loading @@ -219,10 +244,8 @@ public class OverlayManagerPerfTest { @Test public void getStringLargeTenOverlays() throws Exception { // Enable all test overlays for (TestPackageInstaller.InstalledPackage overlay : sLargeOverlays) { assertSetEnabled(sContext, overlay.getPackageName(), true); } // Enable all large test overlays assertSetEnabled(true, sContext, sLargeOverlays.stream().map(p -> p.getPackageName())); BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); while (state.keepRunning()) { Loading apct-tests/perftests/core/src/android/libcore/regression/ByteBufferPerfTest.java +0 −2 Original line number Diff line number Diff line Loading @@ -565,7 +565,6 @@ public class ByteBufferPerfTest { } @Test @Parameters(method = "getData") public void time_new_byteArray() throws Exception { final BenchmarkState state = mBenchmarkRule.getState(); while (state.keepRunning()) { Loading @@ -574,7 +573,6 @@ public class ByteBufferPerfTest { } @Test @Parameters(method = "getData") public void time_ByteBuffer_allocate() throws Exception { final BenchmarkState state = mBenchmarkRule.getState(); while (state.keepRunning()) { Loading Loading
AconfigFlags.bp +56 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ aconfig_declarations_group { "android.app.flags-aconfig-java", "android.app.ondeviceintelligence-aconfig-java", "android.app.smartspace.flags-aconfig-java", "android.app.supervision.flags-aconfig-java", "android.app.usage.flags-aconfig-java", "android.app.wearable.flags-aconfig-java", "android.appwidget.flags-aconfig-java", Loading Loading @@ -99,6 +100,7 @@ aconfig_declarations_group { "framework-jobscheduler-job.flags-aconfig-java", "framework_graphics_flags_java_lib", "hwui_flags_java_lib", "interaction_jank_monitor_flags_lib", "libcore_exported_aconfig_flags_lib", "libgui_flags_java_lib", "power_flags_lib", Loading Loading @@ -436,9 +438,22 @@ aconfig_declarations { name: "android.companion.virtualdevice.flags-aconfig", package: "android.companion.virtualdevice.flags", container: "system", exportable: true, srcs: ["core/java/android/companion/virtual/flags/*.aconfig"], } java_aconfig_library { name: "android.companion.virtualdevice.flags-aconfig-java-export", aconfig_declarations: "android.companion.virtualdevice.flags-aconfig", defaults: ["framework-minus-apex-aconfig-java-defaults"], mode: "exported", min_sdk_version: "30", apex_available: [ "//apex_available:platform", "com.android.permission", ], } java_aconfig_library { name: "android.companion.virtual.flags-aconfig-java", aconfig_declarations: "android.companion.virtual.flags-aconfig", Loading Loading @@ -1212,6 +1227,21 @@ java_aconfig_library { defaults: ["framework-minus-apex-aconfig-java-defaults"], } // Supervision aconfig_declarations { name: "android.app.supervision.flags-aconfig", exportable: true, package: "android.app.supervision.flags", container: "system", srcs: ["core/java/android/app/supervision/flags.aconfig"], } java_aconfig_library { name: "android.app.supervision.flags-aconfig-java", aconfig_declarations: "android.app.supervision.flags-aconfig", defaults: ["framework-minus-apex-aconfig-java-defaults"], } // SurfaceFlinger java_aconfig_library { name: "surfaceflinger_flags_java_lib", Loading Loading @@ -1399,6 +1429,18 @@ java_aconfig_library { defaults: ["framework-minus-apex-aconfig-java-defaults"], } java_aconfig_library { name: "android.app.appfunctions.exported-flags-aconfig-java", aconfig_declarations: "android.app.appfunctions.flags-aconfig", defaults: ["framework-minus-apex-aconfig-java-defaults"], mode: "exported", apex_available: [ "//apex_available:platform", "com.android.permission", ], min_sdk_version: "30", } // Adaptive Auth aconfig_declarations { name: "android.adaptiveauth.flags-aconfig", Loading Loading @@ -1549,3 +1591,17 @@ java_aconfig_library { aconfig_declarations: "dropbox_flags", defaults: ["framework-minus-apex-aconfig-java-defaults"], } // Zero Jank aconfig_declarations { name: "interaction_jank_monitor_flags", package: "com.android.internal.jank", container: "system", srcs: ["core/java/com/android/internal/jank/flags.aconfig"], } java_aconfig_library { name: "interaction_jank_monitor_flags_lib", aconfig_declarations: "interaction_jank_monitor_flags", defaults: ["framework-minus-apex-aconfig-java-defaults"], }
Ravenwood.bp +2 −2 Original line number Diff line number Diff line Loading @@ -50,7 +50,7 @@ genrule_defaults { framework_minus_apex_cmd = "$(location hoststubgen) " + "@$(location :ravenwood-standard-options) " + "--debug-log $(location hoststubgen_framework-minus-apex.log) " + "--out-impl-jar $(location ravenwood.jar) " + "--out-jar $(location ravenwood.jar) " + "--in-jar $(location :framework-minus-apex-for-hoststubgen) " + "--policy-override-file $(location :ravenwood-framework-policies) " + "--annotation-allowed-classes-file $(location :ravenwood-annotation-allowed-classes) " Loading Loading @@ -183,7 +183,7 @@ java_genrule { "--stats-file $(location hoststubgen_services.core_stats.csv) " + "--supported-api-list-file $(location hoststubgen_services.core_apis.csv) " + "--out-impl-jar $(location ravenwood.jar) " + "--out-jar $(location ravenwood.jar) " + "--gen-keep-all-file $(location hoststubgen_services.core_keep_all.txt) " + "--gen-input-dump-file $(location hoststubgen_services.core_dump.txt) " + Loading
apct-tests/perftests/core/AndroidTest.xml +11 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,17 @@ <option name="test-suite-tag" value="apct" /> <option name="test-suite-tag" value="apct-metric-instrumentation" /> // Deal with Play Protect blocking apk installations. // The first setting disables the verification, the second one lowers the timeout from // 1hr to 10s, the third one resets the value after the test is complete, and the final // setting skips the device reboot after modifying the settings. <target_preparer class="com.android.tradefed.targetprep.DeviceSetup"> <option name="set-global-setting" key="verifier_verify_adb_installs" value="0" /> <option name="set-global-setting" key="verifier_engprod" value="1" /> <option name="restore-settings" value="true" /> <option name="force-skip-system-props" value="true" /> </target_preparer> <target_preparer class="com.android.tradefed.targetprep.RootTargetPreparer"/> <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer"> <option name="push-file" key="trace_config_detailed.textproto" value="/data/misc/perfetto-traces/trace_config.textproto" /> Loading
apct-tests/perftests/core/src/android/app/OverlayManagerPerfTest.java +76 −53 Original line number Diff line number Diff line Loading @@ -37,9 +37,13 @@ import org.junit.Rule; import org.junit.Test; import java.util.ArrayList; import java.util.concurrent.Executor; import java.util.concurrent.FutureTask; import java.util.Arrays; import java.util.Comparator; import java.util.concurrent.Callable; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.stream.Stream; /** * Benchmarks for {@link android.content.om.OverlayManager}. Loading @@ -49,7 +53,6 @@ public class OverlayManagerPerfTest { private static final int OVERLAY_PKG_COUNT = 10; private static Context sContext; private static OverlayManager sOverlayManager; private static Executor sExecutor; private static ArrayList<TestPackageInstaller.InstalledPackage> sSmallOverlays = new ArrayList<>(); private static ArrayList<TestPackageInstaller.InstalledPackage> sLargeOverlays = Loading @@ -58,18 +61,45 @@ public class OverlayManagerPerfTest { @Rule public PerfStatusReporter mPerfStatusReporter = new PerfStatusReporter(); // Uncheck the checked exceptions in a callable for convenient stream usage. // Any exception will fail the test anyway. private static <T> T uncheck(Callable<T> c) { try { return c.call(); } catch (RuntimeException e) { throw e; } catch (Exception e) { throw new RuntimeException(e); } } @BeforeClass public static void classSetUp() throws Exception { sContext = InstrumentationRegistry.getTargetContext(); sOverlayManager = new OverlayManager(sContext); sExecutor = (command) -> new Thread(command).start(); // Install all of the test overlays. TestPackageInstaller installer = new TestPackageInstaller(sContext); // Install all of the test overlays. Play Protect likes to block these for 10 sec each // so let's install them in parallel to speed up the wait. final var installer = new TestPackageInstaller(sContext); final var es = Executors.newFixedThreadPool(2 * OVERLAY_PKG_COUNT); final var smallFutures = new ArrayList<Future<TestPackageInstaller.InstalledPackage>>( OVERLAY_PKG_COUNT); final var largeFutures = new ArrayList<Future<TestPackageInstaller.InstalledPackage>>( OVERLAY_PKG_COUNT); for (int i = 0; i < OVERLAY_PKG_COUNT; i++) { sSmallOverlays.add(installer.installPackage("Overlay" + i +".apk")); sLargeOverlays.add(installer.installPackage("LargeOverlay" + i +".apk")); final var index = i; smallFutures.add(es.submit(() -> installer.installPackage("Overlay" + index + ".apk"))); largeFutures.add( es.submit(() -> installer.installPackage("LargeOverlay" + index + ".apk"))); } es.shutdown(); assertTrue(es.awaitTermination(15 * 2 * OVERLAY_PKG_COUNT, TimeUnit.SECONDS)); sSmallOverlays.addAll(smallFutures.stream().map(f -> uncheck(f::get)).sorted( Comparator.comparing( TestPackageInstaller.InstalledPackage::getPackageName)).toList()); sLargeOverlays.addAll(largeFutures.stream().map(f -> uncheck(f::get)).sorted( Comparator.comparing( TestPackageInstaller.InstalledPackage::getPackageName)).toList()); } @AfterClass Loading @@ -77,7 +107,6 @@ public class OverlayManagerPerfTest { for (TestPackageInstaller.InstalledPackage overlay : sSmallOverlays) { overlay.uninstall(); } for (TestPackageInstaller.InstalledPackage overlay : sLargeOverlays) { overlay.uninstall(); } Loading @@ -86,37 +115,39 @@ public class OverlayManagerPerfTest { @After public void tearDown() throws Exception { // Disable all test overlays after each test. for (TestPackageInstaller.InstalledPackage overlay : sSmallOverlays) { assertSetEnabled(sContext, overlay.getPackageName(), false); } for (TestPackageInstaller.InstalledPackage overlay : sLargeOverlays) { assertSetEnabled(sContext, overlay.getPackageName(), false); } assertSetEnabled(false, sContext, Stream.concat(sSmallOverlays.stream(), sLargeOverlays.stream()).map( p -> p.getPackageName())); } /** * Enables the overlay and waits for the APK path changes to be propagated to the context * AssetManager. */ private void assertSetEnabled(Context context, String overlayPackage, boolean eanabled) throws Exception { sOverlayManager.setEnabled(overlayPackage, true, UserHandle.SYSTEM); private void assertSetEnabled(boolean enabled, Context context, Stream<String> packagesStream) { final var overlayPackages = packagesStream.toList(); overlayPackages.forEach( name -> sOverlayManager.setEnabled(name, enabled, UserHandle.SYSTEM)); // Wait for the overlay changes to propagate FutureTask<Boolean> task = new FutureTask<>(() -> { while (true) { for (String path : context.getAssets().getApkPaths()) { if (eanabled == path.contains(overlayPackage)) { return true; } final var endTime = System.nanoTime() + TimeUnit.SECONDS.toNanos(20); final var expectedPackagesFound = enabled ? overlayPackages.size() : 0; boolean assetsUpdated = false; do { final var packagesFound = Arrays.stream(context.getAssets().getApkPaths()).filter( assetPath -> overlayPackages.stream().anyMatch(assetPath::contains)).count(); if (packagesFound == expectedPackagesFound) { assetsUpdated = true; break; } Thread.yield(); } while (System.nanoTime() < endTime); assertTrue("Failed to set state to " + enabled + " for overlays " + overlayPackages, assetsUpdated); } }); sExecutor.execute(task); assertTrue("Failed to load overlay " + overlayPackage, task.get(20, TimeUnit.SECONDS)); private void assertSetEnabled(boolean enabled, Context context, String overlayPackage) { assertSetEnabled(enabled, context, Stream.of(overlayPackage)); } @Test Loading @@ -124,11 +155,11 @@ public class OverlayManagerPerfTest { String packageName = sSmallOverlays.get(0).getPackageName(); BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); while (state.keepRunning()) { assertSetEnabled(sContext, packageName, true); assertSetEnabled(true, sContext, packageName); // Disable the overlay for the next iteration of the test state.pauseTiming(); assertSetEnabled(sContext, packageName, false); assertSetEnabled(false, sContext, packageName); state.resumeTiming(); } } Loading @@ -138,11 +169,11 @@ public class OverlayManagerPerfTest { String packageName = sSmallOverlays.get(0).getPackageName(); BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); while (state.keepRunning()) { assertSetEnabled(sContext, packageName, true); assertSetEnabled(true, sContext, packageName); // Disable the overlay and remove the idmap for the next iteration of the test state.pauseTiming(); assertSetEnabled(sContext, packageName, false); assertSetEnabled(false, sContext, packageName); sOverlayManager.invalidateCachesForOverlay(packageName, UserHandle.SYSTEM); state.resumeTiming(); } Loading @@ -153,11 +184,11 @@ public class OverlayManagerPerfTest { String packageName = sLargeOverlays.get(0).getPackageName(); BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); while (state.keepRunning()) { assertSetEnabled(sContext, packageName, true); assertSetEnabled(true, sContext, packageName); // Disable the overlay and remove the idmap for the next iteration of the test state.pauseTiming(); assertSetEnabled(sContext, packageName, false); assertSetEnabled(false, sContext, packageName); sOverlayManager.invalidateCachesForOverlay(packageName, UserHandle.SYSTEM); state.resumeTiming(); } Loading @@ -169,30 +200,28 @@ public class OverlayManagerPerfTest { BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); while (state.keepRunning()) { state.pauseTiming(); assertSetEnabled(sContext, packageName, true); assertSetEnabled(true, sContext, packageName); state.resumeTiming(); assertSetEnabled(sContext, packageName, false); assertSetEnabled(false, sContext, packageName); } } @Test public void getStringOneSmallOverlay() throws Exception { String packageName = sSmallOverlays.get(0).getPackageName(); assertSetEnabled(sContext, packageName, true); assertSetEnabled(true, sContext, packageName); BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); while (state.keepRunning()) { sContext.getString(R.string.short_text); } assertSetEnabled(sContext, packageName, false); } @Test public void getStringOneLargeOverlay() throws Exception { String packageName = sLargeOverlays.get(0).getPackageName(); assertSetEnabled(sContext, packageName, true); assertSetEnabled(true, sContext, packageName); BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); while (state.keepRunning()) { Loading @@ -200,16 +229,12 @@ public class OverlayManagerPerfTest { sContext.getString(resId); } } assertSetEnabled(sContext, packageName, false); } @Test public void getStringTenOverlays() throws Exception { // Enable all test overlays for (TestPackageInstaller.InstalledPackage overlay : sSmallOverlays) { assertSetEnabled(sContext, overlay.getPackageName(), true); } // Enable all small test overlays assertSetEnabled(true, sContext, sSmallOverlays.stream().map(p -> p.getPackageName())); BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); while (state.keepRunning()) { Loading @@ -219,10 +244,8 @@ public class OverlayManagerPerfTest { @Test public void getStringLargeTenOverlays() throws Exception { // Enable all test overlays for (TestPackageInstaller.InstalledPackage overlay : sLargeOverlays) { assertSetEnabled(sContext, overlay.getPackageName(), true); } // Enable all large test overlays assertSetEnabled(true, sContext, sLargeOverlays.stream().map(p -> p.getPackageName())); BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); while (state.keepRunning()) { Loading
apct-tests/perftests/core/src/android/libcore/regression/ByteBufferPerfTest.java +0 −2 Original line number Diff line number Diff line Loading @@ -565,7 +565,6 @@ public class ByteBufferPerfTest { } @Test @Parameters(method = "getData") public void time_new_byteArray() throws Exception { final BenchmarkState state = mBenchmarkRule.getState(); while (state.keepRunning()) { Loading @@ -574,7 +573,6 @@ public class ByteBufferPerfTest { } @Test @Parameters(method = "getData") public void time_ByteBuffer_allocate() throws Exception { final BenchmarkState state = mBenchmarkRule.getState(); while (state.keepRunning()) { Loading