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

Commit 9fa2d226 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Include sticky broadcast cache in the processes dump." into main

parents d1c2733a 195ac27d
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -1975,9 +1975,13 @@ public final class ActivityThread extends ClientTransactionHandler

        @Override
        public void dumpCacheInfo(ParcelFileDescriptor pfd, String[] args) {
            try {
                PropertyInvalidatedCache.dumpCacheInfo(pfd, args);
                BroadcastStickyCache.dumpCacheInfo(pfd);
            } finally {
                IoUtils.closeQuietly(pfd);
            }
        }

        private File getDatabasesDir(Context context) {
            // There's no simple way to get the databases/ path, so do it this way.
+43 −0
Original line number Diff line number Diff line
@@ -30,14 +30,20 @@ import android.net.wifi.WifiManager;
import android.net.wifi.p2p.WifiP2pManager;
import android.os.IpcDataCache;
import android.os.IpcDataCache.Config;
import android.os.ParcelFileDescriptor;
import android.os.UpdateLock;
import android.telephony.TelephonyManager;
import android.util.ArrayMap;
import android.util.IndentingPrintWriter;
import android.view.WindowManagerPolicyConstants;

import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.FastPrintWriter;

import java.io.FileOutputStream;
import java.io.PrintWriter;

/** @hide */
public class BroadcastStickyCache {
@@ -221,6 +227,43 @@ public class BroadcastStickyCache {
        return sActionConfigMap.get(action);
    }

    public static void dumpCacheInfo(@NonNull ParcelFileDescriptor pfd) {
        if (!Flags.useStickyBcastCache()) {
            return;
        }
        final PrintWriter pw = new FastPrintWriter(new FileOutputStream(pfd.getFileDescriptor()));
        synchronized (BroadcastStickyCache.class) {
            dumpCacheLocked(pw);
        }
        pw.flush();
    }

    @GuardedBy("BroadcastStickyCache.class")
    private static void dumpCacheLocked(@NonNull PrintWriter pw) {
        final IndentingPrintWriter ipw = new IndentingPrintWriter(
                pw, "  " /* singleIndent */, "  " /* prefix */);
        ipw.println("Cached sticky broadcasts:");
        ipw.increaseIndent();
        final int count = sFilterCacheMap.size();
        if (count == 0) {
            ipw.println("<empty>");
        } else {
            for (int i = 0; i < count; ++i) {
                final StickyBroadcastFilter stickyBroadcast = sFilterCacheMap.keyAt(i);
                final IpcDataCache<Void, Intent> ipcDataCache = sFilterCacheMap.valueAt(i);
                ipw.print("Entry #");
                ipw.print(i);
                ipw.println(":");
                ipw.increaseIndent();
                ipw.print("action", stickyBroadcast.action).println();
                ipw.print("filter", stickyBroadcast.filter.toLongString()).println();
                ipcDataCache.dumpCacheEntries(pw);
                ipw.decreaseIndent();
            }
        }
        ipw.decreaseIndent();
    }

    @VisibleForTesting
    private record StickyBroadcastFilter(@NonNull IntentFilter filter, @NonNull String action) {
    }
+14 −1
Original line number Diff line number Diff line
@@ -17,13 +17,13 @@
package android.app;

import static android.text.TextUtils.formatSimple;

import static com.android.internal.util.Preconditions.checkArgumentPositive;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.TestApi;
import android.os.Binder;
import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
@@ -2325,6 +2325,19 @@ public class PropertyInvalidatedCache<Query, Result> {
        }
    }

    /**
     * This dumps the detailed entries (Query and Result) inside the current instance of the
     * {@link PropertyInvalidatedCache}.
     *
     * @param pw The PrintWriter object for the output stream.
     * @hide
     */
    public void dumpCacheEntries(@NonNull PrintWriter pw) {
        synchronized (mLock) {
            mCache.dumpDetailed(pw);
        }
    }

    /**
     * Nonces in shared memory are supported by a string block that acts as a table of contents
     * for nonce names, and an array of nonce values.  There are two key design principles with