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

Commit ba01bec3 authored by Dan Stoza's avatar Dan Stoza Committed by android-build-merger
Browse files

Merge "libgui: New mutex for ConsumerBase frame callbacks" into oc-dev am: fb672ba3

am: 1813e093

Change-Id: I9ca3c8a6bb058177cf47e8d0f8ca5a38d003c686
parents cbfbd85c 1813e093
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -106,7 +106,7 @@ void ConsumerBase::onFrameAvailable(const BufferItem& item) {

    sp<FrameAvailableListener> listener;
    { // scope for the lock
        Mutex::Autolock lock(mMutex);
        Mutex::Autolock lock(mFrameAvailableMutex);
        listener = mFrameAvailableListener.promote();
    }

@@ -121,7 +121,7 @@ void ConsumerBase::onFrameReplaced(const BufferItem &item) {

    sp<FrameAvailableListener> listener;
    {
        Mutex::Autolock lock(mMutex);
        Mutex::Autolock lock(mFrameAvailableMutex);
        listener = mFrameAvailableListener.promote();
    }

@@ -185,7 +185,7 @@ bool ConsumerBase::isAbandoned() {
void ConsumerBase::setFrameAvailableListener(
        const wp<FrameAvailableListener>& listener) {
    CB_LOGV("setFrameAvailableListener");
    Mutex::Autolock lock(mMutex);
    Mutex::Autolock lock(mFrameAvailableMutex);
    mFrameAvailableListener = listener;
}

+3 −1
Original line number Diff line number Diff line
@@ -241,7 +241,9 @@ protected:

    // mFrameAvailableListener is the listener object that will be called when a
    // new frame becomes available. If it is not NULL it will be called from
    // queueBuffer.
    // queueBuffer. The listener object is protected by mFrameAvailableMutex
    // (not mMutex).
    Mutex mFrameAvailableMutex;
    wp<FrameAvailableListener> mFrameAvailableListener;

    // The ConsumerBase has-a BufferQueue and is responsible for creating this object
+6 −1
Original line number Diff line number Diff line
@@ -240,10 +240,15 @@ void SurfaceFlingerConsumer::setContentsChangedListener(
}

void SurfaceFlingerConsumer::onSidebandStreamChanged() {
    FrameAvailableListener* unsafeFrameAvailableListener = nullptr;
    {
        Mutex::Autolock lock(mFrameAvailableMutex);
        unsafeFrameAvailableListener = mFrameAvailableListener.unsafe_get();
    }
    sp<ContentsChangedListener> listener;
    {   // scope for the lock
        Mutex::Autolock lock(mMutex);
        ALOG_ASSERT(mFrameAvailableListener.unsafe_get() == mContentsChangedListener.unsafe_get());
        ALOG_ASSERT(unsafeFrameAvailableListener == mContentsChangedListener.unsafe_get());
        listener = mContentsChangedListener.promote();
    }