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

Commit 64b83133 authored by Sergio Giro's avatar Sergio Giro Committed by Gerrit Code Review
Browse files

Merge "Remove usage of SharedBuffer"

parents ad2a1592 f53f3c80
Loading
Loading
Loading
Loading
+0 −5
Original line number Diff line number Diff line
@@ -130,11 +130,6 @@ public:
    // Region object.
    Rect const* getArray(size_t* count) const;

    // returns a SharedBuffer as well as the number of rects.
    // ownership is transfered to the caller.
    // the caller must call SharedBuffer::release() to free the memory.
    SharedBuffer const* getSharedBuffer(size_t* count) const;

    /* no user serviceable parts here... */

            // add a rectangle to the internal list. This rectangle must
+0 −12
Original line number Diff line number Diff line
@@ -835,18 +835,6 @@ Rect const* Region::getArray(size_t* count) const {
    return begin();
}

SharedBuffer const* Region::getSharedBuffer(size_t* count) const {
    // We can get to the SharedBuffer of a Vector<Rect> because Rect has
    // a trivial destructor.
    SharedBuffer const* sb = SharedBuffer::bufferFromData(mStorage.array());
    if (count) {
        size_t numRects = isRect() ? 1 : mStorage.size() - 1;
        count[0] = numRects;
    }
    sb->acquire();
    return sb;
}

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

void Region::dump(String8& out, const char* what, uint32_t /* flags */) const
+13 −28
Original line number Diff line number Diff line
@@ -1017,12 +1017,10 @@ public:
        }
    }
    virtual void setVisibleRegionScreen(const Region& reg) {
        // Region::getSharedBuffer creates a reference to the underlying
        // SharedBuffer of this Region, this reference is freed
        // in onDisplayed()
        hwc_region_t& visibleRegion = getLayer()->visibleRegionScreen;
        SharedBuffer const* sb = reg.getSharedBuffer(&visibleRegion.numRects);
        visibleRegion.rects = reinterpret_cast<hwc_rect_t const *>(sb->data());
        mVisibleRegion = reg;
        visibleRegion.rects = reinterpret_cast<hwc_rect_t const *>(
                mVisibleRegion.getArray(&visibleRegion.numRects));
    }
    virtual void setSurfaceDamage(const Region& reg) {
        if (!hwcHasApiVersion(mHwc, HWC_DEVICE_API_VERSION_1_5)) {
@@ -1036,8 +1034,9 @@ public:
            surfaceDamage.rects = NULL;
            return;
        }
        SharedBuffer const* sb = reg.getSharedBuffer(&surfaceDamage.numRects);
        surfaceDamage.rects = reinterpret_cast<hwc_rect_t const *>(sb->data());
        mSurfaceDamage = reg;
        surfaceDamage.rects = reinterpret_cast<hwc_rect_t const *>(
                mSurfaceDamage.getArray(&surfaceDamage.numRects));
    }
    virtual void setSidebandStream(const sp<NativeHandle>& stream) {
        ALOG_ASSERT(stream->handle() != NULL);
@@ -1059,29 +1058,15 @@ public:
        }
    }
    virtual void onDisplayed() {
        hwc_region_t& visibleRegion = getLayer()->visibleRegionScreen;
        SharedBuffer const* sb = SharedBuffer::bufferFromData(visibleRegion.rects);
        if (sb) {
            sb->release();
            // not technically needed but safer
            visibleRegion.numRects = 0;
            visibleRegion.rects = NULL;
        }

        getLayer()->acquireFenceFd = -1;

        if (!hwcHasApiVersion(mHwc, HWC_DEVICE_API_VERSION_1_5)) {
            return;
    }

        hwc_region_t& surfaceDamage = getLayer()->surfaceDamage;
        sb = SharedBuffer::bufferFromData(surfaceDamage.rects);
        if (sb) {
            sb->release();
            surfaceDamage.numRects = 0;
            surfaceDamage.rects = NULL;
        }
    }
protected:
    // We need to hold "copies" of these for memory management purposes. The
    // actual hwc_layer_1_t holds pointers to the memory within. Vector<>
    // internally doesn't copy the memory unless one of the copies is modified.
    Region mVisibleRegion;
    Region mSurfaceDamage;
};

/*