Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 67dcc69b authored by Chia-I Wu's avatar Chia-I Wu
Browse files

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
parent da5c7307
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -118,6 +118,8 @@ BufferLayerConsumer::BufferLayerConsumer(const sp<IGraphicBufferConsumer>& bq, u
        mCurrentTimestamp(0),
        mCurrentDataSpace(HAL_DATASPACE_UNKNOWN),
        mCurrentFrameNumber(0),
        mCurrentTransformToDisplayInverse(false),
        mCurrentSurfaceDamage(),
        mDefaultWidth(1),
        mDefaultHeight(1),
        mFilteringEnabled(true),
@@ -397,6 +399,8 @@ status_t BufferLayerConsumer::updateAndReleaseLocked(const BufferItem& item,
    mCurrentFence = item.mFence;
    mCurrentFenceTime = item.mFenceTime;
    mCurrentFrameNumber = item.mFrameNumber;
    mCurrentTransformToDisplayInverse = item.mTransformToDisplayInverse;
    mCurrentSurfaceDamage = item.mSurfaceDamage;

    computeCurrentTransformMatrixLocked();

@@ -547,6 +551,15 @@ uint64_t BufferLayerConsumer::getFrameNumber() {
    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);

+14 −0
Original line number Diff line number Diff line
@@ -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 @@ public:
    // 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 @@ private:
    // 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
+0 −20
Original line number Diff line number Diff line
@@ -40,26 +40,6 @@ status_t SurfaceFlingerConsumer::bindTextureImage()
    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;
+1 −19
Original line number Diff line number Diff line
@@ -34,31 +34,13 @@ class SurfaceFlingerConsumer : public BufferLayerConsumer {
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;
};

// ----------------------------------------------------------------------------