Skip to content

Commit cef2d53

Browse files
Anton IvanovAndroid (Google) Code Review
authored andcommitted
Merge "Harden construction of BBQ and its helpers." into main
2 parents 58176c6 + 27955ee commit cef2d53

3 files changed

Lines changed: 35 additions & 30 deletions

File tree

libs/gui/BLASTBufferQueue.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -197,15 +197,15 @@ BLASTBufferQueue::BLASTBufferQueue(const std::string& name, bool updateDestinati
197197
mUpdateDestinationFrame(updateDestinationFrame) {
198198
createBufferQueue(&mProducer, &mConsumer);
199199
#if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ)
200-
mBufferItemConsumer = new BLASTBufferItemConsumer(mProducer, mConsumer,
201-
GraphicBuffer::USAGE_HW_COMPOSER |
202-
GraphicBuffer::USAGE_HW_TEXTURE,
203-
1, false, this);
200+
mBufferItemConsumer = sp<BLASTBufferItemConsumer>::make(mProducer, mConsumer,
201+
GraphicBuffer::USAGE_HW_COMPOSER |
202+
GraphicBuffer::USAGE_HW_TEXTURE,
203+
1, false, this);
204204
#else
205-
mBufferItemConsumer = new BLASTBufferItemConsumer(mConsumer,
206-
GraphicBuffer::USAGE_HW_COMPOSER |
207-
GraphicBuffer::USAGE_HW_TEXTURE,
208-
1, false, this);
205+
mBufferItemConsumer = sp<BLASTBufferItemConsumer>::make(mConsumer,
206+
GraphicBuffer::USAGE_HW_COMPOSER |
207+
GraphicBuffer::USAGE_HW_TEXTURE,
208+
1, false, this);
209209
#endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ)
210210
// since the adapter is in the client process, set dequeue timeout
211211
// explicitly so that dequeueBuffer will block
@@ -1120,10 +1120,10 @@ ANDROID_SINGLETON_STATIC_INSTANCE(AsyncWorker);
11201120
class AsyncProducerListener : public BnProducerListener {
11211121
private:
11221122
const sp<IProducerListener> mListener;
1123-
1124-
public:
11251123
AsyncProducerListener(const sp<IProducerListener>& listener) : mListener(listener) {}
1124+
friend class sp<AsyncProducerListener>;
11261125

1126+
public:
11271127
void onBufferReleased() override {
11281128
AsyncWorker::getInstance().post([listener = mListener]() { listener->onBufferReleased(); });
11291129
}
@@ -1177,7 +1177,7 @@ class BBQBufferQueueProducer : public BufferQueueProducer {
11771177
return BufferQueueProducer::connect(listener, api, producerControlledByApp, output);
11781178
}
11791179

1180-
return BufferQueueProducer::connect(new AsyncProducerListener(listener), api,
1180+
return BufferQueueProducer::connect(sp<AsyncProducerListener>::make(listener), api,
11811181
producerControlledByApp, output);
11821182
}
11831183

libs/gui/include/gui/BLASTBufferQueue.h

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -46,21 +46,6 @@ class BufferItemConsumer;
4646

4747
class BLASTBufferItemConsumer : public BufferItemConsumer {
4848
public:
49-
#if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ)
50-
BLASTBufferItemConsumer(const sp<IGraphicBufferProducer>& producer,
51-
const sp<IGraphicBufferConsumer>& consumer, uint64_t consumerUsage,
52-
int bufferCount, bool controlledByApp, wp<BLASTBufferQueue> bbq)
53-
: BufferItemConsumer(producer, consumer, consumerUsage, bufferCount, controlledByApp),
54-
#else
55-
BLASTBufferItemConsumer(const sp<IGraphicBufferConsumer>& consumer, uint64_t consumerUsage,
56-
int bufferCount, bool controlledByApp, wp<BLASTBufferQueue> bbq)
57-
: BufferItemConsumer(consumer, consumerUsage, bufferCount, controlledByApp),
58-
#endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ)
59-
mBLASTBufferQueue(std::move(bbq)),
60-
mCurrentlyConnected(false),
61-
mPreviouslyConnected(false) {
62-
}
63-
6449
void onDisconnect() override EXCLUDES(mMutex);
6550
void addAndGetFrameTimestamps(const NewFrameEventsEntry* newTimestamps,
6651
FrameEventHistoryDelta* outDelta) override EXCLUDES(mMutex);
@@ -81,6 +66,23 @@ class BLASTBufferItemConsumer : public BufferItemConsumer {
8166
#endif
8267

8368
private:
69+
#if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ)
70+
BLASTBufferItemConsumer(const sp<IGraphicBufferProducer>& producer,
71+
const sp<IGraphicBufferConsumer>& consumer, uint64_t consumerUsage,
72+
int bufferCount, bool controlledByApp, wp<BLASTBufferQueue> bbq)
73+
: BufferItemConsumer(producer, consumer, consumerUsage, bufferCount, controlledByApp),
74+
#else
75+
BLASTBufferItemConsumer(const sp<IGraphicBufferConsumer>& consumer, uint64_t consumerUsage,
76+
int bufferCount, bool controlledByApp, wp<BLASTBufferQueue> bbq)
77+
: BufferItemConsumer(consumer, consumerUsage, bufferCount, controlledByApp),
78+
#endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ)
79+
mBLASTBufferQueue(std::move(bbq)),
80+
mCurrentlyConnected(false),
81+
mPreviouslyConnected(false) {
82+
}
83+
84+
friend class sp<BLASTBufferItemConsumer>;
85+
8486
const wp<BLASTBufferQueue> mBLASTBufferQueue;
8587

8688
uint64_t mCurrentFrameNumber GUARDED_BY(mMutex) = 0;
@@ -94,8 +96,6 @@ class BLASTBufferItemConsumer : public BufferItemConsumer {
9496

9597
class BLASTBufferQueue : public ConsumerBase::FrameAvailableListener {
9698
public:
97-
BLASTBufferQueue(const std::string& name, bool updateDestinationFrame = true);
98-
9999
sp<IGraphicBufferProducer> getIGraphicBufferProducer() const {
100100
return mProducer;
101101
}
@@ -158,8 +158,13 @@ class BLASTBufferQueue : public ConsumerBase::FrameAvailableListener {
158158
void onFirstRef() override;
159159

160160
private:
161+
// Not public to ensure construction via sp<>::make().
162+
BLASTBufferQueue(const std::string& name, bool updateDestinationFrame = true);
163+
164+
friend class sp<BLASTBufferQueue>;
161165
friend class BLASTBufferQueueHelper;
162166
friend class BBQBufferQueueProducer;
167+
friend class TestBLASTBufferQueue;
163168
#if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(BUFFER_RELEASE_CHANNEL)
164169
friend class BBQBufferQueueCore;
165170
#endif

libs/gui/tests/BLASTBufferQueue_test.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,8 @@ class TestBLASTBufferQueue : public BLASTBufferQueue {
114114
class BLASTBufferQueueHelper {
115115
public:
116116
BLASTBufferQueueHelper(const sp<SurfaceControl>& sc, int width, int height) {
117-
mBlastBufferQueueAdapter = new TestBLASTBufferQueue("TestBLASTBufferQueue", sc, width,
118-
height, PIXEL_FORMAT_RGBA_8888);
117+
mBlastBufferQueueAdapter = sp<TestBLASTBufferQueue>::make("TestBLASTBufferQueue", sc, width,
118+
height, PIXEL_FORMAT_RGBA_8888);
119119
}
120120

121121
void update(const sp<SurfaceControl>& sc, int width, int height) {

0 commit comments

Comments
 (0)