summaryrefslogtreecommitdiffstats
path: root/src
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 /src
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>
Diffstat (limited to 'src')
-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