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

Commit da070122 authored by Ajay Panicker's avatar Ajay Panicker
Browse files

AVRCP: Don't use the queue for current metadata

If many requests come for the current metadata and the queue is large,
AVRCP could end up using a lot of CPU time. Instead just use the players
current metadata. Note this could lead to metadata sync issues as we
aren't using the same source for queue information and current song
information, but that should be reflected in the logs in case the issue
arrises.

Bug: 112563625
Test: runtest bluetooth
Change-Id: Ia95e20cb78e53e8efb1548dfd95ae9f8afcfd4b4
parent c9d26b6a
Loading
Loading
Loading
Loading
+0 −11
Original line number Original line Diff line number Diff line
@@ -53,7 +53,6 @@ class MediaPlayerWrapper {
    private final Object mCallbackLock = new Object();
    private final Object mCallbackLock = new Object();
    private Callback mRegisteredCallback = null;
    private Callback mRegisteredCallback = null;



    protected MediaPlayerWrapper() {
    protected MediaPlayerWrapper() {
        mCurrentData = new MediaData(null, null, null);
        mCurrentData = new MediaData(null, null, null);
    }
    }
@@ -122,16 +121,6 @@ class MediaPlayerWrapper {
    }
    }


    Metadata getCurrentMetadata() {
    Metadata getCurrentMetadata() {
        // Try to use the now playing list if the information exists.
        if (getActiveQueueID() != -1) {
            for (Metadata data : getCurrentQueue()) {
                if (data.mediaId.equals(Util.NOW_PLAYING_PREFIX + getActiveQueueID())) {
                    d("getCurrentMetadata: Using playlist data: " + data.toString());
                    return data.clone();
                }
            }
        }

        return Util.toMetadata(getMetadata());
        return Util.toMetadata(getMetadata());
    }
    }


+0 −22
Original line number Original line Diff line number Diff line
@@ -311,28 +311,6 @@ public class MediaPlayerWrapperTest {
        verify(mFailHandler, never()).onTerribleFailure(any(), any(), anyBoolean());
        verify(mFailHandler, never()).onTerribleFailure(any(), any(), anyBoolean());
    }
    }


    /*
     * This test checks whether getCurrentMetadata() returns the corresponding item from
     * the now playing list instead of the current metadata if there is a match.
     */
    @Test
    public void testCurrentSongFromQueue() {
        // Create the wrapper object and register the looper with the timeout handler
        TestLooperManager looperManager = new TestLooperManager(mThread.getLooper());

        mTestState.setActiveQueueItemId(101);
        doReturn(mTestState.build()).when(mMockController).getPlaybackState();

        MediaPlayerWrapper wrapper =
                MediaPlayerWrapper.wrap(mMockController, mThread.getLooper());
        wrapper.registerCallback(mTestCbs);

        // The current metadata doesn't contain track number info so check that
        // field to see if the correct data was used.
        Assert.assertEquals(wrapper.getCurrentMetadata().trackNum, "2");
        Assert.assertEquals(wrapper.getCurrentMetadata().numTracks, "3");
    }

    @Test
    @Test
    public void testNullMetadata() {
    public void testNullMetadata() {
        // Create the wrapper object and register the looper with the timeout handler
        // Create the wrapper object and register the looper with the timeout handler