Skip to content

Commit 328dea0

Browse files
Anton IvanovAndroid (Google) Code Review
authored andcommitted
Merge "Harden construction sites of android::StrongPointer." into main
2 parents 7ad24b9 + 8179380 commit 328dea0

25 files changed

Lines changed: 130 additions & 110 deletions

libs/gui/BLASTBufferQueue.cpp

Lines changed: 13 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
@@ -637,7 +637,8 @@ status_t BLASTBufferQueue::acquireNextBufferLocked(
637637
bufferItem.mScalingMode, crop);
638638

639639
auto releaseBufferCallback = makeReleaseBufferCallbackThunk();
640-
sp<Fence> fence = bufferItem.mFence ? new Fence(bufferItem.mFence->dup()) : Fence::NO_FENCE;
640+
sp<Fence> fence =
641+
bufferItem.mFence ? sp<Fence>::make(bufferItem.mFence->dup()) : Fence::NO_FENCE;
641642

642643
nsecs_t dequeueTime = -1;
643644
{
@@ -1014,7 +1015,8 @@ sp<Surface> BLASTBufferQueue::getSurface(bool includeSurfaceControlHandle) {
10141015
if (includeSurfaceControlHandle && mSurfaceControl) {
10151016
scHandle = mSurfaceControl->getHandle();
10161017
}
1017-
return new BBQSurface(mProducer, true, scHandle, this);
1018+
return sp<BBQSurface>::make(mProducer, true, scHandle,
1019+
sp<BLASTBufferQueue>::fromExisting(this));
10181020
}
10191021

10201022
void BLASTBufferQueue::mergeWithNextTransaction(SurfaceComposerClient::Transaction* t,
@@ -1177,7 +1179,7 @@ class BBQBufferQueueProducer : public BufferQueueProducer {
11771179
return BufferQueueProducer::connect(listener, api, producerControlledByApp, output);
11781180
}
11791181

1180-
return BufferQueueProducer::connect(new AsyncProducerListener(listener), api,
1182+
return BufferQueueProducer::connect(sp<AsyncProducerListener>::make(listener), api,
11811183
producerControlledByApp, output);
11821184
}
11831185

libs/gui/BufferItem.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -215,14 +215,14 @@ status_t BufferItem::unflatten(
215215
FlattenableUtils::read(buffer, size, flags);
216216

217217
if (flags & 1) {
218-
mGraphicBuffer = new GraphicBuffer();
218+
mGraphicBuffer = sp<GraphicBuffer>::make();
219219
status_t err = mGraphicBuffer->unflatten(buffer, size, fds, count);
220220
if (err) return err;
221221
size -= FlattenableUtils::align<4>(buffer);
222222
}
223223

224224
if (flags & 2) {
225-
mFence = new Fence();
225+
mFence = sp<Fence>::make();
226226
status_t err = mFence->unflatten(buffer, size, fds, count);
227227
if (err) return err;
228228
size -= FlattenableUtils::align<4>(buffer);

libs/gui/BufferQueue.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,15 +125,16 @@ void BufferQueue::createBufferQueue(sp<IGraphicBufferProducer>* outProducer,
125125
LOG_ALWAYS_FATAL_IF(outConsumer == nullptr,
126126
"BufferQueue: outConsumer must not be NULL");
127127

128-
sp<BufferQueueCore> core(new BufferQueueCore());
128+
sp<BufferQueueCore> core = sp<BufferQueueCore>::make();
129129
LOG_ALWAYS_FATAL_IF(core == nullptr,
130130
"BufferQueue: failed to create BufferQueueCore");
131131

132-
sp<IGraphicBufferProducer> producer(new BufferQueueProducer(core, consumerIsSurfaceFlinger));
132+
sp<IGraphicBufferProducer> producer =
133+
sp<BufferQueueProducer>::make(core, consumerIsSurfaceFlinger);
133134
LOG_ALWAYS_FATAL_IF(producer == nullptr,
134135
"BufferQueue: failed to create BufferQueueProducer");
135136

136-
sp<IGraphicBufferConsumer> consumer(new BufferQueueConsumer(core));
137+
sp<IGraphicBufferConsumer> consumer = sp<BufferQueueConsumer>::make(core);
137138
LOG_ALWAYS_FATAL_IF(consumer == nullptr,
138139
"BufferQueue: failed to create BufferQueueConsumer");
139140

libs/gui/BufferQueueProducer.cpp

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -693,11 +693,11 @@ status_t BufferQueueProducer::dequeueBuffer(int* outSlot, sp<android::Fence>* ou
693693
.requestorName = {mConsumerName.c_str(), mConsumerName.size()},
694694
.extras = std::move(tempOptions),
695695
};
696-
sp<GraphicBuffer> graphicBuffer = new GraphicBuffer(allocRequest);
696+
sp<GraphicBuffer> graphicBuffer = sp<GraphicBuffer>::make(allocRequest);
697697
#else
698698
sp<GraphicBuffer> graphicBuffer =
699-
new GraphicBuffer(width, height, format, BQ_LAYER_COUNT, usage,
700-
{mConsumerName.c_str(), mConsumerName.size()});
699+
sp<GraphicBuffer>::make(width, height, format, BQ_LAYER_COUNT, usage,
700+
std::string{mConsumerName.c_str(), mConsumerName.size()});
701701
#endif
702702

703703
status_t error = graphicBuffer->initCheck();
@@ -1464,7 +1464,7 @@ status_t BufferQueueProducer::connect(const sp<IProducerListener>& listener,
14641464
#ifndef NO_BINDER
14651465
if (IInterface::asBinder(listener)->remoteBinder() != nullptr) {
14661466
status = IInterface::asBinder(listener)->linkToDeath(
1467-
static_cast<IBinder::DeathRecipient*>(this));
1467+
sp<IBinder::DeathRecipient>::fromExisting(this));
14681468
if (status != NO_ERROR) {
14691469
BQ_LOGE("connect: linkToDeath failed: %s (%d)",
14701470
strerror(-status), status);
@@ -1553,8 +1553,7 @@ status_t BufferQueueProducer::disconnect(int api, DisconnectMode mode) {
15531553
IInterface::asBinder(mCore->mLinkedToDeath);
15541554
// This can fail if we're here because of the death
15551555
// notification, but we just ignore it
1556-
token->unlinkToDeath(
1557-
static_cast<IBinder::DeathRecipient*>(this));
1556+
token->unlinkToDeath(sp<IBinder::DeathRecipient>::fromExisting(this));
15581557
}
15591558
#endif
15601559
mCore->mSharedBufferSlot =
@@ -1685,11 +1684,11 @@ void BufferQueueProducer::allocateBuffers(uint32_t width, uint32_t height,
16851684
#endif
16861685

16871686
#if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(BQ_EXTENDEDALLOCATE)
1688-
sp<GraphicBuffer> graphicBuffer = new GraphicBuffer(allocRequest);
1687+
sp<GraphicBuffer> graphicBuffer = sp<GraphicBuffer>::make(allocRequest);
16891688
#else
1690-
sp<GraphicBuffer> graphicBuffer = new GraphicBuffer(
1691-
allocWidth, allocHeight, allocFormat, BQ_LAYER_COUNT,
1692-
allocUsage, allocName);
1689+
sp<GraphicBuffer> graphicBuffer =
1690+
sp<GraphicBuffer>::make(allocWidth, allocHeight, allocFormat, BQ_LAYER_COUNT,
1691+
allocUsage, allocName);
16931692
#endif
16941693

16951694
status_t result = graphicBuffer->initCheck();

libs/gui/BufferReleaseChannel.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ status_t BufferReleaseChannel::Message::flatten(void*& buffer, size_t& size, int
108108

109109
status_t BufferReleaseChannel::Message::unflatten(void const*& buffer, size_t& size,
110110
int const*& fds, size_t& count) {
111-
releaseFence = new Fence();
111+
releaseFence = sp<Fence>::make();
112112
if (status_t err = releaseFence->unflatten(buffer, size, fds, count); err != OK) {
113113
return err;
114114
}
@@ -344,4 +344,4 @@ status_t BufferReleaseChannel::open(std::string name,
344344
return STATUS_OK;
345345
}
346346

347-
} // namespace android::gui
347+
} // namespace android::gui

libs/gui/Choreographer.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616

1717
// #define LOG_NDEBUG 0
18+
#include "utils/Looper.h"
1819
#define ATRACE_TAG ATRACE_TAG_GRAPHICS
1920

2021
#include <gui/Choreographer.h>
@@ -154,7 +155,7 @@ void Choreographer::postFrameCallbackDelayed(AChoreographer_frameCallback cb,
154155
if (std::this_thread::get_id() != mThreadId) {
155156
if (mLooper != nullptr) {
156157
Message m{MSG_SCHEDULE_VSYNC};
157-
mLooper->sendMessage(this, m);
158+
mLooper->sendMessage(sp<MessageHandler>::fromExisting(this), m);
158159
} else {
159160
scheduleVsync();
160161
}
@@ -164,7 +165,7 @@ void Choreographer::postFrameCallbackDelayed(AChoreographer_frameCallback cb,
164165
} else {
165166
if (mLooper != nullptr) {
166167
Message m{MSG_SCHEDULE_CALLBACKS};
167-
mLooper->sendMessageDelayed(delay, this, m);
168+
mLooper->sendMessageDelayed(delay, sp<MessageHandler>::fromExisting(this), m);
168169
} else {
169170
scheduleCallbacks();
170171
}
@@ -228,7 +229,7 @@ void Choreographer::unregisterRefreshRateCallback(AChoreographer_refreshRateCall
228229
void Choreographer::scheduleLatestConfigRequest() {
229230
if (mLooper != nullptr) {
230231
Message m{MSG_HANDLE_REFRESH_RATE_UPDATES};
231-
mLooper->sendMessage(this, m);
232+
mLooper->sendMessage(sp<MessageHandler>::fromExisting(this), m);
232233
} else {
233234
// If the looper thread is detached from Choreographer, then refresh rate
234235
// changes will be handled in AChoreographer_handlePendingEvents, so we

libs/gui/ConsumerBase.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ void ConsumerBase::initialize(bool controlledByApp) {
110110
// dropping to 0 at the end of the ctor. Since all we need is a wp<...>
111111
// that's what we create.
112112
wp<ConsumerListener> listener = static_cast<ConsumerListener*>(this);
113-
sp<IConsumerListener> proxy = new BufferQueue::ProxyConsumerListener(listener);
113+
sp<IConsumerListener> proxy = sp<BufferQueue::ProxyConsumerListener>::make(listener);
114114

115115
status_t err = mConsumer->consumerConnect(proxy, controlledByApp);
116116
if (err != NO_ERROR) {

libs/gui/CpuConsumer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ status_t CpuConsumer::unlockBuffer(const LockedBuffer &nativeBuffer) {
230230
return err;
231231
}
232232

233-
sp<Fence> fence(fenceFd >= 0 ? new Fence(fenceFd) : Fence::NO_FENCE);
233+
sp<Fence> fence(fenceFd >= 0 ? sp<Fence>::make(fenceFd) : Fence::NO_FENCE);
234234
addReleaseFenceLocked(ab.mSlot, ab.mGraphicBuffer, fence);
235235
releaseBufferLocked(ab.mSlot, ab.mGraphicBuffer);
236236

libs/gui/DisplayEventDispatcher.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,8 @@ status_t DisplayEventDispatcher::initialize() {
5959
}
6060

6161
if (mLooper != nullptr) {
62-
int rc = mLooper->addFd(mReceiver.getFd(), 0, Looper::EVENT_INPUT, this, NULL);
62+
int rc = mLooper->addFd(mReceiver.getFd(), 0, Looper::EVENT_INPUT,
63+
sp<LooperCallback>::fromExisting(this), NULL);
6364
if (rc < 0) {
6465
return UNKNOWN_ERROR;
6566
}

libs/gui/GLConsumer.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ status_t GLConsumer::releaseTexImage() {
333333
}
334334

335335
if (mReleasedTexImage == nullptr) {
336-
mReleasedTexImage = new EglImage(getDebugTexImageBuffer());
336+
mReleasedTexImage = sp<EglImage>::make(getDebugTexImageBuffer());
337337
}
338338

339339
mCurrentTexture = BufferQueue::INVALID_BUFFER_SLOT;
@@ -365,10 +365,10 @@ sp<GraphicBuffer> GLConsumer::getDebugTexImageBuffer() {
365365
if (CC_UNLIKELY(sReleasedTexImageBuffer == nullptr)) {
366366
// The first time, create the debug texture in case the application
367367
// continues to use it.
368-
sp<GraphicBuffer> buffer = new GraphicBuffer(
369-
kDebugData.width, kDebugData.height, PIXEL_FORMAT_RGBA_8888,
370-
DEFAULT_USAGE_FLAGS | GraphicBuffer::USAGE_SW_WRITE_RARELY,
371-
"[GLConsumer debug texture]");
368+
sp<GraphicBuffer> buffer =
369+
sp<GraphicBuffer>::make(kDebugData.width, kDebugData.height, PIXEL_FORMAT_RGBA_8888,
370+
DEFAULT_USAGE_FLAGS | GraphicBuffer::USAGE_SW_WRITE_RARELY,
371+
"[GLConsumer debug texture]");
372372
uint32_t* bits;
373373
buffer->lock(GraphicBuffer::USAGE_SW_WRITE_RARELY, reinterpret_cast<void**>(&bits));
374374
uint32_t stride = buffer->getStride();
@@ -400,7 +400,7 @@ status_t GLConsumer::acquireBufferLocked(BufferItem *item,
400400
// replaces any old EglImage with a new one (using the new buffer).
401401
if (item->mGraphicBuffer != nullptr) {
402402
int slot = item->mSlot;
403-
mEglSlots[slot].mEglImage = new EglImage(item->mGraphicBuffer);
403+
mEglSlots[slot].mEglImage = sp<EglImage>::make(item->mGraphicBuffer);
404404
}
405405

406406
return NO_ERROR;
@@ -737,7 +737,7 @@ status_t GLConsumer::syncForReleaseLocked(EGLDisplay dpy) {
737737
"fd: %#x", eglGetError());
738738
return UNKNOWN_ERROR;
739739
}
740-
sp<Fence> fence(new Fence(fenceFd));
740+
sp<Fence> fence = sp<Fence>::make(fenceFd);
741741
status_t err = addReleaseFenceLocked(mCurrentTexture,
742742
mCurrentTextureImage->graphicBuffer(), fence);
743743
if (err != OK) {

0 commit comments

Comments
 (0)