Skip to content

Commit fa43de9

Browse files
Jim ShargoAndroid (Google) Code Review
authored andcommitted
Merge "BufferItemConsumer: Make creation calls flag-agnostic" into main
2 parents 4a90260 + f6a8037 commit fa43de9

7 files changed

Lines changed: 43 additions & 19 deletions

File tree

libs/gui/BufferItemConsumer.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include <com_android_graphics_libgui_flags.h>
2525
#include <gui/BufferItem.h>
2626
#include <gui/BufferItemConsumer.h>
27+
#include <gui/Surface.h>
2728
#include <ui/BufferQueueDefs.h>
2829
#include <ui/GraphicBuffer.h>
2930

@@ -35,6 +36,30 @@
3536

3637
namespace android {
3738

39+
std::tuple<sp<BufferItemConsumer>, sp<Surface>> BufferItemConsumer::create(
40+
uint64_t consumerUsage, int bufferCount, bool controlledByApp,
41+
bool isConsumerSurfaceFlinger) {
42+
#if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ)
43+
sp<BufferItemConsumer> bufferItemConsumer =
44+
sp<BufferItemConsumer>::make(consumerUsage, bufferCount, controlledByApp,
45+
isConsumerSurfaceFlinger);
46+
return {bufferItemConsumer, bufferItemConsumer->getSurface()};
47+
#else
48+
sp<IGraphicBufferProducer> igbp;
49+
sp<IGraphicBufferConsumer> igbc;
50+
BufferQueue::createBufferQueue(&igbp, &igbc, isConsumerSurfaceFlinger);
51+
sp<BufferItemConsumer> bufferItemConsumer =
52+
sp<BufferItemConsumer>::make(igbc, consumerUsage, bufferCount, controlledByApp);
53+
return {bufferItemConsumer, sp<Surface>::make(igbp, controlledByApp)};
54+
#endif
55+
}
56+
57+
sp<BufferItemConsumer> BufferItemConsumer::create(const sp<IGraphicBufferConsumer>& consumer,
58+
uint64_t consumerUsage, int bufferCount,
59+
bool controlledByApp) {
60+
return sp<BufferItemConsumer>::make(consumer, consumerUsage, bufferCount, controlledByApp);
61+
}
62+
3863
#if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ)
3964
BufferItemConsumer::BufferItemConsumer(uint64_t consumerUsage, int bufferCount,
4065
bool controlledByApp, bool isConsumerSurfaceFlinger)

libs/gui/ConsumerBase.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -480,7 +480,6 @@ status_t ConsumerBase::setMaxAcquiredBufferCount(int maxAcquiredBuffers) {
480480
return mConsumer->setMaxAcquiredBufferCount(maxAcquiredBuffers);
481481
}
482482

483-
#if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ)
484483
status_t ConsumerBase::setConsumerIsProtected(bool isProtected) {
485484
Mutex::Autolock lock(mMutex);
486485
if (mAbandoned) {
@@ -489,7 +488,6 @@ status_t ConsumerBase::setConsumerIsProtected(bool isProtected) {
489488
}
490489
return mConsumer->setConsumerIsProtected(isProtected);
491490
}
492-
#endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ)
493491

494492
sp<NativeHandle> ConsumerBase::getSidebandStream() const {
495493
Mutex::Autolock _l(mMutex);

libs/gui/include/gui/BufferItemConsumer.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,16 @@ class BufferItemConsumer: public ConsumerBase
4747
enum { INVALID_BUFFER_SLOT = BufferQueue::INVALID_BUFFER_SLOT };
4848
enum { NO_BUFFER_AVAILABLE = BufferQueue::NO_BUFFER_AVAILABLE };
4949

50+
static std::tuple<sp<BufferItemConsumer>, sp<Surface>> create(
51+
uint64_t consumerUsage, int bufferCount = DEFAULT_MAX_BUFFERS,
52+
bool controlledByApp = false, bool isConsumerSurfaceFlinger = false);
53+
54+
static sp<BufferItemConsumer> create(const sp<IGraphicBufferConsumer>& consumer,
55+
uint64_t consumerUsage,
56+
int bufferCount = DEFAULT_MAX_BUFFERS,
57+
bool controlledByApp = false)
58+
__attribute((deprecated("Prefer ctors that create their own surface and consumer.")));
59+
5060
// Create a new buffer item consumer. The consumerUsage parameter determines
5161
// the consumer usage flags passed to the graphics allocator. The
5262
// bufferCount parameter specifies how many buffers can be locked for user

libs/gui/include/gui/ConsumerBase.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,9 +123,7 @@ class ConsumerBase : public virtual RefBase,
123123
// See IGraphicBufferConsumer::setMaxAcquiredBufferCount
124124
status_t setMaxAcquiredBufferCount(int maxAcquiredBuffers);
125125

126-
#if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ)
127126
status_t setConsumerIsProtected(bool isProtected);
128-
#endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ)
129127

130128
// See IGraphicBufferConsumer::getSidebandStream
131129
sp<NativeHandle> getSidebandStream() const;

libs/gui/tests/BufferItemConsumer_test.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,14 +62,15 @@ class BufferItemConsumerTest : public ::testing::Test {
6262
void SetUp() override {
6363
mBuffers.resize(BufferQueueDefs::NUM_BUFFER_SLOTS);
6464

65-
mBIC = new BufferItemConsumer(kUsage, kMaxLockedBuffers, true);
65+
sp<Surface> surface;
66+
std::tie(mBIC, surface) = BufferItemConsumer::create(kUsage, kMaxLockedBuffers, true);
6667
String8 name("BufferItemConsumer_Under_Test");
6768
mBIC->setName(name);
6869
mBFL = new BufferFreedListener(this);
6970
mBIC->setBufferFreedListener(mBFL);
7071

7172
sp<IProducerListener> producerListener = new TrackingProducerListener(this);
72-
mProducer = mBIC->getSurface()->getIGraphicBufferProducer();
73+
mProducer = surface->getIGraphicBufferProducer();
7374
IGraphicBufferProducer::QueueBufferOutput bufferOutput;
7475
ASSERT_EQ(NO_ERROR,
7576
mProducer->connect(producerListener, NATIVE_WINDOW_API_CPU,

libs/gui/tests/Surface_test.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -294,9 +294,7 @@ TEST_F(SurfaceTest, LayerCountIsOne) {
294294
TEST_F(SurfaceTest, QueryConsumerUsage) {
295295
const int TEST_USAGE_FLAGS =
296296
GRALLOC_USAGE_SW_READ_OFTEN | GRALLOC_USAGE_HW_RENDER;
297-
sp<BufferItemConsumer> c = new BufferItemConsumer(TEST_USAGE_FLAGS);
298-
299-
sp<Surface> s = c->getSurface();
297+
auto [c, s] = BufferItemConsumer::create(TEST_USAGE_FLAGS);
300298
sp<ANativeWindow> anw(s);
301299

302300
int flags = -1;
@@ -2377,8 +2375,7 @@ TEST_F(SurfaceTest, QueueAcquireReleaseDequeue_CalledInStack_DoesNotDeadlock) {
23772375
sp<IGraphicBufferConsumer> bqConsumer;
23782376
BufferQueue::createBufferQueue(&bqProducer, &bqConsumer);
23792377

2380-
sp<BufferItemConsumer> consumer = sp<BufferItemConsumer>::make(bqConsumer, 3);
2381-
sp<Surface> surface = sp<Surface>::make(bqProducer);
2378+
auto [consumer, surface] = BufferItemConsumer::create(3);
23822379
sp<ImmediateReleaseConsumerListener> consumerListener =
23832380
sp<ImmediateReleaseConsumerListener>::make(consumer);
23842381
consumer->setFrameAvailableListener(consumerListener);

libs/nativewindow/tests/ANativeWindowTest.cpp

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,9 @@ class ANativeWindowTest : public ::testing::Test {
5050
const ::testing::TestInfo* const test_info =
5151
::testing::UnitTest::GetInstance()->current_test_info();
5252
ALOGV("**** Setting up for %s.%s\n", test_info->test_case_name(), test_info->name());
53-
#if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ)
54-
mItemConsumer = new BufferItemConsumer(GRALLOC_USAGE_SW_READ_OFTEN);
55-
mWindow = new TestableSurface(mItemConsumer->getSurface()->getIGraphicBufferProducer());
56-
#else
57-
BufferQueue::createBufferQueue(&mProducer, &mConsumer);
58-
mItemConsumer = new BufferItemConsumer(mConsumer, GRALLOC_USAGE_SW_READ_OFTEN);
59-
mWindow = new TestableSurface(mProducer);
60-
#endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ)
53+
sp<Surface> surface;
54+
std::tie(mItemConsumer, surface) = BufferItemConsumer::create(GRALLOC_USAGE_SW_READ_OFTEN);
55+
mWindow = new TestableSurface(surface->getIGraphicBufferProducer());
6156
const int success = native_window_api_connect(mWindow.get(), NATIVE_WINDOW_API_CPU);
6257
EXPECT_EQ(0, success);
6358
}

0 commit comments

Comments
 (0)