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

Commit 195ac27d authored by mayankkk's avatar mayankkk
Browse files

Include sticky broadcast cache in the processes dump.

Bug: 382083622
Test: manual
Flag: android.app.use_sticky_bcast_cache
Change-Id: Iba9cba4e981ab0c4556cdd842f252ed5119e3534
parent 9c3cfbc9
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