on xenial help sign in
Added suggested optimization from MP-comment caching a map and string to avoid superfluous dereferencing.
bca90c1Mirco Müller
plugins/Greeter/Unity/Launcher/launchermodelas.cpp+8−7
@@ -200,15 +200,16 @@ void LauncherModel::refresh()
200 Q_FOREACH (LauncherItem* item, m_list) {
200 Q_FOREACH (LauncherItem* item, m_list) {
201 bool found = false;
201 bool found = false;
202 Q_FOREACH(const QVariant &asItem, items) {
202 Q_FOREACH(const QVariant &asItem, items) {
203+ QMap<QString, QVariant> cachedMap = asItem.toMap();
203− if (asItem.toMap().value("id").toString() == item->appId()) {
204+ if (cachedMap.value("id").toString() == item->appId()) {
204 // Only keep and update it if we either show unpinned or it is pinned
205 // Only keep and update it if we either show unpinned or it is pinned
205− if (!m_onlyPinned || asItem.toMap().value("pinned").toBool()) {
206+ if (!m_onlyPinned || cachedMap.value("pinned").toBool()) {
206 found = true;
207 found = true;
207− item->setName(asItem.toMap().value("name").toString());
208+ item->setName(cachedMap.value("name").toString());
208− item->setIcon(asItem.toMap().value("icon").toString());
209+ item->setIcon(cachedMap.value("icon").toString());
209− item->setCount(asItem.toMap().value("count").toInt());
210+ item->setCount(cachedMap.value("count").toInt());
210− item->setCountVisible(asItem.toMap().value("countVisible").toBool());
211+ item->setCountVisible(cachedMap.value("countVisible").toBool());
211− item->setProgress(asItem.toMap().value("progress").toInt());
212+ item->setProgress(cachedMap.value("progress").toInt());
212 int idx = m_list.indexOf(item);
213 int idx = m_list.indexOf(item);
213 Q_EMIT dataChanged(index(idx), index(idx), QVector<int>() << RoleName << RoleIcon);
214 Q_EMIT dataChanged(index(idx), index(idx), QVector<int>() << RoleName << RoleIcon);
214 }
215 }
plugins/Unity/Launcher/dbusinterface.cpp+7−6
@@ -160,31 +160,32 @@ bool DBusInterface::handleMessage(const QDBusMessage& message, const QDBusConnec
160 LauncherItem *item = static_cast<LauncherItem*>(m_launcherModel->get(index));
160 LauncherItem *item = static_cast<LauncherItem*>(m_launcherModel->get(index));
161
161
162 QVariantList retval;
162 QVariantList retval;
163+ QString cachedString = message.arguments()[1].toString();
163 if (message.member() == "Get") {
164 if (message.member() == "Get") {
164 if (!item) {
165 if (!item) {
165 return false;
166 return false;
166 }
167 }
167− if (message.arguments()[1].toString() == "count") {
168+ if (cachedString == "count") {
168 retval.append(QVariant::fromValue(QDBusVariant(item->count())));
169 retval.append(QVariant::fromValue(QDBusVariant(item->count())));
169− } else if (message.arguments()[1].toString() == "countVisible") {
170+ } else if (cachedString == "countVisible") {
170 retval.append(QVariant::fromValue(QDBusVariant(item->countVisible())));
171 retval.append(QVariant::fromValue(QDBusVariant(item->countVisible())));
171− } else if (message.arguments()[1].toString() == "progress") {
172+ } else if (cachedString == "progress") {
172 retval.append(QVariant::fromValue(QDBusVariant(item->progress())));
173 retval.append(QVariant::fromValue(QDBusVariant(item->progress())));
173 }
174 }
174 } else if (message.member() == "Set") {
175 } else if (message.member() == "Set") {
175− if (message.arguments()[1].toString() == "count") {
176+ if (cachedString == "count") {
176 int newCount = message.arguments()[2].value<QDBusVariant>().variant().toInt();
177 int newCount = message.arguments()[2].value<QDBusVariant>().variant().toInt();
177 if (!item || newCount != item->count()) {
178 if (!item || newCount != item->count()) {
178 Q_EMIT countChanged(appid, newCount);
179 Q_EMIT countChanged(appid, newCount);
179 notifyPropertyChanged("com.canonical.Unity.Launcher.Item", encodeAppId(appid), "count", QVariant(newCount));
180 notifyPropertyChanged("com.canonical.Unity.Launcher.Item", encodeAppId(appid), "count", QVariant(newCount));
180 }
181 }
181− } else if (message.arguments()[1].toString() == "countVisible") {
182+ } else if (cachedString == "countVisible") {
182 bool newVisible = message.arguments()[2].value<QDBusVariant>().variant().toBool();
183 bool newVisible = message.arguments()[2].value<QDBusVariant>().variant().toBool();
183 if (!item || newVisible != item->countVisible()) {
184 if (!item || newVisible != item->countVisible()) {
184 Q_EMIT countVisibleChanged(appid, newVisible);
185 Q_EMIT countVisibleChanged(appid, newVisible);
185 notifyPropertyChanged("com.canonical.Unity.Launcher.Item", encodeAppId(appid), "countVisible", newVisible);
186 notifyPropertyChanged("com.canonical.Unity.Launcher.Item", encodeAppId(appid), "countVisible", newVisible);
186 }
187 }
187− } else if (message.arguments()[1].toString() == "progress") {
188+ } else if (cachedString == "progress") {
188 int newProgress = message.arguments()[2].value<QDBusVariant>().variant().toInt();
189 int newProgress = message.arguments()[2].value<QDBusVariant>().variant().toInt();
189 if (!item || newProgress != item->progress()) {
190 if (!item || newProgress != item->progress()) {
190 Q_EMIT progressChanged(appid, newProgress);
191 Q_EMIT progressChanged(appid, newProgress);