surfaceflinger: move all SurfaceFlingerConsumer data members
Move them and related methods to the base class,
BufferLayerConsumer.
This also moves the latching of mTransformToDisplayInverse and
mSurfaceDamage from acquireBufferLocked to updateAndReleaseLocked,
where LayerRejecter might reject the buffer and return early.
Test: boots
Change-Id: Ib76e8f42a9f9dbe807ba8b335746de561dd98851
diff --git a/services/surfaceflinger/BufferLayerConsumer.cpp b/services/surfaceflinger/BufferLayerConsumer.cpp
index 110b7de..3ebc959 100644
--- a/services/surfaceflinger/BufferLayerConsumer.cpp
+++ b/services/surfaceflinger/BufferLayerConsumer.cpp
@@ -118,6 +118,8 @@
mCurrentTimestamp(0),
mCurrentDataSpace(HAL_DATASPACE_UNKNOWN),
mCurrentFrameNumber(0),
+ mCurrentTransformToDisplayInverse(false),
+ mCurrentSurfaceDamage(),
mDefaultWidth(1),
mDefaultHeight(1),
mFilteringEnabled(true),
@@ -397,6 +399,8 @@
mCurrentFence = item.mFence;
mCurrentFenceTime = item.mFenceTime;
mCurrentFrameNumber = item.mFrameNumber;
+ mCurrentTransformToDisplayInverse = item.mTransformToDisplayInverse;
+ mCurrentSurfaceDamage = item.mSurfaceDamage;
computeCurrentTransformMatrixLocked();
@@ -547,6 +551,15 @@
return mCurrentFrameNumber;
}
+bool BufferLayerConsumer::getTransformToDisplayInverse() const {
+ Mutex::Autolock lock(mMutex);
+ return mCurrentTransformToDisplayInverse;
+}
+
+const Region& BufferLayerConsumer::getSurfaceDamage() const {
+ return mCurrentSurfaceDamage;
+}
+
sp<GraphicBuffer> BufferLayerConsumer::getCurrentBuffer(int* outSlot) const {
Mutex::Autolock lock(mMutex);
diff --git a/services/surfaceflinger/BufferLayerConsumer.h b/services/surfaceflinger/BufferLayerConsumer.h
index 0da73d1..4f8e5fa 100644
--- a/services/surfaceflinger/BufferLayerConsumer.h
+++ b/services/surfaceflinger/BufferLayerConsumer.h
@@ -25,6 +25,7 @@
#include <ui/FenceTime.h>
#include <ui/GraphicBuffer.h>
+#include <ui/Region.h>
#include <utils/String8.h>
#include <utils/Vector.h>
@@ -143,6 +144,11 @@
// the BufferQueue associated with this consumer.
uint64_t getFrameNumber();
+ bool getTransformToDisplayInverse() const;
+
+ // must be called from SF main thread
+ const Region& getSurfaceDamage() const;
+
// setDefaultBufferSize is used to set the size of buffers returned by
// requestBuffers when a with and height of zero is requested.
// A call to setDefaultBufferSize() may trigger requestBuffers() to
@@ -355,6 +361,14 @@
// It gets set each time updateTexImage is called.
uint64_t mCurrentFrameNumber;
+ // 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.
+ bool mCurrentTransformToDisplayInverse;
+
+ // The portion of this surface that has changed since the previous frame
+ Region mCurrentSurfaceDamage;
+
uint32_t mDefaultWidth, mDefaultHeight;
// mFilteringEnabled indicates whether the transform matrix is computed for
diff --git a/services/surfaceflinger/SurfaceFlingerConsumer.cpp b/services/surfaceflinger/SurfaceFlingerConsumer.cpp
index 1bb9028..8b64932 100644
--- a/services/surfaceflinger/SurfaceFlingerConsumer.cpp
+++ b/services/surfaceflinger/SurfaceFlingerConsumer.cpp
@@ -40,26 +40,6 @@
return bindTextureImageLocked();
}
-status_t SurfaceFlingerConsumer::acquireBufferLocked(BufferItem* item,
- nsecs_t presentWhen, uint64_t maxFrameNumber) {
- status_t result = BufferLayerConsumer::acquireBufferLocked(item, presentWhen,
- maxFrameNumber);
- if (result == NO_ERROR) {
- mTransformToDisplayInverse = item->mTransformToDisplayInverse;
- mSurfaceDamage = item->mSurfaceDamage;
- }
- return result;
-}
-
-bool SurfaceFlingerConsumer::getTransformToDisplayInverse() const {
- Mutex::Autolock lock(mMutex);
- return mTransformToDisplayInverse;
-}
-
-const Region& SurfaceFlingerConsumer::getSurfaceDamage() const {
- return mSurfaceDamage;
-}
-
sp<Fence> SurfaceFlingerConsumer::getPrevFinalReleaseFence() const {
Mutex::Autolock lock(mMutex);
return ConsumerBase::mPrevFinalReleaseFence;
diff --git a/services/surfaceflinger/SurfaceFlingerConsumer.h b/services/surfaceflinger/SurfaceFlingerConsumer.h
index f4c594a..bea5fcb 100644
--- a/services/surfaceflinger/SurfaceFlingerConsumer.h
+++ b/services/surfaceflinger/SurfaceFlingerConsumer.h
@@ -34,31 +34,13 @@
public:
SurfaceFlingerConsumer(const sp<IGraphicBufferConsumer>& consumer,
uint32_t tex, Layer* layer)
- : BufferLayerConsumer(consumer, tex, layer),
- mTransformToDisplayInverse(false), mSurfaceDamage()
+ : BufferLayerConsumer(consumer, tex, layer)
{}
- virtual status_t acquireBufferLocked(BufferItem *item, nsecs_t presentWhen,
- uint64_t maxFrameNumber = 0) override;
-
// See BufferLayerConsumer::bindTextureImageLocked().
status_t bindTextureImage();
- bool getTransformToDisplayInverse() const;
-
- // must be called from SF main thread
- const Region& getSurfaceDamage() const;
-
sp<Fence> getPrevFinalReleaseFence() const;
-
-private:
- // 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.
- bool mTransformToDisplayInverse;
-
- // The portion of this surface that has changed since the previous frame
- Region mSurfaceDamage;
};
// ----------------------------------------------------------------------------