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

Commit 9acb9d97 authored by Sudheer Shanka's avatar Sudheer Shanka
Browse files

Prioritize delivering broadcasts to apps with fg activities.

Bug: 275594411
Bug: 275767820
Test: atest FrameworksMockingServicesTests:BroadcastQueueTest
Test: atest FrameworksMockingServicesTests:BroadcastQueueModernImplTest
Change-Id: I13444844307e2e36fbb1a38aa609121b4c2b7b81
parent 2428df9b
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -860,6 +860,7 @@ class BroadcastProcessQueue {
    static final int REASON_CONTAINS_RESULT_TO = 15;
    static final int REASON_CONTAINS_INSTRUMENTED = 16;
    static final int REASON_CONTAINS_MANIFEST = 17;
    static final int REASON_FOREGROUND_ACTIVITIES = 18;

    @IntDef(flag = false, prefix = { "REASON_" }, value = {
            REASON_EMPTY,
@@ -879,6 +880,7 @@ class BroadcastProcessQueue {
            REASON_CONTAINS_RESULT_TO,
            REASON_CONTAINS_INSTRUMENTED,
            REASON_CONTAINS_MANIFEST,
            REASON_FOREGROUND_ACTIVITIES,
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface Reason {}
@@ -902,6 +904,7 @@ class BroadcastProcessQueue {
            case REASON_CONTAINS_RESULT_TO: return "CONTAINS_RESULT_TO";
            case REASON_CONTAINS_INSTRUMENTED: return "CONTAINS_INSTRUMENTED";
            case REASON_CONTAINS_MANIFEST: return "CONTAINS_MANIFEST";
            case REASON_FOREGROUND_ACTIVITIES: return "FOREGROUND_ACTIVITIES";
            default: return Integer.toString(reason);
        }
    }
@@ -959,6 +962,11 @@ class BroadcastProcessQueue {
            } else if (mProcessInstrumented) {
                mRunnableAt = runnableAt + constants.DELAY_URGENT_MILLIS;
                mRunnableAtReason = REASON_INSTRUMENTED;
            } else if (app != null && app.hasForegroundActivities()) {
                // TODO: Listen for uid state changes to check when an uid goes in and out of
                // the TOP state.
                mRunnableAt = runnableAt + constants.DELAY_URGENT_MILLIS;
                mRunnableAtReason = REASON_FOREGROUND_ACTIVITIES;
            } else if (mCountOrdered > 0) {
                mRunnableAt = runnableAt;
                mRunnableAtReason = REASON_CONTAINS_ORDERED;
+5 −0
Original line number Diff line number Diff line
@@ -1050,6 +1050,11 @@ class ProcessRecord implements WindowProcessListener {
        return mState.isCached();
    }

    @GuardedBy(anyOf = {"mService", "mProcLock"})
    public boolean hasForegroundActivities() {
        return mState.hasForegroundActivities();
    }

    boolean hasActivities() {
        return mWindowProcessController.hasActivities();
    }