aboutsummaryrefslogtreecommitdiffstats
path: root/tests/benchmarks
Commit message (Collapse)AuthorAgeFilesLines
* CMake: Don't enable ASM languageJoerg Bornemann2025-05-022-2/+2
| | | | | | | | Remove the ASM language where no assembler files are used. Pick-to: 6.5 6.8 6.9 Change-Id: I3c94f798803b054a432fc2c8d6d65c665572a202 Reviewed-by: Alexandru Croitor <[email protected]>
* Tests: include QTest, not QtTestGiuseppe D'Angelo2025-04-157-7/+7
| | | | | | | | | | | | | Never use module-wide inclusions. They blow up build times. For QtTest this is usually just a typo (QTest was meant instead). Add missing includes as needed. In the diffs I've spotted other huge inclusions (QtQuick, QtQml), but those need more attention. Task-number: QTQAINFRA-7110 Pick-to: 6.9 6.8 Change-Id: I74bf3fe212f50a7a3a6af2b1c80bbcaabc2516d7 Reviewed-by: Fabian Kosmale <[email protected]>
* tst_bench_qsggeometry: Add missing QElapsedTimer includeFabian Kosmale2025-03-281-0/+1
| | | | | Change-Id: I706714484d65b58360d72c7b680404f47285870e Reviewed-by: Giuseppe D'Angelo <[email protected]>
* tst_librarymetrics_performance: include what you use (QElapsedTimer)Giuseppe D'Angelo2025-03-281-0/+1
| | | | | | Pick-to: 6.9 6.8 6.5 Change-Id: I9a78932fe57029d53224ed190931c5db20f247fc Reviewed-by: Ulf Hermann <[email protected]>
* tst_qmllint_benchmark: also time "real" projectsSami Shalayel2025-03-192-5/+119
| | | | | | | | | | | | | | | | | | | | | Add an option to benchmark files from "real" QDS projects. The QDS projects do not exist in the qtdeclarative repository, so the paths to the demo repos should be set via environment variable. Also, the QDS specific QML Modules only exist in the QDS installation path, so add an environment variable for this too. Finally, some extra paths are needed for the examples to run, so add a third environment variable to enable the heuristics that adds probable import paths needed by the examples. Add a check to make sure the import paths were passed correctly: there should not be any 'Failed to import' messages, otherwise we end up benchmarking the wrong thing. Add a script that prints the environment for the benchmarks, so that you can copy paste the output into Qt Creator's run environment widget. Task-number: QTBUG-133349 Change-Id: I974fbeb5d87ff36bd5eea0b5c83d7fae73d00ec3 Reviewed-by: Ulf Hermann <[email protected]>
* QuickControls: Add vertical and horizontal header view delegatesMohammadHossein Qanbari2025-03-062-20/+62
| | | | | | | | | | | | | | | | | | | | | | Implement QQuickHeaderViewDelegate as the base class for header view delegates, introducing 'headerView' and 'orientation' properties. Separate previous delegate settings into HorizontalHeaderViewDelegate and VerticalHeaderViewDelegate components for Basic, Fusion, and Imagine styles. This change improves the modularity and reusability of header view delegates across different styles. It also allows for more consistent behavior and easier customization of header views. A test suite has been added to verify default property settings and ensure the new components work without warnings. [ChangeLog][QtQuickControls][HeaderView] Add dedicated delegate components for vertical and horizontal header views. Task-number: QTBUG-70326 Change-Id: I8831e77f6909bdae13c3a7262145ab156f63a59a Reviewed-by: Mitch Curtis <[email protected]>
* QQmlJSLinterCodeGen: disable compiler checks when category is disabledSami Shalayel2025-02-181-1/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Don't run the compiler checks (QQmlJSStorageGeneralizer, QQmlJSStorageInitializer, QQmlJSShadowCheck) when the qmlCompiler category is disabled. They take quite some time and their result is ignored anyway if the qmlCompiler category is disabled. This allows to make the propertyStressTestInts benchmark faster, while the performance of the others stay the same. Times in milliseconds on my laptop, on a release build, before and after this patch: function,file,runtime_before -> runtime_after noPlugins,propertyStressTestInts.ui.qml,489 -> 323 noPlugins,propertyStressTestItems.ui.qml,612 -> 331 noPlugins,longQmlFile.ui.qml,175 -> 171 noPlugins,deeplyNested.ui.qml,197 -> 192 allPlugins,propertyStressTestInts.ui.qml, 493 -> 328 allPlugins,propertyStressTestItems.ui.qml, 630 -> 378 allPlugins,longQmlFile.ui.qml,192 -> 190 allPlugins,deeplyNested.ui.qml,215 -> 209 onlyQdsLintPlugin,propertyStressTestInts.ui.qml,535 -> 325 onlyQdsLintPlugin,propertyStressTestItems.ui.qml, 625 -> 336 onlyQdsLintPlugin,longQmlFile.ui.qml, 200 -> 180 onlyQdsLintPlugin,deeplyNested.ui.qml, 219 -> 206 Add another benchmark where compiler warnings are enabled in case we want to optimize the compiler's runtime in the future. Task-number: QTBUG-133349 Change-Id: Ia286d06c610b5134659f9c67ea18de3ca63955e9 Reviewed-by: Olivier De Cannière <[email protected]>
* qmllint: add benchmarkSami Shalayel2025-02-187-0/+7625
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add a benchmark to see how fast/slow QQmlJSLinter::lintFile() is. The benchmark are done on four QML files, one that is deeply nested, one which is large, and two that stresstest the propertypasses. The files are called .ui.qml to also trigger the qdslintplugin, and are linted with no plugins, all plugins and only the qdslintplugin. Times in milliseconds on my laptop, on a release build, mean over three executions: function,file,runtime_mean noPlugins,propertyStressTestInts.ui.qml,535 noPlugins,propertyStressTestItems.ui.qml,710.6666666666666 noPlugins,longQmlFile.ui.qml,196.33333333333334 noPlugins,deeplyNested.ui.qml,204.33333333333334 allPlugins,propertyStressTestInts.ui.qml,557.3333333333334 allPlugins,propertyStressTestItems.ui.qml,730.3333333333334 allPlugins,longQmlFile.ui.qml,217.66666666666666 allPlugins,deeplyNested.ui.qml,220.33333333333334 onlyQdsLintPlugin,propertyStressTestInts.ui.qml,536.6666666666666 onlyQdsLintPlugin,propertyStressTestItems.ui.qml,710 onlyQdsLintPlugin,longQmlFile.ui.qml,199 onlyQdsLintPlugin,deeplyNested.ui.qml,213.33333333333334 Task-number: QTBUG-133349 Change-Id: I7ec1f43694947e4878d1d2fa9df0416ed26fdc42 Reviewed-by: Fabian Kosmale <[email protected]> Reviewed-by: Ulf Hermann <[email protected]>
* qmldom: add Minimal DomCreationOption for QDSSami Shalayel2025-01-161-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | DOM construction time is quite slow for the QDS use case, so add a new minimal DomCreationOptions that ignores comments (as QDS has no need for comments) because comments seem to take some time to construct. Add the Minimal DomCreationOptions to the Benchmark to show that it is faster then using the Default DomCreationOptions. Measured on my machine, using a release build: File | Default (ms) | Minimal (ms) | Speedup tiger.qml | 83 | 38 | 2.18 deeplyNested.qml | 438 | 12 | 36.5 The 36.5 speedup does look weird at first, but a quick look in the profiler shows that we spend 95% of the benchmark time for deeplyNested.qml with Default DomCreationOptions in * Path::component() and * DomItem::field() while trying to iterate on the Qml Document to find the comments. So its not a bug, its just the linear complexity of Path::component() and DomItem::field() that proves to be inadequate in our case: * Path::component(i) returns the i.th path component, and needs to iterate through all components to find it * DomItem::field(f) returns the value of the field f, and uses iterateDirectSubpaths() which is linear in the number of total fields, and it seems the laziness there might not be working as expected. Pick-to: 6.8 6.9 Task-number: QTBUG-92889 Change-Id: I51168b68e930ed14d1751cf0f6028b1b2879b774 Reviewed-by: Fabian Kosmale <[email protected]> Reviewed-by: Olivier De Cannière <[email protected]>
* tst_qmldomconstruction: adapt the benchmark to lazinessSami Shalayel2025-01-161-0/+3
| | | | | | | | | | Make the benchmark populate the loaded QML file for it to give comparable results (not all DomCreationOptions create lazy QMl files). Pick-to: 6.8 6.9 Task-number: QTBUG-92889 Change-Id: I37b6692499e8337ecab496ac7d2a9888d70df57c Reviewed-by: Olivier De Cannière <[email protected]>
* qmldom: simplify DomCreationOptionSami Shalayel2025-01-151-17/+10
| | | | | | | | | | | | Not all combinations are actually supported, so replace DomCreationOptions with DomCreationOption. We only need 2 options: a Default one for qmlformat and an extended one with semantic analysis, script elements and recovery elements. Task-number: QTBUG-92889 Change-Id: I7a2d52df1dd7b4186eab73d3bd11c9818c25f543 Reviewed-by: Olivier De Cannière <[email protected]>
* Add support for partial rendering of geometry nodesStan Morris2024-12-183-0/+280
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Enable changing vertex and index counts after calling allocate() so that it is not necessary to re-allocate memory to render a different number of vertices. Previously, it was only possible to change the number of vertices and indices by calling allocate(). Resizing a geometry node with allocate() is expensive: all vertex and index data must be re-initialized and malloc() may need to find another memory block. If there are a large number of vertices or indices, this takes a lot of processor cycles, all during graph sync time while the main thread is blocked. Two new functions, setVertexCount() and setIndexCount(), allow resizing the geometry object without reallocating memory. The user is responsible for ensuring that the requested counts do not exceed the number originally allocated using allocate(). The usage pattern is similar to QList::reserve(): allocate the maximum number of vertices or indices that will be needed and call setVertexCount() or setIndexCount() to set the counts to what is currently needed. Consider the use case of drawing a heart rate monitor graph. The zigzag tracing line of the graph continuously grows longer from left to right, drawing new data without erasing old data until the line reaches the right side of the graph area, then starting over from the left. As the line grows, most data remains unchanged; the only vertices that need modification are ones that are newly exposed by increasing the vertex count. The benchmark "tst_bench_qsggeometry" shows the difference on different processors between resizing via allocate() and setVertexCount(), as in the heart rate graph use case described above. Vertices allocate() setVertexCount() i.MX6 800 MHz 2-17K | 1.7 msecs | 7 μs 20K-37K | 6.0 msecs | 10 μs 40K-57K | 10.1 msecs | 16 μs Intel i5-8265U 3.8Ghz 2-17K | 166 μs | 0.20 μs 20K-37K | 644 μs | 0.44 μs 40K-57K | 1134 μs | 0.85 μs AMD 7945HX 5.5GHz 2-17K | 34 μs | 0.06 μs 20K-37K | 140 μs | 0.09 μs 40K-57K | 244 μs | 0.12 μs The benchmark for allocate() is slow because allocate() calls malloc() and updates all vertices each time the vertex count changes whereas the benchmark for setVertexCount() only calls allocate() once and only updates newly exposed vertices when the vertex count changes. There are manual tests in the "manual/qsggeometry" folder which exercise setVertexCount() and setIndexCount() by drawing a spiral with thousands of vertices. Task-number: QTBUG-126835 Change-Id: I5a0a6c68e3b5a17ffba914f1abb5078601bc4e05 Reviewed-by: Andy Nichols <[email protected]>
* Controls: Add TableViewDelegateMohammadHossein Qanbari2024-11-272-2/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch introduces TableViewDelegate to the Controls module. Key features: - Ready-made delegate assignable to TableView - Handles table drawing using predefined styles - Usable without customization - Implements all required properties set by TableView - Provides API for changing background and label Test Suite: - Verifies TableViewDelegate properties and functionalities - Tests include: - Verification of selected, current, and content text properties - Validation of selection behavior and item clicking BLACKLISTing two tests (dragToSelect and pressAndHoldToSelect), which will be removed from the BLACKLIST in the next patch (to fix cell selection on the Android platform). Implementation derived from TreeViewDelegate, adapted for TableView use. TreeViewDelegate patch: 0ddb0d4b9b0c70c4fd4058ef4660e38fd933523e [ChangeLog][Controls] New delegate added: TableViewDelegate Fixes: QTBUG-114636 Change-Id: Ibb8b0a7622016e0c6fd58d696e507e7bb76daced Reviewed-by: Mitch Curtis <[email protected]>
* Only send a LocationChanged event for the item where geometry changedJan Arve Sæther2024-07-123-0/+161
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously, if an item changed geometry and it wasn't accessible, it would find the closest accessible ancestor, and send an accessible LocationChanged event to the closest accessible ancestor (but the accessible ancestor didn't move, so it was pointless). This also improves performance in some cases because there is no point in traversing upwards in the hierarchy to find an accessible ancestor. Therefore, the change contains both a benchmark and an autotest. Performance summary ------------------- moveItem(isActive) is 38.4x faster (72/8)/(60/256) Details ------- Config: Using QtTest library 6.9.0, Qt 6.9.0 (arm64-little_endian-lp64 shared (dynamic) release build; by Apple LLVM 15.0.0 (clang-1500.3.9.4)), macos 14.4 Without patch: RESULT : tst_bench_accessibility::moveItem():"isActive": 9.0 msecs per iteration (total: 72, iterations: 8) With patch: RESULT : tst_bench_accessibility::moveItem():"isActive": 0.23 msecs per iteration (total: 60, iterations: 256) Pick-to: 6.8 Change-Id: I1e3712ff043193705335a0e02ccbe876c915d8a4 Reviewed-by: Volker Hilsheimer <[email protected]>
* Fix test compilation issues with QtLite configurationJari Helaakoski2024-04-301-0/+4
| | | | | | | | | Now developer build tests compile, but some are not working. Functional fix will come later via separate tasks. Task-number: QTBUG-122999 Change-Id: I0a0dfcf7affb73f928b8be62b3576a6a51658488 Reviewed-by: Ulf Hermann <[email protected]>
* dom: use only one DomCreationOptions per DomEnvironmentSami Shalayel2024-03-141-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently, a DomEnvironment could load QML files with different DomCreationOptions. This makes things more complicated when loading dependencies, for example the implicit directory import might load a qmldir file that imports another module that contains a certain QML file, and then one has to remember which file triggered all of this dependency loading and what DomCreationOptions it had. In addition, there is currently no use case for something that complicated. Instead of that, move the DomCreationOptions to the DomEnvironment itself. When a DomEnvironment is used to load a file and its dependencies, it will use the DomCreationOptions set on this DomEnvironment. This ensures that all dependencies are loaded with the correct DomCreationOptions, and avoids weird bugs in qmlls features due to wrong DomCreationOptions used for dependencies. Remove the DomCreationOptions from the FileToLoad struct, adapt the DomEnvironment constructor and static factory method to expect a DomCreationOptions parameter, and change all DomUniverse::load() methods to have an extra DomCreationOptions parameter. This commit will break the formatting tests so QSKIP them, at least until the lazy-loading is done. The reason for the breakage is that the Dom eagerly loads all QML files from imports, and that takes too much time or crashes because it loads them now with the correct DomCreationOptions instead of DomCreationOption::None. For example, the formatting tests will implicitly load nestedFunctions.qml via the implicit directory import with the DomCreationOption::WithScriptExpressions and that will crash because of the nested functions, see also QTBUG-122707. Therefore QSKIP the formatting tests. Also adapt the timeout for a test that imports QtQuick.Controls.Basic, as the Dom also eagerly loads all the QML files from an imported module, which takes much more time with the DomCreationOption::WithScriptExpressions. Task-number: QTBUG-122645 Change-Id: Icb7eb6d17df15fc6ea133e014c00153df5cd1492 Reviewed-by: Fabian Kosmale <[email protected]> Reviewed-by: Qt CI Bot <[email protected]>
* Correct license for test filesLucie Gérard2024-02-27217-217/+217
| | | | | | | | | | | | | | According to QUIP-18 [1], all test files should be LicenseRef-Qt-Commercial OR GPL-3.0-only [1]: https://contribute.qt-project.org/quips/18 Pick-to: 6.7 Task-number: QTBUG-121787 Change-Id: I26d72e8de04d4c7c57b3b7838af5d033265de5ba Reviewed-by: Shawn Rutledge <[email protected]> Reviewed-by: Kai Köhne <[email protected]> Reviewed-by: Ulf Hermann <[email protected]>
* Add performance benchmark test for curve rendererEirik Aavitsland2024-02-243-0/+90
| | | | | | | | | | | | | Includes some minor tweaks to the curve renderer itself, to facilitate running it directly from C++, outside of the Shapes plugin in a Quick application. These include exporting the class, and adding an addPath method taking a QPainterPath directly, avoiding the need to construct a QQuickPath. Pick-to: 6.7 Change-Id: I91c66d8744af807bcff4132d054cff86d2453085 Reviewed-by: Qt CI Bot <[email protected]> Reviewed-by: Eskil Abrahamsen Blomfeldt <[email protected]>
* DOM refactoring. Remove LoadOptionsDmitrii Akshintsev2024-01-301-6/+4
| | | | | | | | | Only defaultLoad is being used, hence it doesn't make sense to have them at all at the current stage Task-number: QTBUG-119550 Change-Id: I761e7c55d6aaafa29d234ace4b4b65bcc46a9855 Reviewed-by: Fabian Kosmale <[email protected]>
* QtQml: Add a benchmark that runs the DeltaBlue constraint solverUlf Hermann2024-01-3015-0/+1776
| | | | | Change-Id: I4d9456dc910ade06febddb29d06e922c564bf015 Reviewed-by: Fabian Kosmale <[email protected]>
* DOM refactoring. Move loadPendingDependencies to DomEnvironmentDmitrii Akshintsev2024-01-181-2/+1
| | | | | | | | | | | | | | | | | | | One of the goals of this refactoring is to move DomTop specific functionality from DomItem API to the corresponding DomEnvironment and DomUniverse. This commit moves loading of the dependencies (which are added to the pending load queue implicitly as part of the callbacks of the loadFile when DomEnv is created without the flag "NoDependencies") to the DomEnvironment interface Moreover, once work with dependencies is happening through the DomEnvironment explicitly, it allows us to get rid of "self" parameter. Task-number: QTBUG-119550 Change-Id: Ib3deb97eabe091ffded8c8c782ee08f8024468f2 Reviewed-by: Sami Shalayel <[email protected]>
* DOM refactoring. Remove DomItem::loadItem. enable_shared_from_this for DomEnv*Dmitrii Akshintsev2024-01-181-4/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | As it was mentioned in the previous commits in the chain one of the goals of the refactoring is to introduce clearer separation of concerns. Only DomTop types are allowed to load files, hence it's arguable should be reflected in the interfaces explicitly. With the help of previous commits the relevant pieces of this function were moved to the corresponding DomEnvironment and DomUniverse types. This commit finally removes loadFile from the DomItem API. *It's also worth noting that in order to minimaze refactoring efforts and to keep the public API simple (not requiring DomItem &self argument on the top level), this commit also makes DomEnvironment a child of the std::enable_shared_from_this. This somewhat "breaks" the initial design approach inscribed in the DOM API allowing DomEnvironemt to get a shared_ptr to itself bypassing corresponding DomItem.ownerAs<> API. However, in the tradeoff of preserving consistency of the previous design and the explicitness of the interface, I would value the latter, hence I find this change acceptable. Change-Id: Ic2ce3fc80876be6bdbec93e4d273e4c6b7a2b218 Task-number: QTBUG-119550 Reviewed-by: Fabian Kosmale <[email protected]>
* QmlDom: Add const-correctnessUlf Hermann2023-09-151-1/+1
| | | | | | | | | | We almost never want non-const DomItems anywhere. There is exactly one exception: From a MutableDomItem we need to poke into the internals of the respective DomItem and const_cast them. However, MutableDomItem is to be handled with care anyway. Change-Id: I826f0669c049462beec9ad71dccb39c5191a1d3f Reviewed-by: Sami Shalayel <[email protected]>
* Move dom construction time test into BenchmarksSemih Yavuz2023-06-265-0/+6752
| | | | | | | | It takes considerable time to finish as auto test, slowing down the development speed. It should live in benchmarks. Change-Id: I4cb6f7712774a6d36e000dec713db67019d84f6e Reviewed-by: Sami Shalayel <[email protected]>
* Make the colorresolving benchmark also a benchmark for cmakeVolker Hilsheimer2023-04-271-15/+10
| | | | | | | | | | Using qt_internal_add_test for a benchmark gives it a _check target, not a _benchmark target. Use qt_internal_add_benchmark instead, link against QuickTest, and set the QUICK_TEST_SOURCE_DIR variable explicitly. Pick-to: 6.5 Change-Id: Id72f2623b7edaa538ef3ff2cb3f505506652ee5a Reviewed-by: Joerg Bornemann <[email protected]>
* QQuickMouseArea: do not overload pressed-signalSami Shalayel2023-01-241-15/+15
| | | | | | | | | | | Renames the pressed() getter of the pressed property in QQuickMouseArea to isPressed() to avoid overloading the pressed()-signal. Signals should not be overloaded. Also, it makes code generation in qmltc more complicated. Task-number: QTBUG-110029 Change-Id: I2373f4fe97b1e955b815825003bc746f2eaf43be Reviewed-by: Shawn Rutledge <[email protected]>
* Retire the qt_parse_all_argumentsAmir Masoud Abdol2023-01-2015-20/+20
| | | | | | Task-number: QTBUG-99238 Change-Id: Ia11c9cbd7c06347319ab3674ec0cd8da0214747e Reviewed-by: Alexandru Croitor <[email protected]>
* Remove "2" from Qt Quick Controls directoriesMitch Curtis2022-12-0158-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | Qt Quick Controls 2 was named that way because it was a follow-up to Qt Quick Controls 1.x. Now that Qt Quick Controls 1 is no longer supported, we don't need to have "2" in the name. Work on this was already started for the documentation in 1abdfe5d5a052f2298b7bf657513dfa7e0c66a56. By doing this renaming a few weeks before feature freeze, it won't affect the release but still results in as little time possible spent manually fixing conflicts in cherry-picks from non-LTS releases as a result of the renaming. This patch does the following: - Renames directories. - Adapts CMakeLists.txt and other files to account for the new paths. A follow-up patch will handle documentation. It does not touch library names or other user-facing stuff, as that will have to be done in Qt 7. Task-number: QTBUG-95413 Change-Id: I170d8db19033ee71e495ff0c5c1a517a41ed7634 Reviewed-by: Mitch Curtis <[email protected]>
* tst_qqmlchangeset: fix target name typo and de-duplicate testsMitch Curtis2022-11-011-2/+2
| | | | | | | | | There was a typo in the auto test's target name, but fixing it also requires renaming the benchmark which has the same name. Pick-to: 6.2 6.4 Change-Id: I8e7b6de472ed84df0917584592f28d7015618331 Reviewed-by: Fabian Kosmale <[email protected]>
* tests/benchmarks/quickcontrols2: allow opening projects in CreatorMitch Curtis2022-10-312-0/+12
| | | | | | | | | | Otherwise it's only possible to build these projects on the command line with qt-cmake-standalone-test. Task-number: QTBUG-93020 Pick-to: 6.2 6.3 6.4 Change-Id: I84e5bd2b6b3bb7cb8deac22ec417af793ae8c1d6 Reviewed-by: Alexandru Croitor <[email protected]>
* Port from container::count() and length() to size() - V5Marc Mutz2022-10-132-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a semantic patch using ClangTidyTransformator as in qtbase/df9d882d41b741fef7c5beeddb0abe9d904443d8, but extended to handle typedefs and accesses through pointers, too: const std::string o = "object"; auto hasTypeIgnoringPointer = [](auto type) { return anyOf(hasType(type), hasType(pointsTo(type))); }; auto derivedFromAnyOfClasses = [&](ArrayRef<StringRef> classes) { auto exprOfDeclaredType = [&](auto decl) { return expr(hasTypeIgnoringPointer(hasUnqualifiedDesugaredType(recordType(hasDeclaration(decl))))).bind(o); }; return exprOfDeclaredType(cxxRecordDecl(isSameOrDerivedFrom(hasAnyName(classes)))); }; auto renameMethod = [&] (ArrayRef<StringRef> classes, StringRef from, StringRef to) { return makeRule(cxxMemberCallExpr(on(derivedFromAnyOfClasses(classes)), callee(cxxMethodDecl(hasName(from), parameterCountIs(0)))), changeTo(cat(access(o, cat(to)), "()")), cat("use '", to, "' instead of '", from, "'")); }; renameMethod(<classes>, "count", "size"); renameMethod(<classes>, "length", "size"); except that on() was replaced with a matcher that doesn't ignoreParens(). a.k.a qt-port-to-std-compatible-api V5 with config Scope: 'Container'. Change-Id: I58e1b41b91c34d2e860dbb5847b3752edbfc6fc9 Reviewed-by: Qt CI Bot <[email protected]> Reviewed-by: Ulf Hermann <[email protected]>
* Port from qAsConst() to std::as_const()Marc Mutz2022-10-073-4/+4
| | | | | | | | | | | | | | We've been requiring C++17 since Qt 6.0, and our qAsConst use finally starts to bother us (QTBUG-99313), so time to port away from it now. Since qAsConst has exactly the same semantics as std::as_const (down to rvalue treatment, constexpr'ness and noexcept'ness), there's really nothing more to it than a global search-and-replace. Task-number: QTBUG-99313 Change-Id: I601bf70f020f511019ed28731ba53b14b765dbf0 Reviewed-by: Shawn Rutledge <[email protected]>
* Port from container::count() and length() to size()Marc Mutz2022-10-071-4/+4
| | | | | | | | | | | | | | | | | | | | This is a semantic patch using ClangTidyTransformator as in qtbase/df9d882d41b741fef7c5beeddb0abe9d904443d8: auto QtContainerClass = anyOf( expr(hasType(cxxRecordDecl(isSameOrDerivedFrom(hasAnyName(classes))))).bind(o), expr(hasType(namedDecl(hasAnyName(<classes>)))).bind(o)); makeRule(cxxMemberCallExpr(on(QtContainerClass), callee(cxxMethodDecl(hasAnyName({"count", "length"), parameterCountIs(0))))), changeTo(cat(access(o, cat("size"), "()"))), cat("use 'size()' instead of 'count()/length()'")) a.k.a qt-port-to-std-compatible-api with config Scope: 'Container', with the extended set of container classes recognized. Change-Id: Idb1f75dfe2323bd1d9e8b4d58d54f1b4b80c7ed7 Reviewed-by: Fabian Kosmale <[email protected]>
* Fix warning from ignoring return of [nodiscard] methodVolker Hilsheimer2022-09-181-1/+1
| | | | | | | | | | | | | Compiler warns: ignoring return value of function declared with 'nodiscard' attribute [-Wunused-result] Pick-to: 6.4 Change-Id: If10d41fad7dc77b36eecc8725de178b0908f32de Reviewed-by: Mitch Curtis <[email protected]> Reviewed-by: Qt CI Bot <[email protected]> Reviewed-by: Ulf Hermann <[email protected]>
* Change the license of all CMakeLists.txt and *.cmake files to BSDLucie Gérard2022-09-0730-30/+30
| | | | | | | Task-number: QTBUG-105718 Change-Id: Id89ed14990804a5024183e75382cc539d4293da1 Reviewed-by: Qt CI Bot <[email protected]> Reviewed-by: Jörg Bornemann <[email protected]>
* Material: add TreeViewDelegate.qmlRichard Moe Gustavsen2022-09-022-2/+2
| | | | | | | | | | | | | | | Add a version of TreeViewDelegate.qml to the Material style, that looks more at home for that style (rather than using the one in the Basic style). This version is using the arrow-indicator from the Material style as expand/collapse indicator, and makes the height of each row match the height of a normal Material button. Pick-to: 6.4 Change-Id: I084532ca6e527593e5711d66aa53f240f0356d99 Reviewed-by: Mitch Curtis <[email protected]>
* Fusion: add TreeViewDelegateRichard Moe Gustavsen2022-08-312-2/+3
| | | | | | | | | | | | | | | Add a version of TreeViewDelegate.qml to the Fusion style, that looks more at home for that style (rather than using the one in the Basic style). This version is using the arrow-indicator from the Fusion style as expand/collapse indicator, and makes the height of each row match the height of a normal Fusion button. Pick-to: 6.4 Change-Id: I153bb5776e23476cf8c383fb6f76e63981e28639 Reviewed-by: Fabian Kosmale <[email protected]>
* Tests: do not use QT_DISABLE_DEPRECATED_BEFOREIvan Solovev2022-08-263-5/+0
| | | | | | | | | | For several reasons: * It was renamed to QT_DISABLE_DEPRECATED_UP_TO * Its value will be propagated from the general Qt build Task-number: QTBUG-104858 Change-Id: I90c92dc05b884f6408467c573181c00f8e00e6b3 Reviewed-by: Alexandru Croitor <[email protected]>
* CMake: Don't use PUBLIC_LIBRARIES for tests and test helpersAlexandru Croitor2022-07-2824-24/+24
| | | | | Change-Id: I1cd769f85d5f82c43639d6787d98e536619249e6 Reviewed-by: Alexey Edelev <[email protected]>
* Add license headers to cmake filesLucie Gérard2022-07-0830-0/+90
| | | | | | | | | | | | CMakeLists.txt and .cmake files of significant size (more than 2 lines according to our check in tst_license.pl) now have the copyright and license header. Existing copyright statements remain intact Task-number: QTBUG-88621 Change-Id: I72c89a98c42bbc9234d8495e9e503bec81d11037 Reviewed-by: Jörg Bornemann <[email protected]>
* Use SPDX license identifiersLucie Gérard2022-06-11201-5493/+402
| | | | | | | | | | | | Replace the current license disclaimer in files by a SPDX-License-Identifier. Files that have to be modified by hand are modified. License files are organized under LICENSES directory. Pick-to: 6.4 Task-number: QTBUG-67283 Change-Id: I63563bbeb6f60f89d2c99660400dca7fab78a294 Reviewed-by: Shawn Rutledge <[email protected]>
* Fix tst_objectcount on AndroidAndreas Buhr2022-05-041-0/+7
| | | | | | | | | | tst_objectcount did not have its test data properly included. This patch fixes it. Pick-to: 6.2 6.3 Task-number: QTBUG-101865 Change-Id: I25e4e01eeb87fbddcd55d9e85411c9cb2d5d5c61 Reviewed-by: Assam Boudjelthia <[email protected]>
* Cleanup CMakeLists.txt filesAndreas Buhr2022-05-031-2/+0
| | | | | | | | | A lot of CMakeLists.txt files defined QT_QMLTEST_DATADIR twice, leading to a warning. This patch fixes these. Pick-to: 6.2 6.3 Change-Id: I8b835fcddd3334f0ecac45cb72bd5763b3a5704d Reviewed-by: Fabian Kosmale <[email protected]>
* Replace uses of deprecated _qs with _s/QStringLiteralSona Kurazyan2022-04-291-1/+3
| | | | | | Task-number: QTBUG-101408 Change-Id: Ic925751b73f52d8fa5add5cacc52d6dd6ea2dc27 Reviewed-by: Ulf Hermann <[email protected]>
* Fix warnings in tests after QQmlListReference changeVolker Hilsheimer2022-03-211-1/+1
| | | | | | | | The engine parameter is no longer used. Pick-to: 6.3 Change-Id: Ifc630eb4803a015d41df50210bd86947f6a5a472 Reviewed-by: Ulf Hermann <[email protected]>
* Fix warning from deprecated QMouseEvent constructorVolker Hilsheimer2022-03-211-6/+12
| | | | | | | | Calculate and pass the global pos explicitly. Pick-to: 6.3 Change-Id: I6d16a21e95454a65a80d5366c6c46b3cacf33dd3 Reviewed-by: Shawn Rutledge <[email protected]>
* controls: add TreeViewDelegateRichard Moe Gustavsen2021-12-092-2/+4
| | | | | | | | | | | | | | | | | This patch adds TreeViewDelegate to Controls. TreeViewDelegate is a ready-made delegate that can be assigned to TreeView. It takes care of drawing the tree using the style, and can be used directly without the need for customization. It implements all the required properties set by TreeView, and offers in addition a small API that lets the developer change the indicator and the label. [ChangeLog][Controls] New delegate added: TreeViewDelegate Change-Id: I50fbc059afbc2b896d23d9d59717c8571e94bae6 Reviewed-by: Volker Hilsheimer <[email protected]>
* Fix license of tests from LGPL3 to GPL-EXCEPTKai Köhne2021-11-294-68/+36
| | | | | | | | | | | | Autotests in Qt are usually GPL3, or BSD. No point in using the LGPL here. This also gets rid of last references to LICENSE.LGPLv3 in this repository, so we can delete both LICENSE.LGPLv3 and LICENSE.GPLv3, which it references. Change-Id: Idbdefe0c68cc8047ede72b439a4d7ff40dfd71b6 Reviewed-by: Volker Hilsheimer <[email protected]>
* Add a benchmark of Date.getTimeZoneOffset()Edward Welbourne2021-11-231-0/+16
| | | | | | | | | Test at many moments from spring 1967 (before the epoch) to summer 2046 (after 32-bit time_t's sign-wrap). Change-Id: I3932cc1553a868b8815fda9a8dfc7644e4485704 Reviewed-by: Ulf Hermann <[email protected]> Reviewed-by: Qt CI Bot <[email protected]>
* Clean up tst_javascriptEdward Welbourne2021-11-231-40/+15
| | | | | | | | | | | | | | | | Inline the trivial constructor. Get rid of the pointless destructor. Use QDirIterator instead of QDir, to save collecting a bunch of strings, only to iterate them, when we could simply iterate them. Use QDirIterator::filePath() instead of adding fragments ourselves. Use u"*.qml"_qs instead of constructing QString from ASCII. Use QString::chopped(4) rather than left(size() - 4). Use QScopedPointer to ensure tidy-up of allocated object. Don't use 0 as a null pointer value. Waste less vertical space. Change-Id: I44f62f4e41f63de860f47114b2f47dddbf9746bc Reviewed-by: Ulf Hermann <[email protected]>