diff options
author | 2025-02-21 21:07:04 +0000 | |
---|---|---|
committer | 2025-02-24 15:53:28 +0000 | |
commit | f6a8037cfa313a8df444791bb11835473653379e (patch) | |
tree | fb96b932c021e5b6a61c2d2967bd78a3f50bc10e /libs/gui/BufferItemConsumer.cpp | |
parent | f4fb32873ebb31905bc7369ee09baaf304dad97d (diff) |
BufferItemConsumer: Make creation calls flag-agnostic
It's really annoying to work with these right now since clients have to
juggle two flag-guarded constructors. Instead, add a static create
function that returns a BIC and a Surface.
Also removes flag guards around ConsumerBase::setConsumerIsProtected,
which was never necessary and makes it possible to migrate clients away
from this flag in their code.
BYPASS_IGBP_IGBC_API_REASON=warren buffers
Bug: 398822412
Flag: EXEMPT refactor
Test: compiles, presubmit
Change-Id: I045a8ba804928623fcf7c430be245fd6f2e70bb1
Diffstat (limited to 'libs/gui/BufferItemConsumer.cpp')
-rw-r--r-- | libs/gui/BufferItemConsumer.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/libs/gui/BufferItemConsumer.cpp b/libs/gui/BufferItemConsumer.cpp index 8566419435..1585aae45c 100644 --- a/libs/gui/BufferItemConsumer.cpp +++ b/libs/gui/BufferItemConsumer.cpp @@ -24,6 +24,7 @@ #include <com_android_graphics_libgui_flags.h> #include <gui/BufferItem.h> #include <gui/BufferItemConsumer.h> +#include <gui/Surface.h> #include <ui/BufferQueueDefs.h> #include <ui/GraphicBuffer.h> @@ -35,6 +36,30 @@ namespace android { +std::tuple<sp<BufferItemConsumer>, sp<Surface>> BufferItemConsumer::create( + uint64_t consumerUsage, int bufferCount, bool controlledByApp, + bool isConsumerSurfaceFlinger) { +#if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) + sp<BufferItemConsumer> bufferItemConsumer = + sp<BufferItemConsumer>::make(consumerUsage, bufferCount, controlledByApp, + isConsumerSurfaceFlinger); + return {bufferItemConsumer, bufferItemConsumer->getSurface()}; +#else + sp<IGraphicBufferProducer> igbp; + sp<IGraphicBufferConsumer> igbc; + BufferQueue::createBufferQueue(&igbp, &igbc, isConsumerSurfaceFlinger); + sp<BufferItemConsumer> bufferItemConsumer = + sp<BufferItemConsumer>::make(igbc, consumerUsage, bufferCount, controlledByApp); + return {bufferItemConsumer, sp<Surface>::make(igbp, controlledByApp)}; +#endif +} + +sp<BufferItemConsumer> BufferItemConsumer::create(const sp<IGraphicBufferConsumer>& consumer, + uint64_t consumerUsage, int bufferCount, + bool controlledByApp) { + return sp<BufferItemConsumer>::make(consumer, consumerUsage, bufferCount, controlledByApp); +} + #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ) BufferItemConsumer::BufferItemConsumer(uint64_t consumerUsage, int bufferCount, bool controlledByApp, bool isConsumerSurfaceFlinger) |