diff options
| author | 2015-09-23 16:22:55 +0000 | |
|---|---|---|
| committer | 2015-09-23 16:22:55 +0000 | |
| commit | 64b83133d5ec40828a10e57cfbb37c642bb7f510 (patch) | |
| tree | 1e29897d4d8aa01c0bd1b82bcd928fb25f9c697c | |
| parent | ad2a1592cf01a5393ad645fea81b6c36ee11f73e (diff) | |
| parent | f53f3c80bf2dcf6c1b70320765f9fc8019b829a2 (diff) | |
Merge "Remove usage of SharedBuffer"
| -rw-r--r-- | include/ui/Region.h | 5 | ||||
| -rw-r--r-- | libs/ui/Region.cpp | 12 | ||||
| -rw-r--r-- | services/surfaceflinger/DisplayHardware/HWComposer.cpp | 41 |
3 files changed, 13 insertions, 45 deletions
diff --git a/include/ui/Region.h b/include/ui/Region.h index 2a1491837d..e9b3a0bad7 100644 --- a/include/ui/Region.h +++ b/include/ui/Region.h @@ -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 diff --git a/libs/ui/Region.cpp b/libs/ui/Region.cpp index 3810da4049..a3558bd5c2 100644 --- a/libs/ui/Region.cpp +++ b/libs/ui/Region.cpp @@ -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 diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp index 2dad005171..3208990459 100644 --- a/services/surfaceflinger/DisplayHardware/HWComposer.cpp +++ b/services/surfaceflinger/DisplayHardware/HWComposer.cpp @@ -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; }; /* |