summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergio Giro <sgiro@google.com>2015-09-23 17:14:38 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2015-09-23 17:14:38 +0000
commitf1519eeb21ee03a956d973545f9f0f742727faaa (patch)
tree1fe58827b0b4bbb4f1240296cdbfa7256217c258
parentc6a6c6de7c43198dc93f92f935ebc120de1050c8 (diff)
parent64b83133d5ec40828a10e57cfbb37c642bb7f510 (diff)
downloadnative-f1519eeb21ee03a956d973545f9f0f742727faaa.tar.gz
am 64b83133: Merge "Remove usage of SharedBuffer"
* commit '64b83133d5ec40828a10e57cfbb37c642bb7f510': Remove usage of SharedBuffer
-rw-r--r--include/ui/Region.h5
-rw-r--r--libs/ui/Region.cpp12
-rw-r--r--services/surfaceflinger/DisplayHardware/HWComposer.cpp41
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;
};
/*