diff options
author | Mathias Agopian <mathias@google.com> | 2010-04-15 14:57:39 -0700 |
---|---|---|
committer | Mathias Agopian <mathias@google.com> | 2010-04-15 15:23:25 -0700 |
commit | 5629eb167638a9ebfa5059177d227c7ac67db46f (patch) | |
tree | c5a922a844ec13a0a5c16c639ae0c309be17e8cd /libs/ui | |
parent | 27f962f985eea0157922ebe80c44efbf6889725d (diff) | |
download | frameworks_native-5629eb167638a9ebfa5059177d227c7ac67db46f.zip frameworks_native-5629eb167638a9ebfa5059177d227c7ac67db46f.tar.gz frameworks_native-5629eb167638a9ebfa5059177d227c7ac67db46f.tar.bz2 |
when a zero dimension buffer is allocated, turn the allocation into
a 1x1 buffer instead of Nx1 (or 1xN)
Change-Id: I27eeb15e83e13002dd9405f4e52b54f7dffc0fe7
Diffstat (limited to 'libs/ui')
-rw-r--r-- | libs/ui/GraphicBufferAllocator.cpp | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/libs/ui/GraphicBufferAllocator.cpp b/libs/ui/GraphicBufferAllocator.cpp index 6ae7e74..d51664d 100644 --- a/libs/ui/GraphicBufferAllocator.cpp +++ b/libs/ui/GraphicBufferAllocator.cpp @@ -15,6 +15,8 @@ ** limitations under the License. */ +#define LOG_TAG "GraphicBufferAllocator" + #include <cutils/log.h> #include <utils/Singleton.h> @@ -61,9 +63,9 @@ void GraphicBufferAllocator::dump(String8& result) const const size_t c = list.size(); for (size_t i=0 ; i<c ; i++) { const alloc_rec_t& rec(list.valueAt(i)); - snprintf(buffer, SIZE, "%10p: %7.2f KiB | %4u x %4u | %2d | 0x%08x\n", + snprintf(buffer, SIZE, "%10p: %7.2f KiB | %4u (%4u) x %4u | %2d | 0x%08x\n", list.keyAt(i), rec.size/1024.0f, - rec.w, rec.h, rec.format, rec.usage); + rec.w, rec.s, rec.h, rec.format, rec.usage); result.append(buffer); total += rec.size; } @@ -71,16 +73,13 @@ void GraphicBufferAllocator::dump(String8& result) const result.append(buffer); } -static inline uint32_t clamp(uint32_t c) { - return c>0 ? c : 1; -} - status_t GraphicBufferAllocator::alloc(uint32_t w, uint32_t h, PixelFormat format, int usage, buffer_handle_t* handle, int32_t* stride) { - // make sure to not allocate a 0 x 0 buffer - w = clamp(w); - h = clamp(h); + // make sure to not allocate a N x 0 or 0 x N buffer, since this is + // allowed from an API stand-point allocate a 1x1 buffer instead. + if (!w || !h) + w = h = 1; // we have a h/w allocator and h/w buffer is requested status_t err; @@ -100,9 +99,9 @@ status_t GraphicBufferAllocator::alloc(uint32_t w, uint32_t h, PixelFormat forma alloc_rec_t rec; rec.w = w; rec.h = h; + rec.s = *stride; rec.format = format; rec.usage = usage; - rec.vaddr = 0; rec.size = h * stride[0] * bytesPerPixel(format); list.add(*handle, rec); } else { |