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

Commit 848ccc40 authored by Sudheer Shanka's avatar Sudheer Shanka Committed by Automerger Merge Worker
Browse files

Merge "Remove the normal broadcast delay for core uids." into udc-dev am: 18e51706 am: 4d5352de

parents 05303771 4d5352de
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -1015,6 +1015,7 @@ class BroadcastProcessQueue {
    static final int REASON_CONTAINS_INSTRUMENTED = 16;
    static final int REASON_CONTAINS_MANIFEST = 17;
    static final int REASON_FOREGROUND = 18;
    static final int REASON_CORE_UID = 19;

    @IntDef(flag = false, prefix = { "REASON_" }, value = {
            REASON_EMPTY,
@@ -1035,6 +1036,7 @@ class BroadcastProcessQueue {
            REASON_CONTAINS_INSTRUMENTED,
            REASON_CONTAINS_MANIFEST,
            REASON_FOREGROUND,
            REASON_CORE_UID,
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface Reason {}
@@ -1059,6 +1061,7 @@ class BroadcastProcessQueue {
            case REASON_CONTAINS_INSTRUMENTED: return "CONTAINS_INSTRUMENTED";
            case REASON_CONTAINS_MANIFEST: return "CONTAINS_MANIFEST";
            case REASON_FOREGROUND: return "FOREGROUND";
            case REASON_CORE_UID: return "CORE_UID";
            default: return Integer.toString(reason);
        }
    }
@@ -1103,6 +1106,9 @@ class BroadcastProcessQueue {
            } else if (mProcessPersistent) {
                mRunnableAt = runnableAt + constants.DELAY_PERSISTENT_PROC_MILLIS;
                mRunnableAtReason = REASON_PERSISTENT;
            } else if (UserHandle.isCore(uid)) {
                mRunnableAt = runnableAt;
                mRunnableAtReason = REASON_CORE_UID;
            } else if (mCountOrdered > 0) {
                mRunnableAt = runnableAt;
                mRunnableAtReason = REASON_CONTAINS_ORDERED;
@@ -1257,7 +1263,7 @@ class BroadcastProcessQueue {
        BroadcastProcessQueue test = head;
        BroadcastProcessQueue tail = null;
        while (test != null) {
            if (test.getRunnableAt() >= itemRunnableAt) {
            if (test.getRunnableAt() > itemRunnableAt) {
                item.runnableAtNext = test;
                item.runnableAtPrev = test.runnableAtPrev;
                if (item.runnableAtNext != null) {
+29 −0
Original line number Diff line number Diff line
@@ -77,6 +77,7 @@ import android.os.Bundle;
import android.os.BundleMerger;
import android.os.DropBoxManager;
import android.os.HandlerThread;
import android.os.Process;
import android.os.SystemClock;
import android.os.TestLooperManager;
import android.os.UserHandle;
@@ -326,6 +327,20 @@ public final class BroadcastQueueModernImplTest {
        assertOrphan(mQueue4);
    }

    @Test
    public void testRunnableList_sameRunnableAt() {
        doReturn(2L).when(mQueue1).getRunnableAt();
        doReturn(2L).when(mQueue2).getRunnableAt();
        doReturn(2L).when(mQueue3).getRunnableAt();
        doReturn(2L).when(mQueue4).getRunnableAt();

        mHead = insertIntoRunnableList(mHead, mQueue1);
        mHead = insertIntoRunnableList(mHead, mQueue2);
        mHead = insertIntoRunnableList(mHead, mQueue3);
        mHead = insertIntoRunnableList(mHead, mQueue4);
        assertRunnableList(List.of(mQueue1, mQueue2, mQueue3, mQueue4), mHead);
    }

    @Test
    public void testProcessQueue_Complex() {
        BroadcastProcessQueue red = mImpl.getOrCreateProcessQueue(PACKAGE_RED, TEST_UID);
@@ -561,6 +576,20 @@ public final class BroadcastQueueModernImplTest {
        assertEquals(BroadcastProcessQueue.REASON_NORMAL, queue.getRunnableAtReason());
    }

    @Test
    public void testRunnableAt_coreUid() {
        final BroadcastProcessQueue queue = new BroadcastProcessQueue(mConstants,
                "com.android.bluetooth", Process.BLUETOOTH_UID);

        final Intent timeTick = new Intent(Intent.ACTION_TIME_TICK);
        final BroadcastRecord timeTickRecord = makeBroadcastRecord(timeTick,
                List.of(makeMockRegisteredReceiver()));
        enqueueOrReplaceBroadcast(queue, timeTickRecord, 0);

        assertThat(queue.getRunnableAt()).isEqualTo(timeTickRecord.enqueueTime);
        assertEquals(BroadcastProcessQueue.REASON_CORE_UID, queue.getRunnableAtReason());
    }

    /**
     * Verify that a cached process that would normally be delayed becomes
     * immediately runnable when the given broadcast is enqueued.