diff options
author | Katja Marttila <katja.marttila@qt.io> | 2022-01-18 16:17:54 +0200 |
---|---|---|
committer | Katja Marttila <katja.marttila@qt.io> | 2022-01-19 14:24:42 +0200 |
commit | fa53b14796babd4ec4b44a05fa7724315a18bd63 (patch) | |
tree | 9e01ab80ec75c21d33297e9b92a808f4bd5fc9ee | |
parent | da7d37000dc885d4f7c2d135d6ea1a080d4548f8 (diff) |
Make Updater -view checkbox selection faster
If there are lot of components installed, querying core from component
caused unnecessary performance hit. Also replaced the foreach keyword
with the preferred C++ range-based loop
Task-number: QTIFW-1021
Change-Id: I961439ba14f26fee21f201769a71319b4b98d14b
Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
-rw-r--r-- | src/libs/installer/packagemanagercore_p.cpp | 2 | ||||
-rw-r--r-- | src/libs/installer/uninstallercalculator.cpp | 17 | ||||
-rw-r--r-- | src/libs/installer/uninstallercalculator.h | 6 | ||||
-rw-r--r-- | tests/auto/installer/solver/tst_solver.cpp | 2 |
4 files changed, 13 insertions, 14 deletions
diff --git a/src/libs/installer/packagemanagercore_p.cpp b/src/libs/installer/packagemanagercore_p.cpp index 38909b4ea..18736e587 100644 --- a/src/libs/installer/packagemanagercore_p.cpp +++ b/src/libs/installer/packagemanagercore_p.cpp @@ -599,7 +599,7 @@ UninstallerCalculator *PackageManagerCorePrivate::uninstallerCalculator() const } } - pmcp->m_uninstallerCalculator = new UninstallerCalculator(installedComponents); + pmcp->m_uninstallerCalculator = new UninstallerCalculator(installedComponents, m_core); } return m_uninstallerCalculator; } diff --git a/src/libs/installer/uninstallercalculator.cpp b/src/libs/installer/uninstallercalculator.cpp index 10b44d80a..fc5620936 100644 --- a/src/libs/installer/uninstallercalculator.cpp +++ b/src/libs/installer/uninstallercalculator.cpp @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2017 The Qt Company Ltd. +** Copyright (C) 2022 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -42,8 +42,9 @@ namespace QInstaller { \internal */ -UninstallerCalculator::UninstallerCalculator(const QList<Component *> &installedComponents) +UninstallerCalculator::UninstallerCalculator(const QList<Component *> &installedComponents, PackageManagerCore *core) : m_installedComponents(installedComponents) + , m_core(core) { } @@ -60,9 +61,8 @@ void UninstallerCalculator::appendComponentToUninstall(Component *component) if (!component->isInstalled()) return; - PackageManagerCore *core = component->packageManagerCore(); // remove all already resolved dependees - const QList<Component *> dependeesList = core->dependees(component); + const QList<Component *> dependeesList = m_core->dependees(component); QSet<Component *> dependees = QSet<Component *>(dependeesList.begin(), dependeesList.end()).subtract(m_componentsToUninstall); @@ -134,17 +134,14 @@ void UninstallerCalculator::continueAppendComponentsToUninstall() { QList<Component*> unneededVirtualList; // Check for virtual components without dependees - foreach (Component *component, m_installedComponents) { + for (Component *component : qAsConst(m_installedComponents)) { if (component->isInstalled() && component->isVirtual() && !m_componentsToUninstall.contains(component)) { // Components with auto dependencies were handled in the previous step - if (!component->autoDependencies().isEmpty()) - continue; - if (component->forcedInstallation()) + if (!component->autoDependencies().isEmpty() || component->forcedInstallation()) continue; bool required = false; - PackageManagerCore *core = component->packageManagerCore(); - foreach (Component *dependee, core->dependees(component)) { + for (Component *dependee : m_core->dependees(component)) { if (dependee->isInstalled() && !m_componentsToUninstall.contains(dependee)) { required = true; break; diff --git a/src/libs/installer/uninstallercalculator.h b/src/libs/installer/uninstallercalculator.h index a684c92cc..4d1f8816a 100644 --- a/src/libs/installer/uninstallercalculator.h +++ b/src/libs/installer/uninstallercalculator.h @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2017 The Qt Company Ltd. +** Copyright (C) 2022 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -38,11 +38,12 @@ namespace QInstaller { class Component; +class PackageManagerCore; class INSTALLER_EXPORT UninstallerCalculator { public: - UninstallerCalculator(const QList<Component *> &installedComponents); + UninstallerCalculator(const QList<Component *> &installedComponents, PackageManagerCore *core); QSet<Component*> componentsToUninstall() const; @@ -55,6 +56,7 @@ private: QList<Component *> m_installedComponents; QSet<Component *> m_componentsToUninstall; + PackageManagerCore *m_core; }; } diff --git a/tests/auto/installer/solver/tst_solver.cpp b/tests/auto/installer/solver/tst_solver.cpp index d1c3aaa14..2f4e17855 100644 --- a/tests/auto/installer/solver/tst_solver.cpp +++ b/tests/auto/installer/solver/tst_solver.cpp @@ -290,7 +290,7 @@ private slots: QFETCH(QList<Component *> , installedComponents); QFETCH(QSet<Component *> , expectedResult); - UninstallerCalculator calc(installedComponents); + UninstallerCalculator calc(installedComponents, core); calc.appendComponentsToUninstall(selectedToUninstall); QSet<Component *> result = calc.componentsToUninstall(); |