diff options
author | Ivan Solovev <ivan.solovev@qt.io> | 2021-02-03 17:39:58 +0100 |
---|---|---|
committer | Ivan Solovev <ivan.solovev@qt.io> | 2021-02-09 17:08:44 +0100 |
commit | 5cb7117cbf5c33024a726151587d02ef4052218a (patch) | |
tree | 2887eb0491ef7bfa0dc4ba99d325ff2ddf3a6413 | |
parent | dc868904ed964d8bab03c9f58d6788505f64dba9 (diff) | |
download | qtlocation-5cb7117cbf5c33024a726151587d02ef4052218a.tar.gz |
QGeoSatelliteInfo: create benchmark
A simple benchmark to check the performance of QGeoSatelliteInfo API.
Initially it's created to assess the performance drop/increase while
migrating from private raw pointer to QSharedDataPointer.
Task-number: QTBUG-90491
Change-Id: Idc1b79efacbc020e2d8e8197394c03852bc96bc9
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
-rw-r--r-- | tests/benchmarks/CMakeLists.txt | 1 | ||||
-rw-r--r-- | tests/benchmarks/qgeosatelliteinfo/CMakeLists.txt | 14 | ||||
-rw-r--r-- | tests/benchmarks/qgeosatelliteinfo/tst_bench_qgeosatelliteinfo.cpp | 261 |
3 files changed, 276 insertions, 0 deletions
diff --git a/tests/benchmarks/CMakeLists.txt b/tests/benchmarks/CMakeLists.txt index bf9c9cb9..a3c1190c 100644 --- a/tests/benchmarks/CMakeLists.txt +++ b/tests/benchmarks/CMakeLists.txt @@ -1,5 +1,6 @@ # special case begin add_subdirectory(qgeopositioninfo) +add_subdirectory(qgeosatelliteinfo) # special case end diff --git a/tests/benchmarks/qgeosatelliteinfo/CMakeLists.txt b/tests/benchmarks/qgeosatelliteinfo/CMakeLists.txt new file mode 100644 index 00000000..488c93b1 --- /dev/null +++ b/tests/benchmarks/qgeosatelliteinfo/CMakeLists.txt @@ -0,0 +1,14 @@ +# special case begin + +qt_internal_add_benchmark(tst_bench_qgeosatelliteinfo + SOURCES + tst_bench_qgeosatelliteinfo.cpp + LIBRARIES + Qt::PositioningPrivate + PUBLIC_LIBRARIES + Qt::Core + Qt::Positioning + Qt::Test +) + +# special case end diff --git a/tests/benchmarks/qgeosatelliteinfo/tst_bench_qgeosatelliteinfo.cpp b/tests/benchmarks/qgeosatelliteinfo/tst_bench_qgeosatelliteinfo.cpp new file mode 100644 index 00000000..3e859702 --- /dev/null +++ b/tests/benchmarks/qgeosatelliteinfo/tst_bench_qgeosatelliteinfo.cpp @@ -0,0 +1,261 @@ +/**************************************************************************** +** +** Copyright (C) 2021 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtPositioning/QGeoSatelliteInfo> +#include <QtPositioning/private/qgeosatelliteinfo_p.h> +#include <QTest> + +class tst_QGeoSatelliteInfoBenchmark : public QObject +{ + Q_OBJECT +private slots: + void constructDefault(); + void constructCopy(); + void constructMove(); + void constructFromPrivate(); + + void assign(); + void assignMove(); + + void checkEquality(); + + void setSatelliteSystem(); + void querySatelliteSystem(); + + void setSatelliteIdentifier(); + void querySatelliteIdentifier(); + + void setSignalStrength(); + void querySignalStrength(); + + void setAttribute(); + void queryAttributeExisting(); + void queryAttributeNonExisting(); + void removeAttributeExisting(); + void removeAttributeNonExisting(); + void hasAttributeExisting(); + void hasAttributeNonExisting(); +}; + +void tst_QGeoSatelliteInfoBenchmark::constructDefault() +{ + QBENCHMARK { + QGeoSatelliteInfo info; + Q_UNUSED(info) + } +} + +static QGeoSatelliteInfo createSatelliteInfo() +{ + QGeoSatelliteInfo info; + info.setSatelliteSystem(QGeoSatelliteInfo::GLONASS); + info.setSatelliteIdentifier(1); + info.setSignalStrength(-30); + info.setAttribute(QGeoSatelliteInfo::Elevation, 10.0); + return info; +} + +void tst_QGeoSatelliteInfoBenchmark::constructCopy() +{ + const auto info = createSatelliteInfo(); + QBENCHMARK { + QGeoSatelliteInfo newInfo(info); + Q_UNUSED(newInfo) + } +} + +void tst_QGeoSatelliteInfoBenchmark::constructMove() +{ + QBENCHMARK { + // We need to create a new object at each iteration, so that we don't + // end up moving an already moved-from object. So the real value for + // move can be calculated using the results of constructDefault() + // benchmark. + QGeoSatelliteInfo info; + QGeoSatelliteInfo newInfo(std::move(info)); + Q_UNUSED(newInfo) + } +} + +void tst_QGeoSatelliteInfoBenchmark::constructFromPrivate() +{ + QBENCHMARK { + // we need to recreate p at each iteration because QGeoSatelliteInfo + // takes ownership + QGeoSatelliteInfoPrivate *p = new QGeoSatelliteInfoPrivate; + QGeoSatelliteInfo info(*p); + Q_UNUSED(info) + } +} + +void tst_QGeoSatelliteInfoBenchmark::assign() +{ + const auto info = createSatelliteInfo(); + QGeoSatelliteInfo newInfo; + QBENCHMARK { + newInfo = info; + } +} + +void tst_QGeoSatelliteInfoBenchmark::assignMove() +{ + QGeoSatelliteInfo newInfo; + QBENCHMARK { + // We need to create a new object at each iteration, so that we don't + // end up moving an already moved-from object. So the real value for + // move can be calculated using the results of constructDefault() + // benchmark. + QGeoSatelliteInfo info; + newInfo = std::move(info); + } +} + +void tst_QGeoSatelliteInfoBenchmark::checkEquality() +{ + const auto info1 = createSatelliteInfo(); + const auto info2 = createSatelliteInfo(); + QBENCHMARK { + const bool equal = info1 == info2; + Q_UNUSED(equal) + } +} + +void tst_QGeoSatelliteInfoBenchmark::setSatelliteSystem() +{ + QGeoSatelliteInfo info; + QBENCHMARK { + info.setSatelliteSystem(QGeoSatelliteInfo::GPS); + } +} + +void tst_QGeoSatelliteInfoBenchmark::querySatelliteSystem() +{ + const auto info = createSatelliteInfo(); + QBENCHMARK { + const auto val = info.satelliteSystem(); + Q_UNUSED(val) + } +} + +void tst_QGeoSatelliteInfoBenchmark::setSatelliteIdentifier() +{ + QGeoSatelliteInfo info; + QBENCHMARK { + info.setSatelliteIdentifier(10); + } +} + +void tst_QGeoSatelliteInfoBenchmark::querySatelliteIdentifier() +{ + const auto info = createSatelliteInfo(); + QBENCHMARK { + const auto val = info.satelliteIdentifier(); + Q_UNUSED(val) + } +} + +void tst_QGeoSatelliteInfoBenchmark::setSignalStrength() +{ + QGeoSatelliteInfo info; + QBENCHMARK { + info.setSignalStrength(-50); + } +} + +void tst_QGeoSatelliteInfoBenchmark::querySignalStrength() +{ + const auto info = createSatelliteInfo(); + QBENCHMARK { + const auto val = info.signalStrength(); + Q_UNUSED(val) + } +} + +void tst_QGeoSatelliteInfoBenchmark::setAttribute() +{ + QGeoSatelliteInfo info; + QBENCHMARK { + info.setAttribute(QGeoSatelliteInfo::Elevation, 10.0); + } +} + +void tst_QGeoSatelliteInfoBenchmark::queryAttributeExisting() +{ + const auto info = createSatelliteInfo(); + QBENCHMARK { + const auto val = info.attribute(QGeoSatelliteInfo::Elevation); + Q_UNUSED(val) + } +} + +void tst_QGeoSatelliteInfoBenchmark::queryAttributeNonExisting() +{ + const auto info = createSatelliteInfo(); + QBENCHMARK { + const auto val = info.attribute(QGeoSatelliteInfo::Azimuth); + Q_UNUSED(val) + } +} + +void tst_QGeoSatelliteInfoBenchmark::removeAttributeExisting() +{ + auto info = createSatelliteInfo(); + QBENCHMARK { + info.removeAttribute(QGeoSatelliteInfo::Elevation); + } +} + +void tst_QGeoSatelliteInfoBenchmark::removeAttributeNonExisting() +{ + auto info = createSatelliteInfo(); + QBENCHMARK { + info.removeAttribute(QGeoSatelliteInfo::Azimuth); + } +} + +void tst_QGeoSatelliteInfoBenchmark::hasAttributeExisting() +{ + auto info = createSatelliteInfo(); + QBENCHMARK { + const auto val = info.hasAttribute(QGeoSatelliteInfo::Elevation); + Q_UNUSED(val) + } +} + +void tst_QGeoSatelliteInfoBenchmark::hasAttributeNonExisting() +{ + auto info = createSatelliteInfo(); + QBENCHMARK { + const auto val = info.hasAttribute(QGeoSatelliteInfo::Azimuth); + Q_UNUSED(val) + } +} + +QTEST_MAIN(tst_QGeoSatelliteInfoBenchmark) + +#include "tst_bench_qgeosatelliteinfo.moc" |