diff options
| -rw-r--r-- | include/gui/ConsumerBase.h | 4 | ||||
| -rw-r--r-- | libs/binder/tests/Android.bp | 17 | ||||
| -rw-r--r-- | libs/gui/ConsumerBase.cpp | 6 | ||||
| -rwxr-xr-x | services/surfaceflinger/Layer.cpp | 1 | ||||
| -rw-r--r-- | services/surfaceflinger/SurfaceFlingerConsumer.cpp | 7 |
5 files changed, 29 insertions, 6 deletions
diff --git a/include/gui/ConsumerBase.h b/include/gui/ConsumerBase.h index d1a9b04ad6..e9fc8fd1ea 100644 --- a/include/gui/ConsumerBase.h +++ b/include/gui/ConsumerBase.h @@ -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 diff --git a/libs/binder/tests/Android.bp b/libs/binder/tests/Android.bp index bef9505821..3071408540 100644 --- a/libs/binder/tests/Android.bp +++ b/libs/binder/tests/Android.bp @@ -42,6 +42,23 @@ cc_test { } cc_test { + name: "binderLibTest_IPC_32", + srcs: ["binderLibTest.cpp"], + shared_libs: [ + "libbinder", + "libutils", + ], + compile_multilib: "32", + cflags: ["-DBINDER_IPC_32BIT=1"], +} + +cc_test { + product_variables: { + binder32bit: { + cflags: ["-DBINDER_IPC_32BIT=1"], + }, + }, + name: "binderLibTest", srcs: ["binderLibTest.cpp"], shared_libs: [ diff --git a/libs/gui/ConsumerBase.cpp b/libs/gui/ConsumerBase.cpp index c2b10a91dd..3d3637648c 100644 --- a/libs/gui/ConsumerBase.cpp +++ b/libs/gui/ConsumerBase.cpp @@ -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; } diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp index b4d6dcaff9..32a729bcd0 100755 --- a/services/surfaceflinger/Layer.cpp +++ b/services/surfaceflinger/Layer.cpp @@ -1947,7 +1947,6 @@ void Layer::deferTransactionUntil(const sp<Layer>& barrierLayer, mCurrentState.barrierLayer = nullptr; mCurrentState.frameNumber = 0; mCurrentState.modified = false; - ALOGE("Deferred transaction"); } void Layer::deferTransactionUntil(const sp<IBinder>& barrierHandle, diff --git a/services/surfaceflinger/SurfaceFlingerConsumer.cpp b/services/surfaceflinger/SurfaceFlingerConsumer.cpp index 9babeef87f..abc8fde26b 100644 --- a/services/surfaceflinger/SurfaceFlingerConsumer.cpp +++ b/services/surfaceflinger/SurfaceFlingerConsumer.cpp @@ -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(); } |