summaryrefslogtreecommitdiffstats
path: root/libs/ui
diff options
context:
space:
mode:
authorDan Stoza <stoza@google.com>2015-04-16 17:28:43 -0700
committerDan Stoza <stoza@google.com>2015-04-23 15:28:12 -0700
commit9de7293b0a1b01ebe6fb1ab4a498f144adc8029f (patch)
treef8ee5b60b00fb545ea324e94fdb4b246b0943f16 /libs/ui
parent0de7ea752900b5da29ad19c2799040235477f3c5 (diff)
downloadframeworks_native-9de7293b0a1b01ebe6fb1ab4a498f144adc8029f.zip
frameworks_native-9de7293b0a1b01ebe6fb1ab4a498f144adc8029f.tar.gz
frameworks_native-9de7293b0a1b01ebe6fb1ab4a498f144adc8029f.tar.bz2
libgui: Allow an IGBProducer to disable allocation
Adds a new method IGBP::allowAllocation, which controls whether dequeueBuffer is permitted to allocate a new buffer. If allocation is disallowed, dequeueBuffer will block or return an error as it normally would (as controlled by *ControlledByApp). If there are free buffers, but they are not of the correct dimensions, format, or usage, they may be freed if a more suitable buffer is not found first. Bug: 19801715 Change-Id: I0d604958b78b2fd775c2547690301423f9a52165
Diffstat (limited to 'libs/ui')
-rw-r--r--libs/ui/GraphicBuffer.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/libs/ui/GraphicBuffer.cpp b/libs/ui/GraphicBuffer.cpp
index 638ac62..d51d514 100644
--- a/libs/ui/GraphicBuffer.cpp
+++ b/libs/ui/GraphicBuffer.cpp
@@ -152,6 +152,16 @@ status_t GraphicBuffer::reallocate(uint32_t inWidth, uint32_t inHeight,
return initSize(inWidth, inHeight, inFormat, inUsage);
}
+bool GraphicBuffer::needsReallocation(uint32_t inWidth, uint32_t inHeight,
+ PixelFormat inFormat, uint32_t inUsage)
+{
+ if (static_cast<int>(inWidth) != width) return true;
+ if (static_cast<int>(inHeight) != height) return true;
+ if (inFormat != format) return true;
+ if ((static_cast<uint32_t>(usage) & inUsage) != inUsage) return true;
+ return false;
+}
+
status_t GraphicBuffer::initSize(uint32_t inWidth, uint32_t inHeight,
PixelFormat inFormat, uint32_t inUsage)
{