Loading core/java/android/app/ActivityThread.java +6 −2 Original line number Diff line number Diff line Loading @@ -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. Loading core/java/android/app/BroadcastStickyCache.java +43 −0 Original line number Diff line number Diff line Loading @@ -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 { Loading Loading @@ -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) { } Loading core/java/android/app/PropertyInvalidatedCache.java +14 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading Loading
core/java/android/app/ActivityThread.java +6 −2 Original line number Diff line number Diff line Loading @@ -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. Loading
core/java/android/app/BroadcastStickyCache.java +43 −0 Original line number Diff line number Diff line Loading @@ -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 { Loading Loading @@ -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) { } Loading
core/java/android/app/PropertyInvalidatedCache.java +14 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading