diff options
author | Marc Mutz <marc.mutz@qt.io> | 2022-01-18 22:02:20 +0100 |
---|---|---|
committer | Marc Mutz <marc.mutz@qt.io> | 2022-05-13 17:13:46 +0200 |
commit | b9c55b5b9e983e446695f471aed1cdf14e14c88e (patch) | |
tree | 91e5d3ff12551cb0e7c39e1154bb29395e0a6af5 /src/corelib/tools/qversionnumber.cpp | |
parent | 949b85a721e9970dda2a3e3566bb7530b423beee (diff) |
QVersionNumber: de-inline QList constructor calls and resize()
The QList<int> range ctor and other QList<int> methods have percolated
up near the top of the list of Clang -ftime-trace most expensive
template instantiations in PCH libQt6Gui.so builds:
**** Templates that took longest to instantiate:
[...]
5138 ms: QList<int>::QList<const int *, true> (256 times, avg 20 ms)
4327 ms: QtPrivate::QCommonArrayOps<int>::appendIteratorRange<const int *> (256 times, avg 16 ms)
The code in 6.3 is already sufficiently different for this patch to
not be applicable there.
Task-number: QTBUG-97601
Change-Id: I4420c8c90e472ecfd679b414cc4334d2ab55cce3
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/tools/qversionnumber.cpp')
-rw-r--r-- | src/corelib/tools/qversionnumber.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/corelib/tools/qversionnumber.cpp b/src/corelib/tools/qversionnumber.cpp index 6494603a11..8002cc9d3f 100644 --- a/src/corelib/tools/qversionnumber.cpp +++ b/src/corelib/tools/qversionnumber.cpp @@ -481,6 +481,29 @@ QVersionNumber QVersionNumber::fromString(QAnyStringView string, qsizetype *suff return string.visit([=] (auto string) { return from_string(string, suffixIndex); }); } +void QVersionNumber::SegmentStorage::setListData(const QList<int> &seg) +{ + pointer_segments = new QList<int>(seg); +} + +void QVersionNumber::SegmentStorage::setListData(QList<int> &&seg) +{ + pointer_segments = new QList<int>(std::move(seg)); +} + +void QVersionNumber::SegmentStorage::setListData(const int *first, const int *last) +{ + pointer_segments = new QList<int>(first, last); +} + +void QVersionNumber::SegmentStorage::resize(qsizetype len) +{ + if (isUsingPointer()) + pointer_segments->resize(len); + else + setInlineSize(len); +} + void QVersionNumber::SegmentStorage::setVector(int len, int maj, int min, int mic) { pointer_segments = new QList<int>; |