diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2017-06-29 04:45:21 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2017-06-29 04:45:21 +0000 |
commit | 7d951867416234a6f3228eb9d888009184b1d0b7 (patch) | |
tree | b2f9160912cef014ebaa21fd2772f5e9f64ed71a | |
parent | 11b9a24d51f5c4b95185a13fc46481a05b0a5274 (diff) | |
parent | 9640da6f89e18e095ff4e1d21feb812a24fd1a32 (diff) | |
download | native-7d951867416234a6f3228eb9d888009184b1d0b7.tar.gz |
Merge cherrypicks of [2476230, 2476289, 2476272, 2476118, 2475997, 2476251, 2476119, 2476341, 2476252, 2476290, 2476232, 2476274, 2475999, 2476343, 2476275, 2476216, 2476381, 2476256, 2476000, 2476362, 2476345, 2476364, 2476234, 2476346, 2476347, 2476365, 2476276, 2476219, 2476277, 2476402, 2476348, 2476235, 2476383, 2476257, 2476278, 2476236, 2476350, 2476351, 2476307, 2476403, 2476308, 2476258] into oc-releaseandroid-cts-8.0_r1android-8.0.0_r9android-8.0.0_r7android-8.0.0_r4android-8.0.0_r36android-8.0.0_r32android-8.0.0_r31android-8.0.0_r3android-8.0.0_r2android-8.0.0_r17android-8.0.0_r16android-8.0.0_r12android-8.0.0_r11android-8.0.0_r10android-8.0.0_r1oreo-r6-releaseoreo-r5-release
Change-Id: I5b1cb51778ddfc1e3cbfca5da0b4662eb0e1280c
-rw-r--r-- | include/gui/ConsumerBase.h | 4 | ||||
-rw-r--r-- | libs/gui/ConsumerBase.cpp | 6 | ||||
-rw-r--r-- | services/surfaceflinger/Layer.cpp | 1 | ||||
-rw-r--r-- | services/surfaceflinger/SurfaceFlingerConsumer.cpp | 7 |
4 files changed, 12 insertions, 6 deletions
diff --git a/include/gui/ConsumerBase.h b/include/gui/ConsumerBase.h index 7912528ba7..891290bd42 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/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 022b41634d..88a5bd4a06 100644 --- 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(); } |