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

Commit 169f225d authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "MessageStack.updateFreelist(): return whether messages were removed" into main

parents c7ee6a05 d26c3fe8
Loading
Loading
Loading
Loading
+14 −7
Original line number Diff line number Diff line
@@ -129,8 +129,9 @@ public final class MessageStack {

    /**
     * Iterates through messages and creates a reverse-ordered chain of messages to remove.
     * @return true if any messages were removed, false otherwise
     */
    public void updateFreelist(MessageQueue.MessageCompare compare, Handler h, int what,
    public boolean updateFreelist(MessageQueue.MessageCompare compare, Handler h, int what,
            Object object, Runnable r, long when) {
        Message current = (Message) sTop.getAcquire(this);
        Message prev = null;
@@ -150,12 +151,18 @@ public final class MessageStack {
            current = current.next;
        }

        if (firstRemoved != null) {
            Message freelist;
            do {
                freelist = mFreelistHeadValue;
                firstRemoved.nextFree = freelist;
            // prev points to the last to-be-removed message that was processed.
            } while (!sFreelistHead.compareAndSet(this, freelist, prev));

            return true;
        }

        return false;
    }

    /**
+7 −2
Original line number Diff line number Diff line
@@ -105,6 +105,7 @@ public final class MessageStackTest {
        Handler h = new Handler(Looper.getMainLooper());
        int removeWhat = 1;
        int keepWhat = 2;
        int neverPushedWhat = 3;

        // Interleave to-remove and to-keep messages.
        for (int i = 0; i < 5; i++) {
@@ -112,8 +113,12 @@ public final class MessageStackTest {
            stack.pushMessage(Message.obtain(h, keepWhat));
        }
        stack.heapSweep();
        stack.updateFreelist(new MessageQueue.MatchHandlerWhatAndObject(),
                h, removeWhat, null, null, 0);
        assertTrue(stack.updateFreelist(new MessageQueue.MatchHandlerWhatAndObject(),
                h, removeWhat, null, null, 0));

        // Try deleting a message we never pushed
        assertFalse(stack.updateFreelist(new MessageQueue.MatchHandlerWhatAndObject(),
                h, neverPushedWhat, null, null, 0));

        assertEquals(5, stack.freelistSizeForTest());
        stack.drainFreelist();