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

Commit fd5f41be authored by Dan Stoza's avatar Dan Stoza Committed by Gerrit Code Review
Browse files

Merge "libgui: Pass surface damage through BufferQueue"

parents 4d769d8b 5065a552
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@
#include <EGL/eglext.h>

#include <ui/Rect.h>
#include <ui/Region.h>

#include <system/graphics.h>

@@ -106,6 +107,10 @@ class BufferItem : public Flattenable<BufferItem> {
    // Indicates this buffer must be transformed by the inverse transform of the screen
    // it is displayed onto. This is applied after mTransform.
    bool mTransformToDisplayInverse;

    // Describes the portion of the surface that has been modified since the
    // previous frame
    Region mSurfaceDamage;
};

} // namespace android
+6 −1
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@
#include <ui/Fence.h>
#include <ui/GraphicBuffer.h>
#include <ui/Rect.h>
#include <ui/Region.h>

namespace android {
// ----------------------------------------------------------------------------
@@ -281,7 +282,7 @@ public:
                : timestamp(timestamp), isAutoTimestamp(isAutoTimestamp),
                  dataSpace(dataSpace), crop(crop), scalingMode(scalingMode),
                  transform(transform), stickyTransform(sticky),
                  async(async), fence(fence) { }
                  async(async), fence(fence), surfaceDamage() { }
        inline void deflate(int64_t* outTimestamp, bool* outIsAutoTimestamp,
                android_dataspace* outDataSpace,
                Rect* outCrop, int* outScalingMode,
@@ -306,6 +307,9 @@ public:
        status_t flatten(void*& buffer, size_t& size, int*& fds, size_t& count) const;
        status_t unflatten(void const*& buffer, size_t& size, int const*& fds, size_t& count);

        const Region& getSurfaceDamage() const { return surfaceDamage; }
        void setSurfaceDamage(const Region& damage) { surfaceDamage = damage; }

    private:
        int64_t timestamp;
        int isAutoTimestamp;
@@ -316,6 +320,7 @@ public:
        uint32_t stickyTransform;
        int async;
        sp<Fence> fence;
        Region surfaceDamage;
    };

    // QueueBufferOutput must be a POD structure
+8 −1
Original line number Diff line number Diff line
@@ -147,6 +147,7 @@ private:
    int dispatchUnlockAndPost(va_list args);
    int dispatchSetSidebandStream(va_list args);
    int dispatchSetBuffersDataSpace(va_list args);
    int dispatchSetSurfaceDamage(va_list args);

protected:
    virtual int dequeueBuffer(ANativeWindowBuffer** buffer, int* fenceFd);
@@ -171,6 +172,7 @@ protected:
    virtual int setBuffersDataSpace(android_dataspace dataSpace);
    virtual int setCrop(Rect const* rect);
    virtual int setUsage(uint32_t reqUsage);
    virtual void setSurfaceDamage(android_native_rect_t* rects, size_t numRects);

public:
    virtual int lock(ANativeWindow_Buffer* outBuffer, ARect* inOutDirtyBounds);
@@ -296,7 +298,12 @@ private:
    sp<GraphicBuffer>           mPostedBuffer;
    bool                        mConnectedToCpu;

    // must be accessed from lock/unlock thread only
    // In the lock/unlock context, this reflects the region that the producer
    // wished to update and whether the Surface was able to copy the previous
    // buffer back to allow a partial update.
    //
    // In the dequeue/queue context, this reflects the surface damage (the
    // damage since the last frame) passed in by the producer.
    Region mDirtyRegion;
};

+2 −0
Original line number Diff line number Diff line
@@ -31,6 +31,8 @@ class Rect : public ARect, public LightFlattenablePod<Rect>
public:
    typedef ARect::value_type value_type;

    static const Rect INVALID_RECT;

    // we don't provide copy-ctor and operator= on purpose
    // because we want the compiler generated versions

+2 −0
Original line number Diff line number Diff line
@@ -35,6 +35,8 @@ class String8;
class Region : public LightFlattenable<Region>
{
public:
    static const Region INVALID_REGION;

                        Region();
                        Region(const Region& rhs);
    explicit            Region(const Rect& rhs);
Loading