From 8b99e2019a860d31e49e0fbe9bcfd9981dc2b768 Mon Sep 17 00:00:00 2001 From: Anton Kudryavtsev Date: Thu, 5 May 2016 14:38:16 +0300 Subject: 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 --- src/imports/folderlistmodel/qquickfolderlistmodel.cpp | 5 +++-- src/imports/statemachine/signaltransition.cpp | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) (limited to 'src/imports') 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(); -- cgit v1.2.3