diff options
| author | Aurélien Brooke <aurelien@bahiasoft.fr> | 2025-07-15 11:58:57 +0200 |
|---|---|---|
| committer | Aurélien Brooke <aurelien@bahiasoft.fr> | 2025-07-21 07:47:38 +0200 |
| commit | c074f4a74131b42c1af2dc081c5902bc8a7e6e8c (patch) | |
| tree | 17f2e5ad73b080e7a85aec3e233f562f6bf273de | |
| parent | 1ac2386d06276dbb77ce215553f6a3d3e70f8e1f (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.cpp | 3 | ||||
| -rw-r--r-- | src/corelib/kernel/qobject.cpp | 3 |
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 |
