aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnton Kudryavtsev <a.kudryavtsev@netris.ru>2016-01-15 15:31:00 +0300
committerAnton Kudryavtsev <a.kudryavtsev@netris.ru>2016-01-18 07:53:43 +0000
commitf4d1a471bb87dd4d4bb79b10e8dc434d707711bd (patch)
treec7ac9009009a293abb88bdf95533c39fca714128
parent9e980750c6647ffcf2cb95e95e63fa8335924866 (diff)
Qml: fix expensive iteration over QHash::keys() and QMap::keys()
Change-Id: I7bb5dd3b49b9f3a638f81156a02d999dbbd932f3 Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
-rw-r--r--src/qml/jsruntime/qv4runtime.cpp6
-rw-r--r--src/qml/qml/qqmltypeloader.cpp5
-rw-r--r--src/qml/types/qqmllistmodel.cpp13
3 files changed, 10 insertions, 14 deletions
diff --git a/src/qml/jsruntime/qv4runtime.cpp b/src/qml/jsruntime/qv4runtime.cpp
index a1bcec4987..2b133ea59c 100644
--- a/src/qml/jsruntime/qv4runtime.cpp
+++ b/src/qml/jsruntime/qv4runtime.cpp
@@ -154,14 +154,14 @@ struct RuntimeCounters::Data {
buf.open(QIODevice::WriteOnly);
QTextStream outs(&buf);
QList<Line> lines;
- foreach (const char *func, counters.keys()) {
- const Counters &fCount = counters[func];
+ for (auto it = counters.cbegin(), end = counters.cend(); it != end; ++it) {
+ const Counters &fCount = it.value();
for (int i = 0, ei = fCount.size(); i != ei; ++i) {
quint64 count = fCount[i];
if (!count)
continue;
Line line;
- line.func = func;
+ line.func = it.key();
unmangle(i, line.tag1, line.tag2);
line.count = count;
lines.append(line);
diff --git a/src/qml/qml/qqmltypeloader.cpp b/src/qml/qml/qqmltypeloader.cpp
index 10be80ed0c..30a4512654 100644
--- a/src/qml/qml/qqmltypeloader.cpp
+++ b/src/qml/qml/qqmltypeloader.cpp
@@ -2225,7 +2225,10 @@ void QQmlTypeData::allDependenciesDone()
for ( ; it != end; ++it) {
if (*it == 0) {
// This import was not resolved
- foreach (const QV4::CompiledData::Import *import, m_unresolvedImports.keys()) {
+ for (auto keyIt = m_unresolvedImports.keyBegin(),
+ keyEnd = m_unresolvedImports.keyEnd();
+ keyIt != keyEnd; ++keyIt) {
+ const QV4::CompiledData::Import *import = *keyIt;
QQmlError error;
error.setDescription(QQmlTypeLoader::tr("module \"%1\" is not installed").arg(stringAt(import->uriIndex)));
error.setUrl(m_importCache.baseUrl());
diff --git a/src/qml/types/qqmllistmodel.cpp b/src/qml/types/qqmllistmodel.cpp
index a4c0f7043f..28462006a6 100644
--- a/src/qml/types/qqmllistmodel.cpp
+++ b/src/qml/types/qqmllistmodel.cpp
@@ -1399,13 +1399,8 @@ void DynamicRoleModelNode::sync(DynamicRoleModelNode *src, DynamicRoleModelNode
void DynamicRoleModelNode::updateValues(const QVariantMap &object, QVector<int> &roles)
{
- const QList<QString> &keys = object.keys();
-
- QList<QString>::const_iterator it = keys.begin();
- QList<QString>::const_iterator end = keys.end();
-
- while (it != end) {
- const QString &key = *it;
+ for (auto it = object.cbegin(), end = object.cend(); it != end; ++it) {
+ const QString &key = it.key();
int roleIndex = m_owner->m_roles.indexOf(key);
if (roleIndex == -1) {
@@ -1413,7 +1408,7 @@ void DynamicRoleModelNode::updateValues(const QVariantMap &object, QVector<int>
m_owner->m_roles.append(key);
}
- QVariant value = object[key];
+ QVariant value = it.value();
// A JS array/object is translated into a (hierarchical) QQmlListModel,
// so translate to a variant map/list first with toVariant().
@@ -1444,8 +1439,6 @@ void DynamicRoleModelNode::updateValues(const QVariantMap &object, QVector<int>
if (m_meta->setValue(keyUtf8, value))
roles << roleIndex;
-
- ++it;
}
}