diff options
author | Sergio Giro <sgiro@google.com> | 2015-09-23 17:14:38 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2015-09-23 17:14:38 +0000 |
commit | f1519eeb21ee03a956d973545f9f0f742727faaa (patch) | |
tree | 1fe58827b0b4bbb4f1240296cdbfa7256217c258 | |
parent | c6a6c6de7c43198dc93f92f935ebc120de1050c8 (diff) | |
parent | 64b83133d5ec40828a10e57cfbb37c642bb7f510 (diff) | |
download | native-f1519eeb21ee03a956d973545f9f0f742727faaa.tar.gz |
am 64b83133: Merge "Remove usage of SharedBuffer"
* commit '64b83133d5ec40828a10e57cfbb37c642bb7f510':
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; }; /* |