summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Android Build Coastguard Worker <android-build-coastguard-worker@google.com> 2025-02-20 16:14:45 -0800
committer Android Build Coastguard Worker <android-build-coastguard-worker@google.com> 2025-02-20 16:14:45 -0800
commitb0e0a77c19b79e9aec90d055fa2a9be87948ee8a (patch)
treef4e05e04931c9774fde7c7158b2b215377386055
parent9fc5d99c4996c0230d01840781db8a0a041f4b4f (diff)
parentee4497116b560289f1ad95bae733f707a25a129a (diff)
Snap for 13097162 from ee4497116b560289f1ad95bae733f707a25a129a to 25Q2-release
Change-Id: Iff8ef6cb85edfbfe64bbff67fd27e5c7241d5444
-rw-r--r--libs/binder/ndk/include_platform/android/binder_ibinder_platform.h2
-rw-r--r--libs/binder/ndk/include_platform/android/binder_process.h13
-rw-r--r--libs/binder/ndk/libbinder_ndk.map.txt1
-rw-r--r--libs/binder/ndk/process.cpp4
-rw-r--r--libs/graphicsenv/GraphicsEnv.cpp20
-rw-r--r--libs/graphicsenv/include/graphicsenv/GraphicsEnv.h1
-rw-r--r--libs/gui/BLASTBufferQueue.cpp24
-rw-r--r--libs/gui/BufferItem.cpp4
-rw-r--r--libs/gui/BufferQueue.cpp7
-rw-r--r--libs/gui/BufferQueueProducer.cpp19
-rw-r--r--libs/gui/BufferReleaseChannel.cpp4
-rw-r--r--libs/gui/Choreographer.cpp7
-rw-r--r--libs/gui/ConsumerBase.cpp2
-rw-r--r--libs/gui/CpuConsumer.cpp2
-rw-r--r--libs/gui/DisplayEventDispatcher.cpp3
-rw-r--r--libs/gui/GLConsumer.cpp14
-rw-r--r--libs/gui/IGraphicBufferProducer.cpp22
-rw-r--r--libs/gui/IGraphicBufferProducerFlattenables.cpp8
-rw-r--r--libs/gui/ITransactionCompletedListener.cpp6
-rw-r--r--libs/gui/LayerState.cpp6
-rw-r--r--libs/gui/ScreenCaptureResults.cpp5
-rw-r--r--libs/gui/StreamSplitter.cpp7
-rw-r--r--libs/gui/Surface.cpp17
-rw-r--r--libs/gui/SurfaceComposerClient.cpp39
-rw-r--r--libs/gui/SurfaceControl.cpp11
-rw-r--r--libs/gui/WindowInfosListenerReporter.cpp15
-rw-r--r--libs/gui/bufferqueue/1.0/H2BGraphicBufferProducer.cpp16
-rw-r--r--libs/gui/bufferqueue/2.0/B2HGraphicBufferProducer.cpp2
-rw-r--r--libs/gui/bufferqueue/2.0/H2BGraphicBufferProducer.cpp2
-rw-r--r--libs/gui/bufferqueue/2.0/types.cpp6
-rw-r--r--libs/gui/include/gui/DisplayLuts.h99
-rw-r--r--libs/gui/include/gui/StreamSplitter.h2
-rw-r--r--libs/gui/include/gui/SurfaceComposerClient.h2
-rw-r--r--libs/renderengine/include/renderengine/LayerSettings.h4
-rw-r--r--libs/tracing_perfetto/tracing_sdk.cpp2
-rw-r--r--services/surfaceflinger/SurfaceFlinger.cpp26
36 files changed, 275 insertions, 149 deletions
diff --git a/libs/binder/ndk/include_platform/android/binder_ibinder_platform.h b/libs/binder/ndk/include_platform/android/binder_ibinder_platform.h
index 89f21dda21..783e11f0e9 100644
--- a/libs/binder/ndk/include_platform/android/binder_ibinder_platform.h
+++ b/libs/binder/ndk/include_platform/android/binder_ibinder_platform.h
@@ -62,6 +62,8 @@ __attribute__((weak, warn_unused_result)) const char* AIBinder_getCallingSid() _
* This must be called before the object is sent to another process.
* Aborts on invalid values. Not thread safe.
*
+ * This overrides the setting in ABinderProcess_disableBackgroundScheduling.
+ *
* \param binder local server binder to set the policy for
* \param policy scheduler policy as defined in linux UAPI
* \param priority priority. [-20..19] for SCHED_NORMAL, [1..99] for RT
diff --git a/libs/binder/ndk/include_platform/android/binder_process.h b/libs/binder/ndk/include_platform/android/binder_process.h
index 6aff994a15..2432099d6e 100644
--- a/libs/binder/ndk/include_platform/android/binder_process.h
+++ b/libs/binder/ndk/include_platform/android/binder_process.h
@@ -75,6 +75,19 @@ bool ABinderProcess_isThreadPoolStarted(void);
void ABinderProcess_joinThreadPool(void);
/**
+ * Disables (or enables) background scheduling.
+ *
+ * By default, binder threads execute at a lower priority. However, this can cause
+ * priority inversion, so it is recommended to be disabled in high priority
+ * or in system processes.
+ *
+ * See also AIBinder_setMinSchedulerPolicy, which overrides this setting.
+ *
+ * \param disable whether to disable background scheduling
+ */
+void ABinderProcess_disableBackgroundScheduling(bool disable);
+
+/**
* This gives you an fd to wait on. Whenever data is available on the fd,
* ABinderProcess_handlePolledCommands can be called to handle binder queries.
* This is expected to be used in a single threaded process which waits on
diff --git a/libs/binder/ndk/libbinder_ndk.map.txt b/libs/binder/ndk/libbinder_ndk.map.txt
index a63716522e..d4eb8c7579 100644
--- a/libs/binder/ndk/libbinder_ndk.map.txt
+++ b/libs/binder/ndk/libbinder_ndk.map.txt
@@ -229,6 +229,7 @@ LIBBINDER_NDK_PLATFORM {
AIBinder_fromPlatformBinder*;
AIBinder_toPlatformBinder*;
AParcel_viewPlatformParcel*;
+ ABinderProcess_disableBackgroundScheduling;
};
local:
*;
diff --git a/libs/binder/ndk/process.cpp b/libs/binder/ndk/process.cpp
index 0072ac3d3e..bcdb9594fa 100644
--- a/libs/binder/ndk/process.cpp
+++ b/libs/binder/ndk/process.cpp
@@ -36,6 +36,10 @@ void ABinderProcess_joinThreadPool(void) {
IPCThreadState::self()->joinThreadPool();
}
+void ABinderProcess_disableBackgroundScheduling(bool disable) {
+ IPCThreadState::disableBackgroundScheduling(disable);
+}
+
binder_status_t ABinderProcess_setupPolling(int* fd) {
return IPCThreadState::self()->setupPolling(fd);
}
diff --git a/libs/graphicsenv/GraphicsEnv.cpp b/libs/graphicsenv/GraphicsEnv.cpp
index 4bc261106a..626581cc2a 100644
--- a/libs/graphicsenv/GraphicsEnv.cpp
+++ b/libs/graphicsenv/GraphicsEnv.cpp
@@ -621,6 +621,10 @@ void GraphicsEnv::setAngleInfo(const std::string& path, const bool shouldUseNati
mShouldUseAngle = true;
}
mShouldUseNativeDriver = shouldUseNativeDriver;
+
+ if (mShouldUseAngle) {
+ updateAngleFeatureOverrides();
+ }
}
std::string& GraphicsEnv::getPackageName() {
@@ -632,6 +636,22 @@ const std::vector<std::string>& GraphicsEnv::getAngleEglFeatures() {
return mAngleEglFeatures;
}
+// List of ANGLE features to override (enabled or disable).
+// The list of overrides is loaded and parsed by GpuService.
+void GraphicsEnv::updateAngleFeatureOverrides() {
+ if (!graphicsenv_flags::feature_overrides()) {
+ return;
+ }
+
+ const sp<IGpuService> gpuService = getGpuService();
+ if (!gpuService) {
+ ALOGE("No GPU service");
+ return;
+ }
+
+ mFeatureOverrides = gpuService->getFeatureOverrides();
+}
+
void GraphicsEnv::getAngleFeatureOverrides(std::vector<const char*>& enabled,
std::vector<const char*>& disabled) {
if (!graphicsenv_flags::feature_overrides()) {
diff --git a/libs/graphicsenv/include/graphicsenv/GraphicsEnv.h b/libs/graphicsenv/include/graphicsenv/GraphicsEnv.h
index 55fa13abb5..68219008e8 100644
--- a/libs/graphicsenv/include/graphicsenv/GraphicsEnv.h
+++ b/libs/graphicsenv/include/graphicsenv/GraphicsEnv.h
@@ -121,6 +121,7 @@ public:
// Get the app package name.
std::string& getPackageName();
const std::vector<std::string>& getAngleEglFeatures();
+ void updateAngleFeatureOverrides();
void getAngleFeatureOverrides(std::vector<const char*>& enabled,
std::vector<const char*>& disabled);
// Set the persist.graphics.egl system property value.
diff --git a/libs/gui/BLASTBufferQueue.cpp b/libs/gui/BLASTBufferQueue.cpp
index a0bc9d0efc..310f781876 100644
--- a/libs/gui/BLASTBufferQueue.cpp
+++ b/libs/gui/BLASTBufferQueue.cpp
@@ -197,15 +197,15 @@ BLASTBufferQueue::BLASTBufferQueue(const std::string& name, bool updateDestinati
mUpdateDestinationFrame(updateDestinationFrame) {
createBufferQueue(&mProducer, &mConsumer);
#if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ)
- mBufferItemConsumer = sp<BLASTBufferItemConsumer>::make(mProducer, mConsumer,
- GraphicBuffer::USAGE_HW_COMPOSER |
- GraphicBuffer::USAGE_HW_TEXTURE,
- 1, false, this);
+ mBufferItemConsumer = new BLASTBufferItemConsumer(mProducer, mConsumer,
+ GraphicBuffer::USAGE_HW_COMPOSER |
+ GraphicBuffer::USAGE_HW_TEXTURE,
+ 1, false, this);
#else
- mBufferItemConsumer = sp<BLASTBufferItemConsumer>::make(mConsumer,
- GraphicBuffer::USAGE_HW_COMPOSER |
- GraphicBuffer::USAGE_HW_TEXTURE,
- 1, false, this);
+ mBufferItemConsumer = new BLASTBufferItemConsumer(mConsumer,
+ GraphicBuffer::USAGE_HW_COMPOSER |
+ GraphicBuffer::USAGE_HW_TEXTURE,
+ 1, false, this);
#endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ)
// since the adapter is in the client process, set dequeue timeout
// explicitly so that dequeueBuffer will block
@@ -637,8 +637,7 @@ status_t BLASTBufferQueue::acquireNextBufferLocked(
bufferItem.mScalingMode, crop);
auto releaseBufferCallback = makeReleaseBufferCallbackThunk();
- sp<Fence> fence =
- bufferItem.mFence ? sp<Fence>::make(bufferItem.mFence->dup()) : Fence::NO_FENCE;
+ sp<Fence> fence = bufferItem.mFence ? new Fence(bufferItem.mFence->dup()) : Fence::NO_FENCE;
nsecs_t dequeueTime = -1;
{
@@ -1015,8 +1014,7 @@ sp<Surface> BLASTBufferQueue::getSurface(bool includeSurfaceControlHandle) {
if (includeSurfaceControlHandle && mSurfaceControl) {
scHandle = mSurfaceControl->getHandle();
}
- return sp<BBQSurface>::make(mProducer, true, scHandle,
- sp<BLASTBufferQueue>::fromExisting(this));
+ return new BBQSurface(mProducer, true, scHandle, this);
}
void BLASTBufferQueue::mergeWithNextTransaction(SurfaceComposerClient::Transaction* t,
@@ -1179,7 +1177,7 @@ public:
return BufferQueueProducer::connect(listener, api, producerControlledByApp, output);
}
- return BufferQueueProducer::connect(sp<AsyncProducerListener>::make(listener), api,
+ return BufferQueueProducer::connect(new AsyncProducerListener(listener), api,
producerControlledByApp, output);
}
diff --git a/libs/gui/BufferItem.cpp b/libs/gui/BufferItem.cpp
index 9dcd5dc4c5..3b2d337a21 100644
--- a/libs/gui/BufferItem.cpp
+++ b/libs/gui/BufferItem.cpp
@@ -215,14 +215,14 @@ status_t BufferItem::unflatten(
FlattenableUtils::read(buffer, size, flags);
if (flags & 1) {
- mGraphicBuffer = sp<GraphicBuffer>::make();
+ mGraphicBuffer = new GraphicBuffer();
status_t err = mGraphicBuffer->unflatten(buffer, size, fds, count);
if (err) return err;
size -= FlattenableUtils::align<4>(buffer);
}
if (flags & 2) {
- mFence = sp<Fence>::make();
+ mFence = new Fence();
status_t err = mFence->unflatten(buffer, size, fds, count);
if (err) return err;
size -= FlattenableUtils::align<4>(buffer);
diff --git a/libs/gui/BufferQueue.cpp b/libs/gui/BufferQueue.cpp
index f21ac18f3c..f1374e23fd 100644
--- a/libs/gui/BufferQueue.cpp
+++ b/libs/gui/BufferQueue.cpp
@@ -125,16 +125,15 @@ void BufferQueue::createBufferQueue(sp<IGraphicBufferProducer>* outProducer,
LOG_ALWAYS_FATAL_IF(outConsumer == nullptr,
"BufferQueue: outConsumer must not be NULL");
- sp<BufferQueueCore> core = sp<BufferQueueCore>::make();
+ sp<BufferQueueCore> core(new BufferQueueCore());
LOG_ALWAYS_FATAL_IF(core == nullptr,
"BufferQueue: failed to create BufferQueueCore");
- sp<IGraphicBufferProducer> producer =
- sp<BufferQueueProducer>::make(core, consumerIsSurfaceFlinger);
+ sp<IGraphicBufferProducer> producer(new BufferQueueProducer(core, consumerIsSurfaceFlinger));
LOG_ALWAYS_FATAL_IF(producer == nullptr,
"BufferQueue: failed to create BufferQueueProducer");
- sp<IGraphicBufferConsumer> consumer = sp<BufferQueueConsumer>::make(core);
+ sp<IGraphicBufferConsumer> consumer(new BufferQueueConsumer(core));
LOG_ALWAYS_FATAL_IF(consumer == nullptr,
"BufferQueue: failed to create BufferQueueConsumer");
diff --git a/libs/gui/BufferQueueProducer.cpp b/libs/gui/BufferQueueProducer.cpp
index 54b3a1f08c..c241482827 100644
--- a/libs/gui/BufferQueueProducer.cpp
+++ b/libs/gui/BufferQueueProducer.cpp
@@ -693,11 +693,11 @@ status_t BufferQueueProducer::dequeueBuffer(int* outSlot, sp<android::Fence>* ou
.requestorName = {mConsumerName.c_str(), mConsumerName.size()},
.extras = std::move(tempOptions),
};
- sp<GraphicBuffer> graphicBuffer = sp<GraphicBuffer>::make(allocRequest);
+ sp<GraphicBuffer> graphicBuffer = new GraphicBuffer(allocRequest);
#else
sp<GraphicBuffer> graphicBuffer =
- sp<GraphicBuffer>::make(width, height, format, BQ_LAYER_COUNT, usage,
- std::string{mConsumerName.c_str(), mConsumerName.size()});
+ new GraphicBuffer(width, height, format, BQ_LAYER_COUNT, usage,
+ {mConsumerName.c_str(), mConsumerName.size()});
#endif
status_t error = graphicBuffer->initCheck();
@@ -1464,7 +1464,7 @@ status_t BufferQueueProducer::connect(const sp<IProducerListener>& listener,
#ifndef NO_BINDER
if (IInterface::asBinder(listener)->remoteBinder() != nullptr) {
status = IInterface::asBinder(listener)->linkToDeath(
- sp<IBinder::DeathRecipient>::fromExisting(this));
+ static_cast<IBinder::DeathRecipient*>(this));
if (status != NO_ERROR) {
BQ_LOGE("connect: linkToDeath failed: %s (%d)",
strerror(-status), status);
@@ -1553,7 +1553,8 @@ status_t BufferQueueProducer::disconnect(int api, DisconnectMode mode) {
IInterface::asBinder(mCore->mLinkedToDeath);
// This can fail if we're here because of the death
// notification, but we just ignore it
- token->unlinkToDeath(sp<IBinder::DeathRecipient>::fromExisting(this));
+ token->unlinkToDeath(
+ static_cast<IBinder::DeathRecipient*>(this));
}
#endif
mCore->mSharedBufferSlot =
@@ -1684,11 +1685,11 @@ void BufferQueueProducer::allocateBuffers(uint32_t width, uint32_t height,
#endif
#if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(BQ_EXTENDEDALLOCATE)
- sp<GraphicBuffer> graphicBuffer = sp<GraphicBuffer>::make(allocRequest);
+ sp<GraphicBuffer> graphicBuffer = new GraphicBuffer(allocRequest);
#else
- sp<GraphicBuffer> graphicBuffer =
- sp<GraphicBuffer>::make(allocWidth, allocHeight, allocFormat, BQ_LAYER_COUNT,
- allocUsage, allocName);
+ sp<GraphicBuffer> graphicBuffer = new GraphicBuffer(
+ allocWidth, allocHeight, allocFormat, BQ_LAYER_COUNT,
+ allocUsage, allocName);
#endif
status_t result = graphicBuffer->initCheck();
diff --git a/libs/gui/BufferReleaseChannel.cpp b/libs/gui/BufferReleaseChannel.cpp
index 4f495d039d..e9cb013baf 100644
--- a/libs/gui/BufferReleaseChannel.cpp
+++ b/libs/gui/BufferReleaseChannel.cpp
@@ -108,7 +108,7 @@ status_t BufferReleaseChannel::Message::flatten(void*& buffer, size_t& size, int
status_t BufferReleaseChannel::Message::unflatten(void const*& buffer, size_t& size,
int const*& fds, size_t& count) {
- releaseFence = sp<Fence>::make();
+ releaseFence = new Fence();
if (status_t err = releaseFence->unflatten(buffer, size, fds, count); err != OK) {
return err;
}
@@ -344,4 +344,4 @@ status_t BufferReleaseChannel::open(std::string name,
return STATUS_OK;
}
-} // namespace android::gui
+} // namespace android::gui \ No newline at end of file
diff --git a/libs/gui/Choreographer.cpp b/libs/gui/Choreographer.cpp
index 99102cf0f2..fb3e0f1d36 100644
--- a/libs/gui/Choreographer.cpp
+++ b/libs/gui/Choreographer.cpp
@@ -15,7 +15,6 @@
*/
// #define LOG_NDEBUG 0
-#include "utils/Looper.h"
#define ATRACE_TAG ATRACE_TAG_GRAPHICS
#include <gui/Choreographer.h>
@@ -155,7 +154,7 @@ void Choreographer::postFrameCallbackDelayed(AChoreographer_frameCallback cb,
if (std::this_thread::get_id() != mThreadId) {
if (mLooper != nullptr) {
Message m{MSG_SCHEDULE_VSYNC};
- mLooper->sendMessage(sp<MessageHandler>::fromExisting(this), m);
+ mLooper->sendMessage(this, m);
} else {
scheduleVsync();
}
@@ -165,7 +164,7 @@ void Choreographer::postFrameCallbackDelayed(AChoreographer_frameCallback cb,
} else {
if (mLooper != nullptr) {
Message m{MSG_SCHEDULE_CALLBACKS};
- mLooper->sendMessageDelayed(delay, sp<MessageHandler>::fromExisting(this), m);
+ mLooper->sendMessageDelayed(delay, this, m);
} else {
scheduleCallbacks();
}
@@ -229,7 +228,7 @@ void Choreographer::unregisterRefreshRateCallback(AChoreographer_refreshRateCall
void Choreographer::scheduleLatestConfigRequest() {
if (mLooper != nullptr) {
Message m{MSG_HANDLE_REFRESH_RATE_UPDATES};
- mLooper->sendMessage(sp<MessageHandler>::fromExisting(this), m);
+ mLooper->sendMessage(this, m);
} else {
// If the looper thread is detached from Choreographer, then refresh rate
// changes will be handled in AChoreographer_handlePendingEvents, so we
diff --git a/libs/gui/ConsumerBase.cpp b/libs/gui/ConsumerBase.cpp
index a52cef7203..67de742161 100644
--- a/libs/gui/ConsumerBase.cpp
+++ b/libs/gui/ConsumerBase.cpp
@@ -110,7 +110,7 @@ void ConsumerBase::initialize(bool controlledByApp) {
// dropping to 0 at the end of the ctor. Since all we need is a wp<...>
// that's what we create.
wp<ConsumerListener> listener = static_cast<ConsumerListener*>(this);
- sp<IConsumerListener> proxy = sp<BufferQueue::ProxyConsumerListener>::make(listener);
+ sp<IConsumerListener> proxy = new BufferQueue::ProxyConsumerListener(listener);
status_t err = mConsumer->consumerConnect(proxy, controlledByApp);
if (err != NO_ERROR) {
diff --git a/libs/gui/CpuConsumer.cpp b/libs/gui/CpuConsumer.cpp
index 66fe2daba1..23b432e1f4 100644
--- a/libs/gui/CpuConsumer.cpp
+++ b/libs/gui/CpuConsumer.cpp
@@ -230,7 +230,7 @@ status_t CpuConsumer::unlockBuffer(const LockedBuffer &nativeBuffer) {
return err;
}
- sp<Fence> fence(fenceFd >= 0 ? sp<Fence>::make(fenceFd) : Fence::NO_FENCE);
+ sp<Fence> fence(fenceFd >= 0 ? new Fence(fenceFd) : Fence::NO_FENCE);
addReleaseFenceLocked(ab.mSlot, ab.mGraphicBuffer, fence);
releaseBufferLocked(ab.mSlot, ab.mGraphicBuffer);
diff --git a/libs/gui/DisplayEventDispatcher.cpp b/libs/gui/DisplayEventDispatcher.cpp
index 94aaa04b43..6f238859a4 100644
--- a/libs/gui/DisplayEventDispatcher.cpp
+++ b/libs/gui/DisplayEventDispatcher.cpp
@@ -59,8 +59,7 @@ status_t DisplayEventDispatcher::initialize() {
}
if (mLooper != nullptr) {
- int rc = mLooper->addFd(mReceiver.getFd(), 0, Looper::EVENT_INPUT,
- sp<LooperCallback>::fromExisting(this), NULL);
+ int rc = mLooper->addFd(mReceiver.getFd(), 0, Looper::EVENT_INPUT, this, NULL);
if (rc < 0) {
return UNKNOWN_ERROR;
}
diff --git a/libs/gui/GLConsumer.cpp b/libs/gui/GLConsumer.cpp
index 70c04b3518..052b8edfaa 100644
--- a/libs/gui/GLConsumer.cpp
+++ b/libs/gui/GLConsumer.cpp
@@ -333,7 +333,7 @@ status_t GLConsumer::releaseTexImage() {
}
if (mReleasedTexImage == nullptr) {
- mReleasedTexImage = sp<EglImage>::make(getDebugTexImageBuffer());
+ mReleasedTexImage = new EglImage(getDebugTexImageBuffer());
}
mCurrentTexture = BufferQueue::INVALID_BUFFER_SLOT;
@@ -365,10 +365,10 @@ sp<GraphicBuffer> GLConsumer::getDebugTexImageBuffer() {
if (CC_UNLIKELY(sReleasedTexImageBuffer == nullptr)) {
// The first time, create the debug texture in case the application
// continues to use it.
- sp<GraphicBuffer> buffer =
- sp<GraphicBuffer>::make(kDebugData.width, kDebugData.height, PIXEL_FORMAT_RGBA_8888,
- DEFAULT_USAGE_FLAGS | GraphicBuffer::USAGE_SW_WRITE_RARELY,
- "[GLConsumer debug texture]");
+ sp<GraphicBuffer> buffer = new GraphicBuffer(
+ kDebugData.width, kDebugData.height, PIXEL_FORMAT_RGBA_8888,
+ DEFAULT_USAGE_FLAGS | GraphicBuffer::USAGE_SW_WRITE_RARELY,
+ "[GLConsumer debug texture]");
uint32_t* bits;
buffer->lock(GraphicBuffer::USAGE_SW_WRITE_RARELY, reinterpret_cast<void**>(&bits));
uint32_t stride = buffer->getStride();
@@ -400,7 +400,7 @@ status_t GLConsumer::acquireBufferLocked(BufferItem *item,
// replaces any old EglImage with a new one (using the new buffer).
if (item->mGraphicBuffer != nullptr) {
int slot = item->mSlot;
- mEglSlots[slot].mEglImage = sp<EglImage>::make(item->mGraphicBuffer);
+ mEglSlots[slot].mEglImage = new EglImage(item->mGraphicBuffer);
}
return NO_ERROR;
@@ -737,7 +737,7 @@ status_t GLConsumer::syncForReleaseLocked(EGLDisplay dpy) {
"fd: %#x", eglGetError());
return UNKNOWN_ERROR;
}
- sp<Fence> fence = sp<Fence>::make(fenceFd);
+ sp<Fence> fence(new Fence(fenceFd));
status_t err = addReleaseFenceLocked(mCurrentTexture,
mCurrentTextureImage->graphicBuffer(), fence);
if (err != OK) {
diff --git a/libs/gui/IGraphicBufferProducer.cpp b/libs/gui/IGraphicBufferProducer.cpp
index 1d1910eb08..9f71eb16e7 100644
--- a/libs/gui/IGraphicBufferProducer.cpp
+++ b/libs/gui/IGraphicBufferProducer.cpp
@@ -104,7 +104,7 @@ public:
}
bool nonNull = reply.readInt32();
if (nonNull) {
- *buf = sp<GraphicBuffer>::make();
+ *buf = new GraphicBuffer();
result = reply.read(**buf);
if(result != NO_ERROR) {
(*buf).clear();
@@ -197,7 +197,7 @@ public:
}
*buf = reply.readInt32();
- *fence = sp<Fence>::make();
+ *fence = new Fence();
result = reply.read(**fence);
if (result != NO_ERROR) {
fence->clear();
@@ -293,7 +293,7 @@ public:
if (result == NO_ERROR) {
bool nonNull = reply.readInt32();
if (nonNull) {
- *outBuffer = sp<GraphicBuffer>::make();
+ *outBuffer = new GraphicBuffer;
result = reply.read(**outBuffer);
if (result != NO_ERROR) {
outBuffer->clear();
@@ -302,7 +302,7 @@ public:
}
nonNull = reply.readInt32();
if (nonNull) {
- *outFence = sp<Fence>::make();
+ *outFence = new Fence;
result = reply.read(**outFence);
if (result != NO_ERROR) {
outBuffer->clear();
@@ -640,7 +640,7 @@ public:
bool hasBuffer = reply.readBool();
sp<GraphicBuffer> buffer;
if (hasBuffer) {
- buffer = sp<GraphicBuffer>::make();
+ buffer = new GraphicBuffer();
result = reply.read(*buffer);
if (result == NO_ERROR) {
result = reply.read(outTransformMatrix, sizeof(float) * 16);
@@ -650,7 +650,7 @@ public:
ALOGE("getLastQueuedBuffer failed to read buffer: %d", result);
return result;
}
- sp<Fence> fence = sp<Fence>::make();
+ sp<Fence> fence(new Fence);
result = reply.read(*fence);
if (result != NO_ERROR) {
ALOGE("getLastQueuedBuffer failed to read fence: %d", result);
@@ -687,7 +687,7 @@ public:
}
sp<GraphicBuffer> buffer;
if (hasBuffer) {
- buffer = sp<GraphicBuffer>::make();
+ buffer = new GraphicBuffer();
result = reply.read(*buffer);
if (result == NO_ERROR) {
result = reply.read(*outRect);
@@ -700,7 +700,7 @@ public:
ALOGE("getLastQueuedBuffer failed to read buffer: %d", result);
return result;
}
- sp<Fence> fence = sp<Fence>::make();
+ sp<Fence> fence(new Fence);
result = reply.read(*fence);
if (result != NO_ERROR) {
ALOGE("getLastQueuedBuffer failed to read fence: %d", result);
@@ -1232,7 +1232,7 @@ status_t BnGraphicBufferProducer::onTransact(
}
case ATTACH_BUFFER: {
CHECK_INTERFACE(IGraphicBufferProducer, data, reply);
- sp<GraphicBuffer> buffer = sp<GraphicBuffer>::make();
+ sp<GraphicBuffer> buffer = new GraphicBuffer();
status_t result = data.read(*buffer.get());
int slot = 0;
if (result == NO_ERROR) {
@@ -1250,7 +1250,7 @@ status_t BnGraphicBufferProducer::onTransact(
return result;
}
for (sp<GraphicBuffer>& buffer : buffers) {
- buffer = sp<GraphicBuffer>::make();
+ buffer = new GraphicBuffer();
result = data.read(*buffer.get());
if (result != NO_ERROR) {
return result;
@@ -1306,7 +1306,7 @@ status_t BnGraphicBufferProducer::onTransact(
case CANCEL_BUFFER: {
CHECK_INTERFACE(IGraphicBufferProducer, data, reply);
int buf = data.readInt32();
- sp<Fence> fence = sp<Fence>::make();
+ sp<Fence> fence = new Fence();
status_t result = data.read(*fence.get());
if (result == NO_ERROR) {
result = cancelBuffer(buf, fence);
diff --git a/libs/gui/IGraphicBufferProducerFlattenables.cpp b/libs/gui/IGraphicBufferProducerFlattenables.cpp
index 393e1c3068..8b2e2ddc59 100644
--- a/libs/gui/IGraphicBufferProducerFlattenables.cpp
+++ b/libs/gui/IGraphicBufferProducerFlattenables.cpp
@@ -105,7 +105,7 @@ status_t IGraphicBufferProducer::QueueBufferInput::unflatten(
: std::nullopt;
#endif // COM_ANDROID_GRAPHICS_LIBUI_FLAGS_APPLY_PICTURE_PROFILES
- fence = sp<Fence>::make();
+ fence = new Fence();
status_t result = fence->unflatten(buffer, size, fds, count);
if (result != NO_ERROR) {
return result;
@@ -228,7 +228,7 @@ status_t IGraphicBufferProducer::RequestBufferOutput::unflatten(
FlattenableUtils::read(fBuffer, size, result);
int32_t isBufferNull = 0;
FlattenableUtils::read(fBuffer, size, isBufferNull);
- buffer = sp<GraphicBuffer>::make();
+ buffer = new GraphicBuffer();
if (!isBufferNull) {
status_t status = buffer->unflatten(fBuffer, size, fds, count);
if (status != NO_ERROR) {
@@ -323,7 +323,7 @@ status_t IGraphicBufferProducer::DequeueBufferOutput::unflatten(
FlattenableUtils::read(buffer, size, slot);
FlattenableUtils::read(buffer, size, bufferAge);
- fence = sp<Fence>::make();
+ fence = new Fence();
status_t status = fence->unflatten(buffer, size, fds, count);
if (status != NO_ERROR) {
return status;
@@ -395,7 +395,7 @@ status_t IGraphicBufferProducer::CancelBufferInput::unflatten(
FlattenableUtils::read(buffer, size, slot);
- fence = sp<Fence>::make();
+ fence = new Fence();
return fence->unflatten(buffer, size, fds, count);
}
diff --git a/libs/gui/ITransactionCompletedListener.cpp b/libs/gui/ITransactionCompletedListener.cpp
index ed28e7960b..83fc827c5f 100644
--- a/libs/gui/ITransactionCompletedListener.cpp
+++ b/libs/gui/ITransactionCompletedListener.cpp
@@ -92,7 +92,7 @@ status_t FrameEventHistoryStats::readFromParcel(const Parcel* input) {
if (err != NO_ERROR) return err;
if (hasFence) {
- gpuCompositionDoneFence = sp<Fence>::make();
+ gpuCompositionDoneFence = new Fence();
err = input->read(*gpuCompositionDoneFence);
if (err != NO_ERROR) return err;
}
@@ -157,7 +157,7 @@ status_t SurfaceStats::readFromParcel(const Parcel* input) {
SAFE_PARCEL(input->readBool, &hasFence);
if (hasFence) {
- previousReleaseFence = sp<Fence>::make();
+ previousReleaseFence = new Fence();
SAFE_PARCEL(input->read, *previousReleaseFence);
}
bool hasTransformHint = false;
@@ -216,7 +216,7 @@ status_t TransactionStats::readFromParcel(const Parcel* input) {
return err;
}
if (hasFence) {
- presentFence = sp<Fence>::make();
+ presentFence = new Fence();
err = input->read(*presentFence);
if (err != NO_ERROR) {
return err;
diff --git a/libs/gui/LayerState.cpp b/libs/gui/LayerState.cpp
index 43855dadcd..ebfc62f33f 100644
--- a/libs/gui/LayerState.cpp
+++ b/libs/gui/LayerState.cpp
@@ -684,7 +684,7 @@ void layer_state_t::merge(const layer_state_t& other) {
}
if (other.what & eInputInfoChanged) {
what |= eInputInfoChanged;
- windowInfoHandle = sp<WindowInfoHandle>::make(*other.windowInfoHandle);
+ windowInfoHandle = new WindowInfoHandle(*other.windowInfoHandle);
}
if (other.what & eBackgroundColorChanged) {
what |= eBackgroundColorChanged;
@@ -1001,13 +1001,13 @@ status_t BufferData::readFromParcel(const Parcel* input) {
bool tmpBool = false;
SAFE_PARCEL(input->readBool, &tmpBool);
if (tmpBool) {
- buffer = sp<GraphicBuffer>::make();
+ buffer = new GraphicBuffer();
SAFE_PARCEL(input->read, *buffer);
}
SAFE_PARCEL(input->readBool, &tmpBool);
if (tmpBool) {
- acquireFence = sp<Fence>::make();
+ acquireFence = new Fence();
SAFE_PARCEL(input->read, *acquireFence);
}
diff --git a/libs/gui/ScreenCaptureResults.cpp b/libs/gui/ScreenCaptureResults.cpp
index 0c9d6d663b..2de023e5b2 100644
--- a/libs/gui/ScreenCaptureResults.cpp
+++ b/libs/gui/ScreenCaptureResults.cpp
@@ -18,7 +18,6 @@
#include <private/gui/ParcelUtils.h>
#include <ui/FenceResult.h>
-#include "ui/GraphicBuffer.h"
namespace android::gui {
@@ -55,7 +54,7 @@ status_t ScreenCaptureResults::readFromParcel(const android::Parcel* parcel) {
bool hasGraphicBuffer;
SAFE_PARCEL(parcel->readBool, &hasGraphicBuffer);
if (hasGraphicBuffer) {
- buffer = sp<GraphicBuffer>::make();
+ buffer = new GraphicBuffer();
SAFE_PARCEL(parcel->read, *buffer);
}
@@ -80,7 +79,7 @@ status_t ScreenCaptureResults::readFromParcel(const android::Parcel* parcel) {
bool hasGainmap;
SAFE_PARCEL(parcel->readBool, &hasGainmap);
if (hasGainmap) {
- optionalGainMap = sp<GraphicBuffer>::make();
+ optionalGainMap = new GraphicBuffer();
SAFE_PARCEL(parcel->read, *optionalGainMap);
}
SAFE_PARCEL(parcel->readFloat, &hdrSdrRatio);
diff --git a/libs/gui/StreamSplitter.cpp b/libs/gui/StreamSplitter.cpp
index 9b107fc514..653b91bcf6 100644
--- a/libs/gui/StreamSplitter.cpp
+++ b/libs/gui/StreamSplitter.cpp
@@ -47,7 +47,7 @@ status_t StreamSplitter::createSplitter(
return BAD_VALUE;
}
- sp<StreamSplitter> splitter = sp<StreamSplitter>::make(inputQueue);
+ sp<StreamSplitter> splitter(new StreamSplitter(inputQueue));
status_t status = splitter->mInput->consumerConnect(splitter, false);
if (status == NO_ERROR) {
splitter->mInput->setConsumerName(String8("StreamSplitter"));
@@ -82,8 +82,7 @@ status_t StreamSplitter::addOutput(
Mutex::Autolock lock(mMutex);
IGraphicBufferProducer::QueueBufferOutput queueBufferOutput;
- sp<OutputListener> listener =
- sp<OutputListener>::make(sp<StreamSplitter>::fromExisting(this), outputQueue);
+ sp<OutputListener> listener(new OutputListener(this, outputQueue));
IInterface::asBinder(outputQueue)->linkToDeath(listener);
status_t status = outputQueue->connect(listener, NATIVE_WINDOW_API_CPU,
/* producerControlledByApp */ false, &queueBufferOutput);
@@ -141,7 +140,7 @@ void StreamSplitter::onFrameAvailable(const BufferItem& /* item */) {
// Initialize our reference count for this buffer
mBuffers.add(bufferItem.mGraphicBuffer->getId(),
- sp<BufferTracker>::make(bufferItem.mGraphicBuffer));
+ new BufferTracker(bufferItem.mGraphicBuffer));
IGraphicBufferProducer::QueueBufferInput queueInput(
bufferItem.mTimestamp, bufferItem.mIsAutoTimestamp,
diff --git a/libs/gui/Surface.cpp b/libs/gui/Surface.cpp
index a646931cc5..ec23365e1f 100644
--- a/libs/gui/Surface.cpp
+++ b/libs/gui/Surface.cpp
@@ -509,7 +509,7 @@ int Surface::hook_dequeueBuffer_DEPRECATED(ANativeWindow* window,
if (result != OK) {
return result;
}
- sp<Fence> fence = sp<Fence>::make(fenceFd);
+ sp<Fence> fence(new Fence(fenceFd));
int waitResult = fence->waitForever("dequeueBuffer_DEPRECATED");
if (waitResult != OK) {
ALOGE("dequeueBuffer_DEPRECATED: Fence::wait returned an error: %d",
@@ -979,7 +979,7 @@ int Surface::cancelBuffer(android_native_buffer_t* buffer,
}
return OK;
}
- sp<Fence> fence(fenceFd >= 0 ? sp<Fence>::make(fenceFd) : Fence::NO_FENCE);
+ sp<Fence> fence(fenceFd >= 0 ? new Fence(fenceFd) : Fence::NO_FENCE);
mGraphicBufferProducer->cancelBuffer(i, fence);
if (mSharedBufferMode && mAutoRefresh && mSharedBufferSlot == i) {
@@ -1017,7 +1017,7 @@ int Surface::cancelBuffers(const std::vector<BatchBuffer>& buffers) {
ALOGE("%s: cannot find slot number for cancelled buffer", __FUNCTION__);
badSlotResult = slot;
} else {
- sp<Fence> fence(fenceFd >= 0 ? sp<Fence>::make(fenceFd) : Fence::NO_FENCE);
+ sp<Fence> fence(fenceFd >= 0 ? new Fence(fenceFd) : Fence::NO_FENCE);
cancelBufferInputs[numBuffersCancelled].slot = slot;
cancelBufferInputs[numBuffersCancelled++].fence = fence;
}
@@ -1078,7 +1078,7 @@ void Surface::getQueueBufferInputLocked(android_native_buffer_t* buffer, int fen
Rect crop(Rect::EMPTY_RECT);
mCrop.intersect(Rect(buffer->width, buffer->height), &crop);
- sp<Fence> fence(fenceFd >= 0 ? sp<Fence>::make(fenceFd) : Fence::NO_FENCE);
+ sp<Fence> fence(fenceFd >= 0 ? new Fence(fenceFd) : Fence::NO_FENCE);
IGraphicBufferProducer::QueueBufferInput input(timestamp, isAutoTimestamp,
static_cast<android_dataspace>(mDataSpace), crop, mScalingMode,
mTransform ^ mStickyTransform, fence, mStickyTransform,
@@ -2092,7 +2092,7 @@ bool Surface::transformToDisplayInverse() const {
}
int Surface::connect(int api) {
- static sp<SurfaceListener> listener = sp<StubSurfaceListener>::make();
+ static sp<SurfaceListener> listener = new StubSurfaceListener();
return connect(api, listener);
}
@@ -2104,7 +2104,7 @@ int Surface::connect(int api, const sp<SurfaceListener>& listener, bool reportBu
mReportRemovedBuffers = reportBufferRemoval;
if (listener != nullptr) {
- mListenerProxy = sp<ProducerListenerProxy>::make(this, listener);
+ mListenerProxy = new ProducerListenerProxy(this, listener);
}
int err =
@@ -2240,8 +2240,7 @@ int Surface::attachBuffer(ANativeWindowBuffer* buffer)
mRemovedBuffers.clear();
}
- sp<GraphicBuffer> graphicBuffer =
- sp<GraphicBuffer>::fromExisting(static_cast<GraphicBuffer*>(buffer));
+ sp<GraphicBuffer> graphicBuffer(static_cast<GraphicBuffer*>(buffer));
uint32_t priorGeneration = graphicBuffer->mGenerationNumber;
graphicBuffer->mGenerationNumber = mGenerationNumber;
int32_t attachedSlot = -1;
@@ -2703,7 +2702,7 @@ status_t Surface::lock(
status_t err = dequeueBuffer(&out, &fenceFd);
ALOGE_IF(err, "dequeueBuffer failed (%s)", strerror(-err));
if (err == NO_ERROR) {
- sp<GraphicBuffer> backBuffer = sp<GraphicBuffer>::fromExisting(GraphicBuffer::getSelf(out));
+ sp<GraphicBuffer> backBuffer(GraphicBuffer::getSelf(out));
const Rect bounds(backBuffer->width, backBuffer->height);
Region newDirtyRegion;
diff --git a/libs/gui/SurfaceComposerClient.cpp b/libs/gui/SurfaceComposerClient.cpp
index 844f2c5e58..df57b275c5 100644
--- a/libs/gui/SurfaceComposerClient.cpp
+++ b/libs/gui/SurfaceComposerClient.cpp
@@ -123,7 +123,7 @@ bool ComposerService::connectLocked() {
explicit DeathObserver(ComposerService& mgr) : mComposerService(mgr) { }
};
- mDeathObserver = sp<DeathObserver>::make(*const_cast<ComposerService*>(this));
+ mDeathObserver = new DeathObserver(*const_cast<ComposerService*>(this));
IInterface::asBinder(mComposerService)->linkToDeath(mDeathObserver);
return true;
}
@@ -170,7 +170,7 @@ bool ComposerServiceAIDL::connectLocked() {
explicit DeathObserver(ComposerServiceAIDL& mgr) : mComposerService(mgr) {}
};
- mDeathObserver = sp<DeathObserver>::make(*const_cast<ComposerServiceAIDL*>(this));
+ mDeathObserver = new DeathObserver(*const_cast<ComposerServiceAIDL*>(this));
IInterface::asBinder(mComposerService)->linkToDeath(mDeathObserver);
return true;
}
@@ -202,7 +202,7 @@ public:
DefaultComposerClient& dc = DefaultComposerClient::getInstance();
Mutex::Autolock _l(dc.mLock);
if (dc.mClient == nullptr) {
- dc.mClient = sp<SurfaceComposerClient>::make();
+ dc.mClient = new SurfaceComposerClient;
}
return dc.mClient;
}
@@ -399,7 +399,7 @@ void TransactionCompletedListener::setInstance(const sp<TransactionCompletedList
sp<TransactionCompletedListener> TransactionCompletedListener::getInstance() {
std::lock_guard<std::mutex> lock(sListenerInstanceMutex);
if (sInstance == nullptr) {
- sInstance = sp<TransactionCompletedListener>::make();
+ sInstance = new TransactionCompletedListener;
}
return sInstance;
}
@@ -677,7 +677,7 @@ void TransactionCompletedListener::removeReleaseBufferCallback(
SurfaceComposerClient::PresentationCallbackRAII::PresentationCallbackRAII(
TransactionCompletedListener* tcl, int id) {
- mTcl = sp<TransactionCompletedListener>::fromExisting(tcl);
+ mTcl = tcl;
mId = id;
}
@@ -691,7 +691,7 @@ TransactionCompletedListener::addTrustedPresentationCallback(TrustedPresentation
std::scoped_lock<std::mutex> lock(mMutex);
mTrustedPresentationCallbacks[id] =
std::tuple<TrustedPresentationCallback, void*>(tpc, context);
- return sp<SurfaceComposerClient::PresentationCallbackRAII>::make(this, id);
+ return new SurfaceComposerClient::PresentationCallbackRAII(this, id);
}
void TransactionCompletedListener::clearTrustedPresentationCallback(int id) {
@@ -743,7 +743,7 @@ void removeDeadBufferCallback(void* /*context*/, uint64_t graphicBufferId);
*/
class BufferCache : public Singleton<BufferCache> {
public:
- BufferCache() : token(sp<BBinder>::make()) {}
+ BufferCache() : token(new BBinder()) {}
sp<IBinder> getToken() {
return IInterface::asBinder(TransactionCompletedListener::getIInstance());
@@ -1357,7 +1357,7 @@ status_t SurfaceComposerClient::Transaction::apply(bool synchronous, bool oneWay
return binderStatus;
}
-sp<IBinder> SurfaceComposerClient::Transaction::sApplyToken = sp<BBinder>::make();
+sp<IBinder> SurfaceComposerClient::Transaction::sApplyToken = new BBinder();
std::mutex SurfaceComposerClient::Transaction::sApplyTokenMutex;
@@ -1953,9 +1953,9 @@ SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setDesir
}
SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setLuts(
- const sp<SurfaceControl>& sc, const base::unique_fd& lutFd,
- const std::vector<int32_t>& offsets, const std::vector<int32_t>& dimensions,
- const std::vector<int32_t>& sizes, const std::vector<int32_t>& samplingKeys) {
+ const sp<SurfaceControl>& sc, base::unique_fd&& lutFd, const std::vector<int32_t>& offsets,
+ const std::vector<int32_t>& dimensions, const std::vector<int32_t>& sizes,
+ const std::vector<int32_t>& samplingKeys) {
layer_state_t* s = getLayerState(sc);
if (!s) {
mStatus = BAD_INDEX;
@@ -1964,8 +1964,8 @@ SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setLuts(
s->what |= layer_state_t::eLutsChanged;
if (lutFd.ok()) {
- s->luts = std::make_shared<gui::DisplayLuts>(base::unique_fd(dup(lutFd.get())), offsets,
- dimensions, sizes, samplingKeys);
+ s->luts = std::make_shared<gui::DisplayLuts>(std::move(lutFd), offsets, dimensions, sizes,
+ samplingKeys);
} else {
s->luts = nullptr;
}
@@ -2683,10 +2683,9 @@ status_t SurfaceComposerClient::createSurfaceChecked(const String8& name, uint32
}
ALOGE_IF(err, "SurfaceComposerClient::createSurface error %s", strerror(-err));
if (err == NO_ERROR) {
- *outSurface = sp<SurfaceControl>::make(sp<SurfaceComposerClient>::fromExisting(this),
- result.handle, result.layerId,
- toString(result.layerName), w, h, format,
- result.transformHint, flags);
+ *outSurface = new SurfaceControl(this, result.handle, result.layerId,
+ toString(result.layerName), w, h, format,
+ result.transformHint, flags);
}
}
return err;
@@ -2702,8 +2701,7 @@ sp<SurfaceControl> SurfaceComposerClient::mirrorSurface(SurfaceControl* mirrorFr
const binder::Status status = mClient->mirrorSurface(mirrorFromHandle, &result);
const status_t err = statusTFromBinderStatus(status);
if (err == NO_ERROR) {
- return sp<SurfaceControl>::make(sp<SurfaceComposerClient>::fromExisting(this),
- result.handle, result.layerId, toString(result.layerName));
+ return new SurfaceControl(this, result.handle, result.layerId, toString(result.layerName));
}
return nullptr;
}
@@ -2713,8 +2711,7 @@ sp<SurfaceControl> SurfaceComposerClient::mirrorDisplay(DisplayId displayId) {
const binder::Status status = mClient->mirrorDisplay(displayId.value, &result);
const status_t err = statusTFromBinderStatus(status);
if (err == NO_ERROR) {
- return sp<SurfaceControl>::make(sp<SurfaceComposerClient>::fromExisting(this),
- result.handle, result.layerId, toString(result.layerName));
+ return new SurfaceControl(this, result.handle, result.layerId, toString(result.layerName));
}
return nullptr;
}
diff --git a/libs/gui/SurfaceControl.cpp b/libs/gui/SurfaceControl.cpp
index ba2d80d1b3..b735418d4b 100644
--- a/libs/gui/SurfaceControl.cpp
+++ b/libs/gui/SurfaceControl.cpp
@@ -269,11 +269,10 @@ status_t SurfaceControl::readFromParcel(const Parcel& parcel,
SAFE_PARCEL(parcel.readUint32, &format);
// We aren't the original owner of the surface.
- *outSurfaceControl =
- sp<SurfaceControl>::make(sp<SurfaceComposerClient>::make(
- interface_cast<ISurfaceComposerClient>(client)),
- handle, layerId, layerName, width, height, format,
- transformHint);
+ *outSurfaceControl = new SurfaceControl(new SurfaceComposerClient(
+ interface_cast<ISurfaceComposerClient>(client)),
+ handle.get(), layerId, layerName, width, height, format,
+ transformHint);
return NO_ERROR;
}
@@ -304,7 +303,7 @@ sp<SurfaceControl> SurfaceControl::getParentingLayer() {
if (mBbqChild != nullptr) {
return mBbqChild;
}
- return sp<SurfaceControl>::fromExisting(this);
+ return this;
}
uint64_t SurfaceControl::resolveFrameNumber(const std::optional<uint64_t>& frameNumber) {
diff --git a/libs/gui/WindowInfosListenerReporter.cpp b/libs/gui/WindowInfosListenerReporter.cpp
index ce8737b8b9..91c9a85149 100644
--- a/libs/gui/WindowInfosListenerReporter.cpp
+++ b/libs/gui/WindowInfosListenerReporter.cpp
@@ -17,7 +17,6 @@
#include <android/gui/ISurfaceComposer.h>
#include <gui/AidlUtil.h>
#include <gui/WindowInfosListenerReporter.h>
-#include "android/gui/IWindowInfosListener.h"
#include "gui/WindowInfosUpdate.h"
namespace android {
@@ -28,7 +27,7 @@ using gui::WindowInfosListener;
using gui::aidl_utils::statusTFromBinderStatus;
sp<WindowInfosListenerReporter> WindowInfosListenerReporter::getInstance() {
- static sp<WindowInfosListenerReporter> sInstance = sp<WindowInfosListenerReporter>::make();
+ static sp<WindowInfosListenerReporter> sInstance = new WindowInfosListenerReporter;
return sInstance;
}
@@ -41,11 +40,7 @@ status_t WindowInfosListenerReporter::addWindowInfosListener(
std::scoped_lock lock(mListenersMutex);
if (mWindowInfosListeners.empty()) {
gui::WindowInfosListenerInfo listenerInfo;
- binder::Status s =
- surfaceComposer
- ->addWindowInfosListener(sp<gui::IWindowInfosListener>::fromExisting(
- this),
- &listenerInfo);
+ binder::Status s = surfaceComposer->addWindowInfosListener(this, &listenerInfo);
status = statusTFromBinderStatus(s);
if (status == OK) {
mWindowInfosPublisher = std::move(listenerInfo.windowInfosPublisher);
@@ -77,8 +72,7 @@ status_t WindowInfosListenerReporter::removeWindowInfosListener(
}
if (mWindowInfosListeners.size() == 1) {
- binder::Status s = surfaceComposer->removeWindowInfosListener(
- sp<gui::IWindowInfosListener>::fromExisting(this));
+ binder::Status s = surfaceComposer->removeWindowInfosListener(this);
status = statusTFromBinderStatus(s);
// Clear the last stored state since we're disabling updates and don't want to hold
// stale values
@@ -122,8 +116,7 @@ void WindowInfosListenerReporter::reconnect(const sp<gui::ISurfaceComposer>& com
std::scoped_lock lock(mListenersMutex);
if (!mWindowInfosListeners.empty()) {
gui::WindowInfosListenerInfo listenerInfo;
- composerService->addWindowInfosListener(sp<gui::IWindowInfosListener>::fromExisting(this),
- &listenerInfo);
+ composerService->addWindowInfosListener(this, &listenerInfo);
mWindowInfosPublisher = std::move(listenerInfo.windowInfosPublisher);
mListenerId = listenerInfo.listenerId;
}
diff --git a/libs/gui/bufferqueue/1.0/H2BGraphicBufferProducer.cpp b/libs/gui/bufferqueue/1.0/H2BGraphicBufferProducer.cpp
index b1a23b309e..fd8ffe1f01 100644
--- a/libs/gui/bufferqueue/1.0/H2BGraphicBufferProducer.cpp
+++ b/libs/gui/bufferqueue/1.0/H2BGraphicBufferProducer.cpp
@@ -971,7 +971,7 @@ inline HGraphicBufferProducer::DisconnectMode toHDisconnectMode(
// H2BGraphicBufferProducer
status_t H2BGraphicBufferProducer::requestBuffer(int slot, sp<GraphicBuffer>* buf) {
- *buf = sp<GraphicBuffer>::make();
+ *buf = new GraphicBuffer();
status_t fnStatus;
status_t transStatus = toStatusT(mBase->requestBuffer(
static_cast<int32_t>(slot),
@@ -999,7 +999,7 @@ status_t H2BGraphicBufferProducer::dequeueBuffer(int* slot, sp<Fence>* fence, ui
uint32_t h, ::android::PixelFormat format,
uint64_t usage, uint64_t* outBufferAge,
FrameEventHistoryDelta* outTimestamps) {
- *fence = sp<Fence>::make();
+ *fence = new Fence();
status_t fnStatus;
status_t transStatus = toStatusT(mBase->dequeueBuffer(
w, h, static_cast<PixelFormat>(format), uint32_t(usage),
@@ -1035,8 +1035,8 @@ status_t H2BGraphicBufferProducer::detachBuffer(int slot) {
status_t H2BGraphicBufferProducer::detachNextBuffer(
sp<GraphicBuffer>* outBuffer, sp<Fence>* outFence) {
- *outBuffer = sp<GraphicBuffer>::make();
- *outFence = sp<Fence>::make();
+ *outBuffer = new GraphicBuffer();
+ *outFence = new Fence();
status_t fnStatus;
status_t transStatus = toStatusT(mBase->detachNextBuffer(
[&fnStatus, outBuffer, outFence] (
@@ -1127,8 +1127,8 @@ int H2BGraphicBufferProducer::query(int what, int* value) {
status_t H2BGraphicBufferProducer::connect(
const sp<IProducerListener>& listener, int api,
bool producerControlledByApp, QueueBufferOutput* output) {
- sp<HProducerListener> tListener =
- listener == nullptr ? nullptr : sp<B2HProducerListener>::make(listener);
+ sp<HProducerListener> tListener = listener == nullptr ?
+ nullptr : new B2HProducerListener(listener);
status_t fnStatus;
status_t transStatus = toStatusT(mBase->connect(
tListener, static_cast<int32_t>(api), producerControlledByApp,
@@ -1205,13 +1205,13 @@ status_t H2BGraphicBufferProducer::getLastQueuedBuffer(
hidl_handle const& fence,
hidl_array<float, 16> const& transformMatrix) {
fnStatus = toStatusT(status);
- *outBuffer = sp<GraphicBuffer>::make();
+ *outBuffer = new GraphicBuffer();
if (!convertTo(outBuffer->get(), buffer)) {
ALOGE("H2BGraphicBufferProducer::getLastQueuedBuffer - "
"Invalid output buffer");
fnStatus = fnStatus == NO_ERROR ? BAD_VALUE : fnStatus;
}
- *outFence = sp<Fence>::make();
+ *outFence = new Fence();
if (!convertTo(outFence->get(), fence)) {
ALOGE("H2BGraphicBufferProducer::getLastQueuedBuffer - "
"Invalid output fence");
diff --git a/libs/gui/bufferqueue/2.0/B2HGraphicBufferProducer.cpp b/libs/gui/bufferqueue/2.0/B2HGraphicBufferProducer.cpp
index 4384bd5faa..c76d771262 100644
--- a/libs/gui/bufferqueue/2.0/B2HGraphicBufferProducer.cpp
+++ b/libs/gui/bufferqueue/2.0/B2HGraphicBufferProducer.cpp
@@ -272,7 +272,7 @@ Return<void> B2HGraphicBufferProducer::connect(
HConnectionType hConnectionType,
bool producerControlledByApp,
connect_cb _hidl_cb) {
- sp<BProducerListener> bListener = sp<H2BProducerListener>::make(hListener);
+ sp<BProducerListener> bListener = new H2BProducerListener(hListener);
int bConnectionType{};
if (!bListener || !h2b(hConnectionType, &bConnectionType)) {
_hidl_cb(HStatus::UNKNOWN_ERROR, QueueBufferOutput{});
diff --git a/libs/gui/bufferqueue/2.0/H2BGraphicBufferProducer.cpp b/libs/gui/bufferqueue/2.0/H2BGraphicBufferProducer.cpp
index 7121bb7aef..ae00a2642e 100644
--- a/libs/gui/bufferqueue/2.0/H2BGraphicBufferProducer.cpp
+++ b/libs/gui/bufferqueue/2.0/H2BGraphicBufferProducer.cpp
@@ -325,7 +325,7 @@ status_t H2BGraphicBufferProducer::connect(
}
sp<HProducerListener> hListener = nullptr;
if (listener && listener->needsReleaseNotify()) {
- hListener = sp<B2HProducerListener>::make(listener);
+ hListener = new B2HProducerListener(listener);
if (!hListener) {
LOG(ERROR) << "connect: failed to wrap listener.";
return UNKNOWN_ERROR;
diff --git a/libs/gui/bufferqueue/2.0/types.cpp b/libs/gui/bufferqueue/2.0/types.cpp
index 9890da398d..cbd6cad847 100644
--- a/libs/gui/bufferqueue/2.0/types.cpp
+++ b/libs/gui/bufferqueue/2.0/types.cpp
@@ -147,13 +147,13 @@ bool b2h(sp<BFence> const& from, HFenceWrapper* to) {
bool h2b(native_handle_t const* from, sp<BFence>* to) {
if (!from || from->numFds == 0) {
- *to = sp<::android::Fence>::make();
+ *to = new ::android::Fence();
return true;
}
if (from->numFds != 1 || from->numInts != 0) {
return false;
}
- *to = sp<BFence>::make(dup(from->data[0]));
+ *to = new BFence(dup(from->data[0]));
return true;
}
@@ -288,7 +288,7 @@ bool h2b(HardwareBuffer const& from, sp<GraphicBuffer>* to) {
&hwBuffer) != OK) {
return false;
}
- *to = sp<GraphicBuffer>::fromExisting(GraphicBuffer::fromAHardwareBuffer(hwBuffer));
+ *to = GraphicBuffer::fromAHardwareBuffer(hwBuffer);
AHardwareBuffer_release(hwBuffer);
return true;
}
diff --git a/libs/gui/include/gui/DisplayLuts.h b/libs/gui/include/gui/DisplayLuts.h
index ab86ac4af8..187381c4ae 100644
--- a/libs/gui/include/gui/DisplayLuts.h
+++ b/libs/gui/include/gui/DisplayLuts.h
@@ -18,6 +18,10 @@
#include <android-base/unique_fd.h>
#include <binder/Parcel.h>
#include <binder/Parcelable.h>
+#include <cutils/ashmem.h>
+#include <sys/mman.h>
+#include <algorithm>
+#include <ostream>
#include <vector>
namespace android::gui {
@@ -62,4 +66,99 @@ private:
base::unique_fd fd;
}; // struct DisplayLuts
+static inline void PrintTo(const std::vector<int32_t>& offsets, ::std::ostream* os) {
+ *os << "\n .offsets = {";
+ for (size_t i = 0; i < offsets.size(); i++) {
+ *os << offsets[i];
+ if (i != offsets.size() - 1) {
+ *os << ", ";
+ }
+ }
+ *os << "}";
+}
+
+static inline void PrintTo(const std::vector<DisplayLuts::Entry>& entries, ::std::ostream* os) {
+ *os << "\n .lutProperties = {\n";
+ for (auto& [dimension, size, samplingKey] : entries) {
+ *os << " Entry{"
+ << "dimension: " << dimension << ", size: " << size << ", samplingKey: " << samplingKey
+ << "}\n";
+ }
+ *os << " }";
+}
+
+static constexpr size_t kMaxPrintCount = 100;
+
+static inline void PrintTo(const std::vector<float>& buffer, size_t offset, int32_t dimension,
+ size_t size, ::std::ostream* os) {
+ size_t range = std::min(size, kMaxPrintCount);
+ *os << "{";
+ if (dimension == 1) {
+ for (size_t i = 0; i < range; i++) {
+ *os << buffer[offset + i];
+ if (i != range - 1) {
+ *os << ", ";
+ }
+ }
+ } else {
+ *os << "\n {R channel:";
+ for (size_t i = 0; i < range; i++) {
+ *os << buffer[offset + i];
+ if (i != range - 1) {
+ *os << ", ";
+ }
+ }
+ *os << "}\n {G channel:";
+ for (size_t i = 0; i < range; i++) {
+ *os << buffer[offset + size + i];
+ if (i != range - 1) {
+ *os << ", ";
+ }
+ }
+ *os << "}\n {B channel:";
+ for (size_t i = 0; i < range; i++) {
+ *os << buffer[offset + 2 * size + i];
+ if (i != range - 1) {
+ *os << ", ";
+ }
+ }
+ }
+ *os << "}";
+}
+
+static inline void PrintTo(const std::shared_ptr<DisplayLuts> luts, ::std::ostream* os) {
+ *os << "gui::DisplayLuts {";
+ auto& fd = luts->getLutFileDescriptor();
+ *os << "\n .pfd = " << fd.get();
+ if (fd.ok()) {
+ PrintTo(luts->offsets, os);
+ PrintTo(luts->lutProperties, os);
+ // decode luts
+ int32_t fullLength = luts->offsets[luts->offsets.size() - 1];
+ if (luts->lutProperties[luts->offsets.size() - 1].dimension == 1) {
+ fullLength += luts->lutProperties[luts->offsets.size() - 1].size;
+ } else {
+ fullLength += (luts->lutProperties[luts->offsets.size() - 1].size *
+ luts->lutProperties[luts->offsets.size() - 1].size *
+ luts->lutProperties[luts->offsets.size() - 1].size * 3);
+ }
+ size_t bufferSize = static_cast<size_t>(fullLength) * sizeof(float);
+ float* ptr = (float*)mmap(NULL, bufferSize, PROT_READ, MAP_SHARED, fd.get(), 0);
+ if (ptr == MAP_FAILED) {
+ *os << "\n .bufferdata cannot mmap!";
+ return;
+ }
+ std::vector<float> buffers(ptr, ptr + fullLength);
+ munmap(ptr, bufferSize);
+
+ *os << "\n .bufferdata = ";
+ for (size_t i = 0; i < luts->offsets.size(); i++) {
+ PrintTo(buffers, static_cast<size_t>(luts->offsets[i]),
+ luts->lutProperties[i].dimension,
+ static_cast<size_t>(luts->lutProperties[i].size), os);
+ }
+ }
+ *os << "\n }";
+}
+
} // namespace android::gui \ No newline at end of file
diff --git a/libs/gui/include/gui/StreamSplitter.h b/libs/gui/include/gui/StreamSplitter.h
index 8176f753c3..28237b6940 100644
--- a/libs/gui/include/gui/StreamSplitter.h
+++ b/libs/gui/include/gui/StreamSplitter.h
@@ -153,8 +153,6 @@ private:
size_t mReleaseCount;
};
- friend class sp<StreamSplitter>;
-
// Only called from createSplitter
explicit StreamSplitter(const sp<IGraphicBufferConsumer>& inputQueue);
diff --git a/libs/gui/include/gui/SurfaceComposerClient.h b/libs/gui/include/gui/SurfaceComposerClient.h
index 10225cc114..60f16ae902 100644
--- a/libs/gui/include/gui/SurfaceComposerClient.h
+++ b/libs/gui/include/gui/SurfaceComposerClient.h
@@ -620,7 +620,7 @@ public:
Transaction& setExtendedRangeBrightness(const sp<SurfaceControl>& sc,
float currentBufferRatio, float desiredRatio);
Transaction& setDesiredHdrHeadroom(const sp<SurfaceControl>& sc, float desiredRatio);
- Transaction& setLuts(const sp<SurfaceControl>& sc, const base::unique_fd& lutFd,
+ Transaction& setLuts(const sp<SurfaceControl>& sc, base::unique_fd&& lutFd,
const std::vector<int32_t>& offsets,
const std::vector<int32_t>& dimensions,
const std::vector<int32_t>& sizes,
diff --git a/libs/renderengine/include/renderengine/LayerSettings.h b/libs/renderengine/include/renderengine/LayerSettings.h
index ac43da8dcf..ecb16b2e17 100644
--- a/libs/renderengine/include/renderengine/LayerSettings.h
+++ b/libs/renderengine/include/renderengine/LayerSettings.h
@@ -301,6 +301,10 @@ static inline void PrintTo(const LayerSettings& settings, ::std::ostream* os) {
*os << "\n .edgeExtensionEffect = " << settings.edgeExtensionEffect;
}
*os << "\n .whitePointNits = " << settings.whitePointNits;
+ if (settings.luts) {
+ *os << "\n .luts = ";
+ PrintTo(settings.luts, os);
+ }
*os << "\n}";
}
diff --git a/libs/tracing_perfetto/tracing_sdk.cpp b/libs/tracing_perfetto/tracing_sdk.cpp
index c97e900952..70b8be981b 100644
--- a/libs/tracing_perfetto/tracing_sdk.cpp
+++ b/libs/tracing_perfetto/tracing_sdk.cpp
@@ -38,7 +38,7 @@ void trace_event(int type, const PerfettoTeCategory* perfettoTeCategory,
PerfettoTeHlEmitImpl(perfettoTeCategory->impl, type,
type == PERFETTO_TE_TYPE_COUNTER ? nullptr : name,
extra->get());
- extra->pop_extra();
+ extra->clear_extras();
}
}
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index afbe20daae..98abd10bee 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -2856,18 +2856,20 @@ CompositeResultsPerDisplay SurfaceFlinger::composite(
// Tracks layer stacks of displays that are added to CompositionEngine output.
ui::DisplayMap<ui::LayerStack, ftl::Unit> outputLayerStacks;
- auto isOutputLayerStack = [&outputLayerStacks](DisplayId id, ui::LayerStack layerStack) {
- if (FlagManager::getInstance().reject_dupe_layerstacks() &&
- outputLayerStacks.contains(layerStack)) {
- // TODO: remove log and DisplayId from params once reject_dupe_layerstacks flag is
- // removed
- ALOGD("Existing layer stack ID %d output to another display %" PRIu64
- ", dropping display from outputs",
- layerStack.id, id.value);
- return true;
+ auto isUniqueOutputLayerStack = [&outputLayerStacks](DisplayId id, ui::LayerStack layerStack) {
+ if (FlagManager::getInstance().reject_dupe_layerstacks()) {
+ if (layerStack != ui::INVALID_LAYER_STACK && outputLayerStacks.contains(layerStack)) {
+ // TODO: remove log and DisplayId from params once reject_dupe_layerstacks flag is
+ // removed
+ ALOGD("Existing layer stack ID %d output to another display %" PRIu64
+ ", dropping display from outputs",
+ layerStack.id, id.value);
+ return false;
+ }
}
+
outputLayerStacks.try_emplace(layerStack);
- return false;
+ return true;
};
// Add outputs for physical displays.
@@ -2876,7 +2878,7 @@ CompositeResultsPerDisplay SurfaceFlinger::composite(
if (const auto display = getCompositionDisplayLocked(id)) {
const auto layerStack = physicalDisplayLayerStacks.get(id)->get();
- if (!isOutputLayerStack(display->getId(), layerStack)) {
+ if (isUniqueOutputLayerStack(display->getId(), layerStack)) {
refreshArgs.outputs.push_back(display);
}
}
@@ -2895,7 +2897,7 @@ CompositeResultsPerDisplay SurfaceFlinger::composite(
if (!refreshRate.isValid() ||
mScheduler->isVsyncInPhase(pacesetterTarget.frameBeginTime(), refreshRate)) {
- if (!isOutputLayerStack(display->getId(), display->getLayerStack())) {
+ if (isUniqueOutputLayerStack(display->getId(), display->getLayerStack())) {
refreshArgs.outputs.push_back(display->getCompositionDisplay());
}
}