summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Chia-I Wu <olv@google.com> 2017-11-27 14:51:06 -0800
committer Chia-I Wu <olv@google.com> 2017-12-11 11:11:27 -0800
commitfd257f86996bcf510be5f858e1ce2f8986e63435 (patch)
treecec4aa4cd4d1ae680a665a9dfe514c71f8e9c16a
parentc75c44d3e7237facad8b29696260cafaa8b85763 (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.cpp24
-rw-r--r--services/surfaceflinger/BufferLayerConsumer.h11
-rw-r--r--services/surfaceflinger/SurfaceFlingerConsumer.cpp25
-rw-r--r--services/surfaceflinger/SurfaceFlingerConsumer.h12
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.