From eca8f1bf988abf7337927ed175a9d5beb0d4d837 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Martins?= Date: Wed, 10 Jun 2015 12:01:11 +0100 Subject: gui: Add several QList::reserve() calls. Reduces reallocations. Change-Id: I0db16726f413a67b76a73fabd013f910ab5f5109 Reviewed-by: Marc Mutz --- src/gui/image/qpicture.cpp | 4 +++- src/gui/itemmodels/qstandarditemmodel.cpp | 5 ++++- src/gui/kernel/qdnd.cpp | 8 ++++++-- src/gui/kernel/qkeysequence.cpp | 1 + src/gui/kernel/qscreen.cpp | 1 + src/gui/kernel/qwindowsysteminterface.cpp | 1 + src/gui/painting/qbrush.cpp | 1 + src/gui/painting/qpainter.cpp | 1 + src/gui/painting/qpdf.cpp | 4 +++- src/gui/painting/qpen.cpp | 1 + src/gui/text/qcssparser.cpp | 1 + src/gui/text/qfont.cpp | 7 +------ src/gui/text/qtextdocumentlayout.cpp | 4 +++- src/gui/text/qtextengine.cpp | 1 + src/gui/text/qtextformat.cpp | 6 +++++- src/gui/text/qtextoption.cpp | 6 ++++-- src/gui/text/qzip.cpp | 4 +++- 17 files changed, 40 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/gui/image/qpicture.cpp b/src/gui/image/qpicture.cpp index b63be19153..4a1e65b20a 100644 --- a/src/gui/image/qpicture.cpp +++ b/src/gui/image/qpicture.cpp @@ -1216,7 +1216,9 @@ QList QPicture::inputFormats() static QStringList qToStringList(const QList &arr) { QStringList list; - for (int i = 0; i < arr.count(); ++i) + const int count = arr.count(); + list.reserve(count); + for (int i = 0; i < count; ++i) list.append(QString::fromLatin1(arr.at(i))); return list; } diff --git a/src/gui/itemmodels/qstandarditemmodel.cpp b/src/gui/itemmodels/qstandarditemmodel.cpp index 7dc42544eb..7ba91475f2 100644 --- a/src/gui/itemmodels/qstandarditemmodel.cpp +++ b/src/gui/itemmodels/qstandarditemmodel.cpp @@ -1803,6 +1803,7 @@ QList QStandardItem::takeRow(int row) int index = d->childIndex(row, 0); // Will return -1 if there are no columns if (index != -1) { int col_count = d->columnCount(); + items.reserve(col_count); for (int column = 0; column < col_count; ++column) { QStandardItem *ch = d->children.at(index + column); if (ch) @@ -2518,7 +2519,9 @@ QList QStandardItemModel::findItems(const QString &text, QModelIndexList indexes = match(index(0, column, QModelIndex()), Qt::DisplayRole, text, -1, flags); QList items; - for (int i = 0; i < indexes.size(); ++i) + const int numIndexes = indexes.size(); + items.reserve(numIndexes); + for (int i = 0; i < numIndexes; ++i) items.append(itemFromIndex(indexes.at(i))); return items; } diff --git a/src/gui/kernel/qdnd.cpp b/src/gui/kernel/qdnd.cpp index 3ce8ab95ec..b05da1bfd0 100644 --- a/src/gui/kernel/qdnd.cpp +++ b/src/gui/kernel/qdnd.cpp @@ -147,7 +147,9 @@ static QStringList imageReadMimeFormats() { QStringList formats; QList imageFormats = QImageReader::supportedImageFormats(); - for (int i = 0; i < imageFormats.size(); ++i) { + const int numImageFormats = imageFormats.size(); + formats.reserve(numImageFormats); + for (int i = 0; i < numImageFormats; ++i) { QString format = QLatin1String("image/"); format += QString::fromLatin1(imageFormats.at(i).toLower()); formats.append(format); @@ -166,7 +168,9 @@ static QStringList imageWriteMimeFormats() { QStringList formats; QList imageFormats = QImageWriter::supportedImageFormats(); - for (int i = 0; i < imageFormats.size(); ++i) { + const int numImageFormats = imageFormats.size(); + formats.reserve(numImageFormats); + for (int i = 0; i < numImageFormats; ++i) { QString format = QLatin1String("image/"); format += QString::fromLatin1(imageFormats.at(i).toLower()); formats.append(format); diff --git a/src/gui/kernel/qkeysequence.cpp b/src/gui/kernel/qkeysequence.cpp index 107d114dbf..dd6819c6e9 100644 --- a/src/gui/kernel/qkeysequence.cpp +++ b/src/gui/kernel/qkeysequence.cpp @@ -1534,6 +1534,7 @@ QList QKeySequence::listFromString(const QString &str, SequenceFor QList result; QStringList strings = str.split(QLatin1String("; ")); + result.reserve(strings.count()); foreach (const QString &string, strings) { result << fromString(string, format); } diff --git a/src/gui/kernel/qscreen.cpp b/src/gui/kernel/qscreen.cpp index 5785722918..1e0d4f766a 100644 --- a/src/gui/kernel/qscreen.cpp +++ b/src/gui/kernel/qscreen.cpp @@ -329,6 +329,7 @@ QList QScreen::virtualSiblings() const Q_D(const QScreen); QList platformScreens = d->platformScreen->virtualSiblings(); QList screens; + screens.reserve(platformScreens.count()); foreach (QPlatformScreen *platformScreen, platformScreens) screens << platformScreen->screen(); return screens; diff --git a/src/gui/kernel/qwindowsysteminterface.cpp b/src/gui/kernel/qwindowsysteminterface.cpp index 823387b702..17bce6c70f 100644 --- a/src/gui/kernel/qwindowsysteminterface.cpp +++ b/src/gui/kernel/qwindowsysteminterface.cpp @@ -455,6 +455,7 @@ QList QWindowSystemInterfacePrivate::convertTouchPoints Qt::TouchPointStates states; QTouchEvent::TouchPoint p; + touchPoints.reserve(points.count()); QList::const_iterator point = points.constBegin(); QList::const_iterator end = points.constEnd(); while (point != end) { diff --git a/src/gui/painting/qbrush.cpp b/src/gui/painting/qbrush.cpp index 670717c5f1..d6eb8d8a48 100644 --- a/src/gui/painting/qbrush.cpp +++ b/src/gui/painting/qbrush.cpp @@ -1163,6 +1163,7 @@ QDataStream &operator>>(QDataStream &s, QBrush &b) QColor c; s >> numStops; + stops.reserve(numStops); for (quint32 i = 0; i < numStops; ++i) { s >> n >> c; stops << QPair(n, c); diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp index c17ea9c878..f9cabe840d 100644 --- a/src/gui/painting/qpainter.cpp +++ b/src/gui/painting/qpainter.cpp @@ -7497,6 +7497,7 @@ start_lengthVariant: if (engine.option.tabs().isEmpty() && ta) { QList tabs; + tabs.reserve(tabarraylen); for (int i = 0; i < tabarraylen; i++) tabs.append(qreal(ta[i])); engine.option.setTabArray(tabs); diff --git a/src/gui/painting/qpdf.cpp b/src/gui/painting/qpdf.cpp index 6ea0800538..1389112462 100644 --- a/src/gui/painting/qpdf.cpp +++ b/src/gui/painting/qpdf.cpp @@ -1952,7 +1952,9 @@ int QPdfEnginePrivate::createShadingFunction(const QGradient *gradient, int from stops.append(QGradientStop(1, stops.at(stops.size() - 1).second)); QVector functions; - for (int i = 0; i < stops.size() - 1; ++i) { + const int numStops = stops.size(); + functions.reserve(numStops - 1); + for (int i = 0; i < numStops - 1; ++i) { int f = addXrefEntry(-1); QByteArray data; QPdf::ByteStream s(&data); diff --git a/src/gui/painting/qpen.cpp b/src/gui/painting/qpen.cpp index 6263d18b01..073d254b49 100644 --- a/src/gui/painting/qpen.cpp +++ b/src/gui/painting/qpen.cpp @@ -980,6 +980,7 @@ QDataStream &operator>>(QDataStream &s, QPen &p) quint32 numDashes; s >> numDashes; double dash; + dashPattern.reserve(numDashes); for (quint32 i = 0; i < numDashes; ++i) { s >> dash; dashPattern << dash; diff --git a/src/gui/text/qcssparser.cpp b/src/gui/text/qcssparser.cpp index 3c98cb568d..adbb3df3bf 100644 --- a/src/gui/text/qcssparser.cpp +++ b/src/gui/text/qcssparser.cpp @@ -461,6 +461,7 @@ void ValueExtractor::lengthValues(const Declaration &decl, int *m) } QList v; + v.reserve(4); for (i = 0; i < 4; i++) { v += QVariant::fromValue(datas[i]); m[i] = lengthValueFromData(datas[i], f); diff --git a/src/gui/text/qfont.cpp b/src/gui/text/qfont.cpp index ce39645246..3b55ace68d 100644 --- a/src/gui/text/qfont.cpp +++ b/src/gui/text/qfont.cpp @@ -1860,14 +1860,9 @@ void QFont::removeSubstitutions(const QString &familyName) */ QStringList QFont::substitutions() { - typedef QFontSubst::const_iterator QFontSubstConstIterator; - QFontSubst *fontSubst = globalFontSubst(); Q_ASSERT(fontSubst != 0); - QStringList ret; - const QFontSubstConstIterator cend = fontSubst->constEnd(); - for (QFontSubstConstIterator it = fontSubst->constBegin(); it != cend; ++it) - ret.append(it.key()); + QStringList ret = fontSubst->keys(); ret.sort(); return ret; diff --git a/src/gui/text/qtextdocumentlayout.cpp b/src/gui/text/qtextdocumentlayout.cpp index d7d68f01c5..7d75e649b0 100644 --- a/src/gui/text/qtextdocumentlayout.cpp +++ b/src/gui/text/qtextdocumentlayout.cpp @@ -1071,7 +1071,9 @@ void QTextDocumentLayoutPrivate::drawFrame(const QPointF &offset, QPainter *pain it = frameIteratorForYPosition(QFixed::fromReal(context.clip.top())); QList floats; - for (int i = 0; i < fd->floats.count(); ++i) + const int numFloats = fd->floats.count(); + floats.reserve(numFloats); + for (int i = 0; i < numFloats; ++i) floats.append(fd->floats.at(i)); drawFlow(off, painter, context, it, floats, &cursorBlockNeedingRepaint); diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp index 187ffa5be7..e87711ef99 100644 --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp @@ -2863,6 +2863,7 @@ QFixed QTextEngine::calculateTabWidth(int item, QFixed x) const if (!tabArray.isEmpty()) { if (isRightToLeft()) { // rebase the tabArray positions. QList newTabs; + newTabs.reserve(tabArray.count()); QList::Iterator iter = tabArray.begin(); while(iter != tabArray.end()) { QTextOption::Tab tab = *iter; diff --git a/src/gui/text/qtextformat.cpp b/src/gui/text/qtextformat.cpp index d4eb1a4b0b..a6b0804023 100644 --- a/src/gui/text/qtextformat.cpp +++ b/src/gui/text/qtextformat.cpp @@ -1115,7 +1115,9 @@ void QTextFormat::setProperty(int propertyId, const QVector &value) if (!d) d = new QTextFormatPrivate; QVariantList list; - for (int i=0; iinsertProperty(propertyId, list); } @@ -2041,6 +2043,7 @@ QTextBlockFormat::QTextBlockFormat(const QTextFormat &fmt) void QTextBlockFormat::setTabPositions(const QList &tabs) { QList list; + list.reserve(tabs.count()); QList::ConstIterator iter = tabs.constBegin(); while (iter != tabs.constEnd()) { QVariant v; @@ -2065,6 +2068,7 @@ QList QTextBlockFormat::tabPositions() const QList answer; QList variantsList = qvariant_cast >(variant); QList::Iterator iter = variantsList.begin(); + answer.reserve(variantsList.count()); while(iter != variantsList.end()) { answer.append( qvariant_cast(*iter)); ++iter; diff --git a/src/gui/text/qtextoption.cpp b/src/gui/text/qtextoption.cpp index dbafcfd58e..5a4f6b7954 100644 --- a/src/gui/text/qtextoption.cpp +++ b/src/gui/text/qtextoption.cpp @@ -146,6 +146,7 @@ void QTextOption::setTabArray(const QList &tabStops) d = new QTextOptionPrivate; QList tabs; QTextOption::Tab tab; + tabs.reserve(tabStops.count()); foreach (qreal pos, tabStops) { tab.position = pos; tabs.append(tab); @@ -174,10 +175,11 @@ void QTextOption::setTabs(const QList &tabStops) */ QList QTextOption::tabArray() const { + QList answer; if (!d) - return QList(); + return answer; - QList answer; + answer.reserve(d->tabStops.count()); QList::ConstIterator iter = d->tabStops.constBegin(); while(iter != d->tabStops.constEnd()) { answer.append( (*iter).position); diff --git a/src/gui/text/qzip.cpp b/src/gui/text/qzip.cpp index edd3447357..a33716ebe8 100644 --- a/src/gui/text/qzip.cpp +++ b/src/gui/text/qzip.cpp @@ -916,7 +916,9 @@ QList QZipReader::fileInfoList() const { d->scanFiles(); QList files; - for (int i = 0; i < d->fileHeaders.size(); ++i) { + const int numFileHeaders = d->fileHeaders.size(); + files.reserve(numFileHeaders); + for (int i = 0; i < numFileHeaders; ++i) { QZipReader::FileInfo fi; d->fillFileInfo(i, fi); files.append(fi); -- cgit v1.2.3