Skip to content

Commit 6f2fe0b

Browse files
committed
Improve performance in connection-tree
1 parent 6300c8f commit 6f2fe0b

File tree

5 files changed

+23
-28
lines changed

5 files changed

+23
-28
lines changed

src/modules/connections-tree/items/databaseitem.cpp

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ QString DatabaseItem::getDisplayName() const
3838
} else if (m_keys->isEmpty()) {
3939
return m_name;
4040
} else {
41-
return QString("%1 (%2/%3)").arg(m_name).arg(childCount()).arg(m_keysCount);
41+
return QString("%1 (%2/%3)").arg(m_name).arg(m_rawKeys.size()).arg(m_keysCount);
4242
}
4343
}
4444

@@ -214,6 +214,8 @@ QSharedPointer<DatabaseKeys> DatabaseItem::KeysTreeRenderer::renderKeys(QSharedP
214214
keys.sort();
215215
qDebug() << "Keys sorted in: " << timer.elapsed() << " ms";
216216
QSharedPointer<QList<QSharedPointer<TreeItem>>> result(new QList<QSharedPointer<TreeItem>>());
217+
QSharedPointer<QHash<QString, QSharedPointer<NamespaceItem>>> rootNamespaces(
218+
new QHash<QString, QSharedPointer<NamespaceItem>>());
217219

218220
//render
219221
timer.restart();
@@ -228,7 +230,8 @@ QSharedPointer<DatabaseKeys> DatabaseItem::KeysTreeRenderer::renderKeys(QSharedP
228230

229231
renderNamaspacedKey(QSharedPointer<NamespaceItem>(),
230232
rawKey, rawKey, operations,
231-
namespaceSeparator, result, parent);
233+
namespaceSeparator, result, parent,
234+
rootNamespaces);
232235
}
233236
qDebug() << "Tree builded in: " << timer.elapsed() << " ms";
234237
return result;
@@ -240,7 +243,8 @@ void DatabaseItem::KeysTreeRenderer::renderNamaspacedKey(QSharedPointer<Namespac
240243
QSharedPointer<Operations> m_operations,
241244
const QString& m_namespaceSeparator,
242245
QSharedPointer<DatabaseKeys> m_result,
243-
QSharedPointer<DatabaseItem> db)
246+
QSharedPointer<DatabaseItem> db,
247+
QSharedPointer<QHash<QString, QSharedPointer<NamespaceItem> > > m_rootNamespaces)
244248
{
245249
QWeakPointer<TreeItem> currentParent = (currItem.isNull())? db.staticCast<TreeItem>().toWeakRef() :
246250
currItem.staticCast<TreeItem>().toWeakRef();
@@ -259,34 +263,25 @@ void DatabaseItem::KeysTreeRenderer::renderNamaspacedKey(QSharedPointer<Namespac
259263
}
260264

261265
QString firstNamespaceName = notProcessedKeyPart.mid(0, indexOfNaspaceSeparator);
262-
263266
QSharedPointer<NamespaceItem> namespaceItem;
264267

265-
if (currItem.isNull()) {
266-
int size = m_result->size();
267-
QSharedPointer<TreeItem> child;
268-
269-
for (int i=0; i < size; ++i)
270-
{
271-
child = (*m_result)[i];
272-
if (typeid(NamespaceItem)==typeid(*child)
273-
&& child->getDisplayName() == firstNamespaceName) {
274-
namespaceItem = qSharedPointerCast<NamespaceItem>(child);
275-
break;
276-
}
277-
}
278-
} else {
268+
if (currItem.isNull() && m_rootNamespaces->contains(firstNamespaceName)) {
269+
namespaceItem = (*m_rootNamespaces)[firstNamespaceName];
270+
} else if (!currItem.isNull()) {
279271
namespaceItem = currItem->findChildNamespace(firstNamespaceName);
280272
}
281273

282274
if (namespaceItem.isNull()) {
283275
namespaceItem = QSharedPointer<NamespaceItem>(
284276
new NamespaceItem(firstNamespaceName, m_operations, currentParent));
285277

286-
if (currItem.isNull()) m_result->push_back(namespaceItem);
278+
if (currItem.isNull()) {
279+
m_result->push_back(namespaceItem);
280+
m_rootNamespaces->insert(namespaceItem->getDisplayName(), namespaceItem);
281+
}
287282
else currItem->append(namespaceItem);
288283
}
289284

290285
renderNamaspacedKey(namespaceItem, notProcessedKeyPart.mid(indexOfNaspaceSeparator+m_namespaceSeparator.length()),
291-
fullKey, m_operations, m_namespaceSeparator, m_result, db);
286+
fullKey, m_operations, m_namespaceSeparator, m_result, db, m_rootNamespaces);
292287
}

src/modules/connections-tree/items/databaseitem.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,9 @@ protected slots:
6666
QSharedPointer<Operations> operations,
6767
const QString& namespaceSeparator,
6868
QSharedPointer<DatabaseKeys> m_result,
69-
QSharedPointer<DatabaseItem>
70-
);
69+
QSharedPointer<DatabaseItem>,
70+
QSharedPointer<QHash<QString, QSharedPointer<NamespaceItem>>> m_rootNamespaces
71+
);
7172
};
7273
private:
7374
QString m_name;

src/modules/connections-tree/items/namespaceitem.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,12 @@ NamespaceItem::NamespaceItem(const QString &fullPath,
1212
m_parent(parent),
1313
m_locked(false)
1414
{
15-
15+
m_displayName = m_fullPath.mid(m_fullPath.lastIndexOf(m_operations->getNamespaceSeparator())+1);
1616
}
1717

1818
QString NamespaceItem::getDisplayName() const
19-
{
20-
int lastIndex = m_fullPath.lastIndexOf(m_operations->getNamespaceSeparator());
21-
22-
return m_fullPath.mid(lastIndex+1);
19+
{
20+
return m_displayName;
2321
}
2422

2523
QIcon NamespaceItem::getIcon() const

src/modules/connections-tree/items/namespaceitem.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ namespace ConnectionsTree {
2828

2929
private:
3030
QString m_fullPath;
31+
QString m_displayName;
3132
QSharedPointer<Operations> m_operations;
3233
QWeakPointer<TreeItem> m_parent;
3334
bool m_locked;

tests/unit_tests/testcases/connections-tree/test_databaseitem.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ void TestDatabaseItem::testLoadKeys()
4949
QCOMPARE(spy.count(), 1);
5050
QCOMPARE(item->childCount(), (unsigned int)1000001);
5151
QCOMPARE(actualResult, true);
52-
QCOMPARE(item->getDisplayName(), QString("test-db (1000001/55)"));
52+
QCOMPARE(item->getDisplayName(), QString("test-db (1000002/55)"));
5353
QCOMPARE(item->getIcon().isNull(), false);
5454
QCOMPARE(item->getAllChilds().isEmpty(), false);
5555
QCOMPARE(item->isEnabled(), true);

0 commit comments

Comments
 (0)