summaryrefslogtreecommitdiff
path: root/libs/gui/BufferItemConsumer.cpp
diff options
context:
space:
mode:
author Jim Shargo <jshargo@google.com> 2025-02-21 21:07:04 +0000
committer Jim Shargo <jshargo@google.com> 2025-02-24 15:53:28 +0000
commitf6a8037cfa313a8df444791bb11835473653379e (patch)
treefb96b932c021e5b6a61c2d2967bd78a3f50bc10e /libs/gui/BufferItemConsumer.cpp
parentf4fb32873ebb31905bc7369ee09baaf304dad97d (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.cpp25
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)