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

Commit 596bafa7 authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Snap for 12337407 from 53950fa3 to 25Q2-release

Change-Id: I4a809f9db684108755c993d2913f6de0901338c7
parents 55ba0763 53950fa3
Loading
Loading
Loading
Loading
+56 −0
Original line number Diff line number Diff line
@@ -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",
@@ -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",
@@ -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",
@@ -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",
@@ -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",
@@ -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"],
}
+2 −2
Original line number Diff line number Diff line
@@ -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) "
@@ -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) " +
+11 −0
Original line number Diff line number Diff line
@@ -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" />
+76 −53
Original line number Diff line number Diff line
@@ -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}.
@@ -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 =
@@ -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
@@ -77,7 +107,6 @@ public class OverlayManagerPerfTest {
        for (TestPackageInstaller.InstalledPackage overlay : sSmallOverlays) {
            overlay.uninstall();
        }

        for (TestPackageInstaller.InstalledPackage overlay : sLargeOverlays) {
            overlay.uninstall();
        }
@@ -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
@@ -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();
        }
    }
@@ -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();
        }
@@ -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();
        }
@@ -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()) {
@@ -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()) {
@@ -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()) {
+0 −2
Original line number Diff line number Diff line
@@ -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()) {
@@ -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