diff options
author | 2017-11-27 14:51:06 -0800 | |
---|---|---|
committer | 2017-12-11 11:11:27 -0800 | |
commit | fd257f86996bcf510be5f858e1ce2f8986e63435 (patch) | |
tree | cec4aa4cd4d1ae680a665a9dfe514c71f8e9c16a | |
parent | c75c44d3e7237facad8b29696260cafaa8b85763 (diff) |
surfaceflinger: move SurfaceFlingerConsumer::mContentsChangedListener
Move it and related methods to the base class, BufferLayerConsumer.
Test: boots
Change-Id: I8d92e3fa74681198457c61ad82546d7e5a8f18a6
-rw-r--r-- | services/surfaceflinger/BufferLayerConsumer.cpp | 24 | ||||
-rw-r--r-- | services/surfaceflinger/BufferLayerConsumer.h | 11 | ||||
-rw-r--r-- | services/surfaceflinger/SurfaceFlingerConsumer.cpp | 25 | ||||
-rw-r--r-- | services/surfaceflinger/SurfaceFlingerConsumer.h | 12 |
4 files changed, 34 insertions, 38 deletions
diff --git a/services/surfaceflinger/BufferLayerConsumer.cpp b/services/surfaceflinger/BufferLayerConsumer.cpp index ae3c96c48e..0303d94340 100644 --- a/services/surfaceflinger/BufferLayerConsumer.cpp +++ b/services/surfaceflinger/BufferLayerConsumer.cpp @@ -143,6 +143,12 @@ status_t BufferLayerConsumer::setDefaultBufferSize(uint32_t w, uint32_t h) { return mConsumer->setDefaultBufferSize(w, h); } +void BufferLayerConsumer::setContentsChangedListener(const wp<ContentsChangedListener>& listener) { + setFrameAvailableListener(listener); + Mutex::Autolock lock(mMutex); + mContentsChangedListener = listener; +} + status_t BufferLayerConsumer::updateTexImage() { ATRACE_CALL(); BLC_LOGV("updateTexImage"); @@ -549,6 +555,24 @@ void BufferLayerConsumer::onDisconnect() { } } +void BufferLayerConsumer::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(unsafeFrameAvailableListener == mContentsChangedListener.unsafe_get()); + listener = mContentsChangedListener.promote(); + } + + if (listener != NULL) { + listener->onSidebandStreamChanged(); + } +} + void BufferLayerConsumer::addAndGetFrameTimestamps(const NewFrameEventsEntry* newTimestamps, FrameEventHistoryDelta* outDelta) { sp<Layer> l = mLayer.promote(); diff --git a/services/surfaceflinger/BufferLayerConsumer.h b/services/surfaceflinger/BufferLayerConsumer.h index f8da6bf0ae..b8b3874c66 100644 --- a/services/surfaceflinger/BufferLayerConsumer.h +++ b/services/surfaceflinger/BufferLayerConsumer.h @@ -54,13 +54,19 @@ class String8; */ class BufferLayerConsumer : public ConsumerBase { public: - typedef ConsumerBase::FrameAvailableListener FrameAvailableListener; + struct ContentsChangedListener : public FrameAvailableListener { + virtual void onSidebandStreamChanged() = 0; + }; // BufferLayerConsumer constructs a new BufferLayerConsumer object. // The tex parameter indicates the name of the OpenGL ES // texture to which images are to be streamed. BufferLayerConsumer(const sp<IGraphicBufferConsumer>& bq, uint32_t tex, Layer* layer); + // Sets the contents changed listener. This should be used instead of + // ConsumerBase::setFrameAvailableListener(). + void setContentsChangedListener(const wp<ContentsChangedListener>& listener); + // updateTexImage acquires the most recently queued buffer, and sets the // image contents of the target texture to it. // @@ -257,6 +263,7 @@ private: // IConsumerListener interface void onDisconnect() override; + void onSidebandStreamChanged() override; void addAndGetFrameTimestamps(const NewFrameEventsEntry* newTimestamps, FrameEventHistoryDelta* outDelta) override; @@ -341,6 +348,8 @@ private: // The layer for this BufferLayerConsumer const wp<Layer> mLayer; + wp<ContentsChangedListener> mContentsChangedListener; + // EGLSlot contains the information and object references that // BufferLayerConsumer maintains about a BufferQueue buffer slot. struct EglSlot { diff --git a/services/surfaceflinger/SurfaceFlingerConsumer.cpp b/services/surfaceflinger/SurfaceFlingerConsumer.cpp index 769825d24c..38b00579d0 100644 --- a/services/surfaceflinger/SurfaceFlingerConsumer.cpp +++ b/services/surfaceflinger/SurfaceFlingerConsumer.cpp @@ -219,31 +219,6 @@ bool SurfaceFlingerConsumer::releasePendingBuffer() return true; } -void SurfaceFlingerConsumer::setContentsChangedListener( - const wp<ContentsChangedListener>& listener) { - setFrameAvailableListener(listener); - Mutex::Autolock lock(mMutex); - mContentsChangedListener = listener; -} - -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(unsafeFrameAvailableListener == mContentsChangedListener.unsafe_get()); - listener = mContentsChangedListener.promote(); - } - - if (listener != NULL) { - listener->onSidebandStreamChanged(); - } -} - // --------------------------------------------------------------------------- }; // namespace android diff --git a/services/surfaceflinger/SurfaceFlingerConsumer.h b/services/surfaceflinger/SurfaceFlingerConsumer.h index 9eb53519a2..3a6beaed62 100644 --- a/services/surfaceflinger/SurfaceFlingerConsumer.h +++ b/services/surfaceflinger/SurfaceFlingerConsumer.h @@ -34,10 +34,6 @@ class SurfaceFlingerConsumer : public BufferLayerConsumer { public: static const status_t BUFFER_REJECTED = UNKNOWN_ERROR + 8; - struct ContentsChangedListener: public FrameAvailableListener { - virtual void onSidebandStreamChanged() = 0; - }; - SurfaceFlingerConsumer(const sp<IGraphicBufferConsumer>& consumer, uint32_t tex, Layer* layer) : BufferLayerConsumer(consumer, tex, layer), @@ -72,10 +68,6 @@ public: // must be called from SF main thread const Region& getSurfaceDamage() const; - // Sets the contents changed listener. This should be used instead of - // ConsumerBase::setFrameAvailableListener(). - void setContentsChangedListener(const wp<ContentsChangedListener>& listener); - nsecs_t computeExpectedPresent(const DispSync& dispSync); sp<Fence> getPrevFinalReleaseFence() const; @@ -83,10 +75,6 @@ public: bool releasePendingBuffer(); private: - virtual void onSidebandStreamChanged(); - - wp<ContentsChangedListener> mContentsChangedListener; - // Indicates this buffer must be transformed by the inverse transform of the screen // it is displayed onto. This is applied after BufferLayerConsumer::mCurrentTransform. // This must be set/read from SurfaceFlinger's main thread. |