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

Commit 807a42d4 authored by Yurii Zubrytskyi's avatar Yurii Zubrytskyi
Browse files

[res] Minor optimizations in OverlayManagerService

- OverlayPaths builder can initialize from another Builder

- Don't loop over all target packages for logging if there's
  nothing to log

Bug: 282215580
Test: build + boot + presubmits
Change-Id: I8545c938d27d1bb740f11c3d6342bf0bdd7b4024
parent d01fd996
Loading
Loading
Loading
Loading
+7 −0
Original line number Original line Diff line number Diff line
@@ -49,6 +49,13 @@ public class OverlayPaths {
    public static class Builder {
    public static class Builder {
        final OverlayPaths mPaths = new OverlayPaths();
        final OverlayPaths mPaths = new OverlayPaths();


        public Builder() {}

        public Builder(@NonNull OverlayPaths base) {
            mPaths.mResourceDirs.addAll(base.getResourceDirs());
            mPaths.mOverlayPaths.addAll(base.getOverlayPaths());
        }

        /**
        /**
         * Adds a non-APK path to the contents of {@link OverlayPaths#getOverlayPaths()}.
         * Adds a non-APK path to the contents of {@link OverlayPaths#getOverlayPaths()}.
         */
         */
+18 −16
Original line number Original line Diff line number Diff line
@@ -362,7 +362,7 @@ public final class OverlayManagerService extends SystemService {
                defaultPackages.add(packageName);
                defaultPackages.add(packageName);
            }
            }
        }
        }
        return defaultPackages.toArray(new String[defaultPackages.size()]);
        return defaultPackages.toArray(new String[0]);
    }
    }


    private final class OverlayManagerPackageMonitor extends PackageMonitor {
    private final class OverlayManagerPackageMonitor extends PackageMonitor {
@@ -1160,7 +1160,7 @@ public final class OverlayManagerService extends SystemService {
        // state may lead to contradictions within OMS. Better then to lag
        // state may lead to contradictions within OMS. Better then to lag
        // behind until all pending intents have been processed.
        // behind until all pending intents have been processed.
        private final ArrayMap<String, PackageStateUsers> mCache = new ArrayMap<>();
        private final ArrayMap<String, PackageStateUsers> mCache = new ArrayMap<>();
        private final Set<Integer> mInitializedUsers = new ArraySet<>();
        private final ArraySet<Integer> mInitializedUsers = new ArraySet<>();


        PackageManagerHelperImpl(Context context) {
        PackageManagerHelperImpl(Context context) {
            mContext = context;
            mContext = context;
@@ -1176,8 +1176,7 @@ public final class OverlayManagerService extends SystemService {
         */
         */
        @NonNull
        @NonNull
        public ArrayMap<String, PackageState> initializeForUser(final int userId) {
        public ArrayMap<String, PackageState> initializeForUser(final int userId) {
            if (!mInitializedUsers.contains(userId)) {
            if (mInitializedUsers.add(userId)) {
                mInitializedUsers.add(userId);
                mPackageManagerInternal.forEachPackageState((packageState -> {
                mPackageManagerInternal.forEachPackageState((packageState -> {
                    if (packageState.getPkg() != null
                    if (packageState.getPkg() != null
                            && packageState.getUserStateOrDefault(userId).isInstalled()) {
                            && packageState.getUserStateOrDefault(userId).isInstalled()) {
@@ -1545,8 +1544,7 @@ public final class OverlayManagerService extends SystemService {
                final OverlayPaths frameworkOverlays =
                final OverlayPaths frameworkOverlays =
                        mImpl.getEnabledOverlayPaths("android", userId, false);
                        mImpl.getEnabledOverlayPaths("android", userId, false);
                for (final String targetPackageName : targetPackageNames) {
                for (final String targetPackageName : targetPackageNames) {
                    final OverlayPaths.Builder list = new OverlayPaths.Builder();
                    final var list = new OverlayPaths.Builder(frameworkOverlays);
                    list.addAll(frameworkOverlays);
                    if (!"android".equals(targetPackageName)) {
                    if (!"android".equals(targetPackageName)) {
                        list.addAll(mImpl.getEnabledOverlayPaths(targetPackageName, userId, true));
                        list.addAll(mImpl.getEnabledOverlayPaths(targetPackageName, userId, true));
                    }
                    }
@@ -1558,19 +1556,23 @@ public final class OverlayManagerService extends SystemService {
            final HashSet<String> invalidPackages = new HashSet<>();
            final HashSet<String> invalidPackages = new HashSet<>();
            pm.setEnabledOverlayPackages(userId, pendingChanges, updatedPackages, invalidPackages);
            pm.setEnabledOverlayPackages(userId, pendingChanges, updatedPackages, invalidPackages);


            if (DEBUG || !invalidPackages.isEmpty()) {
                for (final String targetPackageName : targetPackageNames) {
                for (final String targetPackageName : targetPackageNames) {
                    if (DEBUG) {
                    if (DEBUG) {
                    Slog.d(TAG, "-> Updating overlay: target=" + targetPackageName + " overlays=["
                        Slog.d(TAG,
                                "-> Updating overlay: target=" + targetPackageName + " overlays=["
                                        + pendingChanges.get(targetPackageName)
                                        + pendingChanges.get(targetPackageName)
                                        + "] userId=" + userId);
                                        + "] userId=" + userId);
                    }
                    }


                    if (invalidPackages.contains(targetPackageName)) {
                    if (invalidPackages.contains(targetPackageName)) {
                        Slog.e(TAG, TextUtils.formatSimple(
                        Slog.e(TAG, TextUtils.formatSimple(
                            "Failed to change enabled overlays for %s user %d", targetPackageName,
                                "Failed to change enabled overlays for %s user %d",
                                targetPackageName,
                                userId));
                                userId));
                    }
                    }
                }
                }
            }
            return new ArrayList<>(updatedPackages);
            return new ArrayList<>(updatedPackages);
        } finally {
        } finally {
            traceEnd(TRACE_TAG_RRO);
            traceEnd(TRACE_TAG_RRO);