diff options
author | Anton Kudryavtsev <a.kudryavtsev@netris.ru> | 2016-05-05 14:38:16 +0300 |
---|---|---|
committer | Anton Kudryavtsev <a.kudryavtsev@netris.ru> | 2016-05-27 10:20:45 +0000 |
commit | 8b99e2019a860d31e49e0fbe9bcfd9981dc2b768 (patch) | |
tree | 5676e47db0f57eef4da6a42e58d40e3203c1e283 /src/imports | |
parent | 818abf6a8cc9c862c10e14700f41b63006e9ecca (diff) |
Imports: de-duplicate some expensive calls
QMetaMethod::parameterNames() contains internal loop,
and we had quadratic behavior. Since operator[] was used
with temp object, also we had detach()ing.
QUrl::path() contains memory allocation.
To avoid these issues cache results of functions.
Change-Id: Ie4c3f0573a000342aff44de0dd4f744a146bb935
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/imports')
-rw-r--r-- | src/imports/folderlistmodel/qquickfolderlistmodel.cpp | 5 | ||||
-rw-r--r-- | src/imports/statemachine/signaltransition.cpp | 3 |
2 files changed, 5 insertions, 3 deletions
diff --git a/src/imports/folderlistmodel/qquickfolderlistmodel.cpp b/src/imports/folderlistmodel/qquickfolderlistmodel.cpp index 66af37c40c..1c94fddecf 100644 --- a/src/imports/folderlistmodel/qquickfolderlistmodel.cpp +++ b/src/imports/folderlistmodel/qquickfolderlistmodel.cpp @@ -491,10 +491,11 @@ QUrl QQuickFolderListModel::parentFolder() const return QUrl(); localFile = dir.path(); } else { - const int pos = d->currentDir.path().lastIndexOf(QLatin1Char('/')); + const QString path = d->currentDir.path(); + const int pos = path.lastIndexOf(QLatin1Char('/')); if (pos <= 0) return QUrl(); - localFile = d->currentDir.path().left(pos); + localFile = path.left(pos); } return QUrl::fromLocalFile(localFile); } diff --git a/src/imports/statemachine/signaltransition.cpp b/src/imports/statemachine/signaltransition.cpp index 47efc9ec15..508e1e3685 100644 --- a/src/imports/statemachine/signaltransition.cpp +++ b/src/imports/statemachine/signaltransition.cpp @@ -78,8 +78,9 @@ bool SignalTransition::eventTest(QEvent *event) // Set arguments as context properties int count = e->arguments().count(); QMetaMethod metaMethod = e->sender()->metaObject()->method(e->signalIndex()); + const auto parameterNames = metaMethod.parameterNames(); for (int i = 0; i < count; i++) - context.setContextProperty(metaMethod.parameterNames()[i], QVariant::fromValue(e->arguments().at(i))); + context.setContextProperty(parameterNames[i], QVariant::fromValue(e->arguments().at(i))); QQmlExpression expr(m_guard, &context, this); QVariant result = expr.evaluate(); |