diff options
author | Arttu Tarkiainen <arttu.tarkiainen@qt.io> | 2022-09-30 15:06:45 +0300 |
---|---|---|
committer | Arttu Tarkiainen <arttu.tarkiainen@qt.io> | 2022-10-11 13:55:10 +0000 |
commit | fb3a62df26331d696e1e97b3703f49199d714d08 (patch) | |
tree | 3a2e246c9cf8a0c2d301a4a64eb61dc5f52e359e /tests/auto | |
parent | 6032600abadded7d2fd4890a7cd07b36ed06e117 (diff) |
Optimize retrieving components by name
The PackageManagerCore::componentByName(const QString &name)
-function is called repeatedly by the InstallerCalculator class
and at minimum once for each install script, because we
automatically inject a snippet which stores the return value
of the function in the 'component' variable for the script context.
Create a <name, component> hash once per each component model reset
to make the lookups faster:
* This avoids constructing a flat list of components and all
their descendants again and again when calling the function.
* The linear lookup from the component list is slow because it
calls componentMatches() for each element until the satisfactory
component was found or the list ends.
* The average time complexity of the key lookup from the QHash
is constant even for large hashes.
Task-number: QTIFW-2790
Change-Id: I580d28f78ac6681d5bcbfbad970002b49de1a830
Reviewed-by: Katja Marttila <katja.marttila@qt.io>
Diffstat (limited to 'tests/auto')
-rw-r--r-- | tests/auto/installer/solver/tst_solver.cpp | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/tests/auto/installer/solver/tst_solver.cpp b/tests/auto/installer/solver/tst_solver.cpp index 8b5d1fdcf..bdfc4d3df 100644 --- a/tests/auto/installer/solver/tst_solver.cpp +++ b/tests/auto/installer/solver/tst_solver.cpp @@ -192,8 +192,7 @@ private slots: QFETCH(QList<int>, installReason); QFETCH(AutoDependencyHash, autodependencyHash); - InstallerCalculator calc(core, core->components(PackageManagerCore::ComponentType::AllNoReplacements) - , autodependencyHash); + InstallerCalculator calc(core, autodependencyHash); calc.appendComponentsToInstall(selectedComponents); QList<Component *> result = calc.orderedComponentsToInstall(); @@ -236,7 +235,7 @@ private slots: QFETCH(QList<Component *> , selectedComponents); QFETCH(QList<Component *> , expectedResult); - InstallerCalculator calc(core, core->components(PackageManagerCore::ComponentType::AllNoReplacements), QHash<QString, QStringList>()); + InstallerCalculator calc(core, QHash<QString, QStringList>()); QTest::ignoreMessage(QtWarningMsg, "Cannot find missing dependency \"B->=2.0.0\" for \"A\"."); calc.appendComponentsToInstall(selectedComponents); |