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

Commit 110be912 authored by Cosmin Băieș's avatar Cosmin Băieș
Browse files

Optimize OverlayManagerSettings dump

Currently dumping the OverlayManagerSettings uses streams, and could
lead to at most 3 traversals over all the items. This optimizes the
dumping to one single traversal, without streams.

Flag: EXEMPT refactor
Bug: 391829821
Test: atest InstallOverlayTests#testAdbShellOMSInterface
Change-Id: Ia21debd1538d4e792862aeb7e86c1f21de2f5e54
parent e05fd23c
Loading
Loading
Loading
Loading
+24 −22
Original line number Diff line number Diff line
@@ -26,13 +26,13 @@ import android.content.om.OverlayInfo;
import android.os.UserHandle;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.IndentingPrintWriter;
import android.util.Pair;
import android.util.Slog;
import android.util.Xml;

import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.CollectionUtils;
import com.android.internal.util.IndentingPrintWriter;
import com.android.internal.util.XmlUtils;
import com.android.modules.utils.TypedXmlPullParser;
import com.android.modules.utils.TypedXmlSerializer;
@@ -49,7 +49,6 @@ import java.util.Objects;
import java.util.Set;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.stream.Stream;

/**
 * Data structure representing the current state of all overlay packages in the
@@ -358,26 +357,29 @@ final class OverlayManagerSettings {
    }

    void dump(@NonNull final PrintWriter p, @NonNull DumpState dumpState) {
        // select items to display
        Stream<SettingsItem> items = mItems.stream();
        if (dumpState.getUserId() != UserHandle.USER_ALL) {
            items = items.filter(item -> item.mUserId == dumpState.getUserId());
        final int userId = dumpState.getUserId();
        final String packageName = dumpState.getPackageName();
        final String overlayName = dumpState.getOverlayName();
        final String field = dumpState.getField();
        final var pw = new IndentingPrintWriter(p, "  ");

        for (int i = 0; i < mItems.size(); i++) {
            final var item = mItems.get(i);
            if (userId != UserHandle.USER_ALL && userId != item.mUserId) {
                continue;
            }
        if (dumpState.getPackageName() != null) {
            items = items.filter(item -> item.mOverlay.getPackageName()
                    .equals(dumpState.getPackageName()));
            if (packageName != null && !packageName.equals(item.mOverlay.getPackageName())) {
                continue;
            }
        if (dumpState.getOverlayName() != null) {
            items = items.filter(item -> item.mOverlay.getOverlayName()
                    .equals(dumpState.getOverlayName()));
            if (overlayName != null && !overlayName.equals(item.mOverlay.getOverlayName())) {
                continue;
            }

        // display items
        final IndentingPrintWriter pw = new IndentingPrintWriter(p, "  ");
        if (dumpState.getField() != null) {
            items.forEach(item -> dumpSettingsItemField(pw, item, dumpState.getField()));
            if (field != null) {
                dumpSettingsItemField(pw, item, field);
            } else {
            items.forEach(item -> dumpSettingsItem(pw, item));
                dumpSettingsItem(pw, item);
            }
        }
    }