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

Commit 1ec752f2 authored by Dianne Hackborn's avatar Dianne Hackborn Committed by Android (Google) Code Review
Browse files

Merge "Add tracking of bg check violations in broadcast stats."

parents c8a96b0b 7fc46d8b
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -19019,8 +19019,7 @@ public class ActivityManagerService extends IActivityManager.Stub
        return ActivityManager.BROADCAST_SUCCESS;
    }
    final void addBroadcastStatLocked(String action, String srcPackage, int receiveCount,
            int skipCount, long dispatchTime) {
    final void rotateBroadcastStatsIfNeededLocked() {
        final long now = SystemClock.elapsedRealtime();
        if (mCurBroadcastStats == null ||
                (mCurBroadcastStats.mStartRealtime +(24*60*60*1000) < now)) {
@@ -19031,9 +19030,19 @@ public class ActivityManagerService extends IActivityManager.Stub
            }
            mCurBroadcastStats = new BroadcastStats();
        }
    }
    final void addBroadcastStatLocked(String action, String srcPackage, int receiveCount,
            int skipCount, long dispatchTime) {
        rotateBroadcastStatsIfNeededLocked();
        mCurBroadcastStats.addBroadcast(action, srcPackage, receiveCount, skipCount, dispatchTime);
    }
    final void addBackgroundCheckViolationLocked(String action, String targetPackage) {
        rotateBroadcastStatsIfNeededLocked();
        mCurBroadcastStats.addBackgroundCheckViolation(action, targetPackage);
    }
    final Intent verifyBroadcastLocked(Intent intent) {
        // Refuse possible leaked file descriptors
        if (intent != null && intent.hasFileDescriptors() == true) {
+2 −0
Original line number Diff line number Diff line
@@ -1195,6 +1195,8 @@ public final class BroadcastQueue {
                                && r.intent.getPackage() == null
                                && ((r.intent.getFlags()
                                        & Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND) == 0))) {
                        mService.addBackgroundCheckViolationLocked(r.intent.getAction(),
                                component.getPackageName());
                        Slog.w(TAG, "Background execution not allowed: receiving "
                                + r.intent + " to "
                                + component.flattenToShortString());
+36 −0
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@ public final class BroadcastStats {
    static final class ActionEntry {
        final String mAction;
        final ArrayMap<String, PackageEntry> mPackages = new ArrayMap<>();
        final ArrayMap<String, ViolationEntry> mBackgroundCheckViolations = new ArrayMap<>();
        int mReceiveCount;
        int mSkipCount;
        long mTotalDispatchTime;
@@ -61,6 +62,10 @@ public final class BroadcastStats {
        int mSendCount;
    }

    static final class ViolationEntry {
        int mCount;
    }

    public BroadcastStats() {
        mStartRealtime = SystemClock.elapsedRealtime();
        mStartUptime = SystemClock.uptimeMillis();
@@ -87,6 +92,20 @@ public final class BroadcastStats {
        pe.mSendCount++;
    }

    public void addBackgroundCheckViolation(String action, String targetPackage) {
        ActionEntry ae = mActions.get(action);
        if (ae == null) {
            ae = new ActionEntry(action);
            mActions.put(action, ae);
        }
        ViolationEntry ve = ae.mBackgroundCheckViolations.get(targetPackage);
        if (ve == null) {
            ve = new ViolationEntry();
            ae.mBackgroundCheckViolations.put(targetPackage, ve);
        }
        ve.mCount++;
    }

    public boolean dumpStats(PrintWriter pw, String prefix, String dumpPackage) {
        boolean printedSomething = false;
        ArrayList<ActionEntry> actions = new ArrayList<>(mActions.size());
@@ -123,6 +142,15 @@ public final class BroadcastStats {
                pw.print(pe.mSendCount);
                pw.println(" times");
            }
            for (int j=ae.mBackgroundCheckViolations.size()-1; j>=0; j--) {
                pw.print(prefix);
                pw.print("  Bg Check Violation ");
                pw.print(ae.mBackgroundCheckViolations.keyAt(j));
                pw.print(": ");
                ViolationEntry ve = ae.mBackgroundCheckViolations.valueAt(j);
                pw.print(ve.mCount);
                pw.println(" times");
            }
        }
        return printedSomething;
    }
@@ -158,6 +186,14 @@ public final class BroadcastStats {
                pw.print(pe.mSendCount);
                pw.println();
            }
            for (int j=ae.mBackgroundCheckViolations.size()-1; j>=0; j--) {
                pw.print("v,");
                pw.print(ae.mBackgroundCheckViolations.keyAt(j));
                ViolationEntry ve = ae.mBackgroundCheckViolations.valueAt(j);
                pw.print(",");
                pw.print(ve.mCount);
                pw.println();
            }
        }
    }
}