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

Commit f64e75d2 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

Change-Id: I14c99a3137f086eca4e1c1ab2f8877ae6df88a4a
parents 40da4609 fb672ba3
Loading
Loading
Loading
Loading
+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
+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;
}

+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();
    }