From fa53b14796babd4ec4b44a05fa7724315a18bd63 Mon Sep 17 00:00:00 2001 From: Katja Marttila Date: Tue, 18 Jan 2022 16:17:54 +0200 Subject: 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 --- src/libs/installer/packagemanagercore_p.cpp | 2 +- src/libs/installer/uninstallercalculator.cpp | 17 +++++++---------- src/libs/installer/uninstallercalculator.h | 6 ++++-- 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 &installedComponents) +UninstallerCalculator::UninstallerCalculator(const QList &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 dependeesList = core->dependees(component); + const QList dependeesList = m_core->dependees(component); QSet dependees = QSet(dependeesList.begin(), dependeesList.end()).subtract(m_componentsToUninstall); @@ -134,17 +134,14 @@ void UninstallerCalculator::continueAppendComponentsToUninstall() { QList 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 &installedComponents); + UninstallerCalculator(const QList &installedComponents, PackageManagerCore *core); QSet componentsToUninstall() const; @@ -55,6 +56,7 @@ private: QList m_installedComponents; QSet 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 , installedComponents); QFETCH(QSet , expectedResult); - UninstallerCalculator calc(installedComponents); + UninstallerCalculator calc(installedComponents, core); calc.appendComponentsToUninstall(selectedToUninstall); QSet result = calc.componentsToUninstall(); -- cgit v1.2.3