summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAurélien Brooke <aurelien@bahiasoft.fr>2025-07-15 11:58:57 +0200
committerAurélien Brooke <aurelien@bahiasoft.fr>2025-07-21 07:47:38 +0200
commitc074f4a74131b42c1af2dc081c5902bc8a7e6e8c (patch)
tree17f2e5ad73b080e7a85aec3e233f562f6bf273de
parent1ac2386d06276dbb77ce215553f6a3d3e70f8e1f (diff)
Reduce QVarLengthArray preallocation in queued meta call
The default prealloc size of 256 is excessive for typical argument counts. Reduce the prealloc to 16 and add a reserve() in case more is needed. Amends f6211c079fa000c0d46b7912341f014669fa628a. Change-Id: I69a0d46636c41ba88cd233b2d243a6e31eb39b0e Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
-rw-r--r--src/corelib/kernel/qmetaobject.cpp3
-rw-r--r--src/corelib/kernel/qobject.cpp3
2 files changed, 4 insertions, 2 deletions
diff --git a/src/corelib/kernel/qmetaobject.cpp b/src/corelib/kernel/qmetaobject.cpp
index 7f000830e6a..cc26b6c19dc 100644
--- a/src/corelib/kernel/qmetaobject.cpp
+++ b/src/corelib/kernel/qmetaobject.cpp
@@ -2878,7 +2878,8 @@ auto QMetaMethodInvoker::invokeImpl(QMetaMethod self, void *target,
return InvokeFailReason::CouldNotQueueParameter;
}
- QVarLengthArray<const QtPrivate::QMetaTypeInterface *> argTypes;
+ QVarLengthArray<const QtPrivate::QMetaTypeInterface *, 16> argTypes;
+ argTypes.reserve(paramCount);
argTypes.emplace_back(nullptr); // return type
// fill in the meta types first
for (int i = 1; i < paramCount; ++i) {
diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp
index 790ccc29339..47d07970866 100644
--- a/src/corelib/kernel/qobject.cpp
+++ b/src/corelib/kernel/qobject.cpp
@@ -4191,7 +4191,8 @@ static void queued_activate(QObject *sender, int signal, QObjectPrivate::Connect
SlotObjectGuard slotObjectGuard { c->isSlotObject ? c->slotObj : nullptr };
locker.unlock();
- QVarLengthArray<const QtPrivate::QMetaTypeInterface *> argTypes;
+ QVarLengthArray<const QtPrivate::QMetaTypeInterface *, 16> argTypes;
+ argTypes.reserve(nargs);
argTypes.emplace_back(nullptr); // return type
for (int n = 1; n < nargs; ++n) {
argTypes.emplace_back(QMetaType(argumentTypes[n - 1]).iface()); // convert type ids to QMetaTypeInterfaces