Benchmarks: port Q_FOREACH to ranged-for

Simple cases, all local const containers.

tst_QHash: rename the template parameter to "Str". My eyes saw
"QList<String>", but my brain somehow assumed QList<*Q*String>. You
could argue that I am a bit slow, but it has tricked someone else in
code review, so just rename it for the sake of clarity.

Drive-by, remove braces from one-line for-loop-block.

Task-number: QTBUG-115839
Change-Id: Ia1a56bea7b931efb377ba8c04ee8933561abf341
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
This commit is contained in:
Ahmad Samir 2023-08-14 18:20:52 +03:00
parent cdcfaf796e
commit db5163dca9
3 changed files with 28 additions and 36 deletions

View File

@ -1,8 +1,6 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include <QTest>
#include <QDirIterator>
@ -42,8 +40,8 @@ private slots:
{
QBENCHMARK {
QDir testdir(QDir::tempPath() + QLatin1String("/test_speed"));
QFileInfoList fileInfoList = testdir.entryInfoList(QDir::Files, QDir::Unsorted);
foreach (const QFileInfo &fileInfo, fileInfoList) {
const QFileInfoList fileInfoList = testdir.entryInfoList(QDir::Files, QDir::Unsorted);
for (const QFileInfo &fileInfo : fileInfoList) {
fileInfo.isDir();
fileInfo.size();
}
@ -66,12 +64,11 @@ private slots:
{
QBENCHMARK {
QDir testdir(QDir::tempPath() + QLatin1String("/test_speed"));
QFileInfoList fileInfoList = testdir.entryInfoList(QDir::NoFilter, QDir::Unsorted);
foreach (const QFileInfo &fileInfo, fileInfoList) {
const QFileInfoList fileInfoList = testdir.entryInfoList(QDir::NoFilter, QDir::Unsorted);
for (const QFileInfo &fileInfo : fileInfoList)
fileInfo.size();
}
}
}
void sizeSpeedWithoutFilterIterator()
{
QBENCHMARK {
@ -90,8 +87,8 @@ private slots:
QBENCHMARK {
QDir testdir(QDir::tempPath() + QLatin1String("/test_speed"));
testdir.setSorting(QDir::Unsorted);
QStringList fileList = testdir.entryList(QDir::NoFilter, QDir::Unsorted);
foreach (const QString &filename, fileList) {
const QStringList fileList = testdir.entryList(QDir::NoFilter, QDir::Unsorted);
for (const QString &filename : fileList) {
QFileInfo fileInfo(filename);
fileInfo.size();
}
@ -104,12 +101,11 @@ private slots:
QDir testdir(QDir::tempPath() + QLatin1String("/test_speed"));
testdir.setSorting(QDir::Unsorted);
testdir.setFilter(QDir::AllEntries | QDir::System | QDir::Hidden);
QStringList fileList = testdir.entryList(QDir::NoFilter, QDir::Unsorted);
foreach (const QString &filename, fileList) {
const QStringList fileList = testdir.entryList(QDir::NoFilter, QDir::Unsorted);
for (const QString &filename : fileList)
Q_UNUSED(filename);
}
}
}
void iDontWantAnyStatIterator()
{
QBENCHMARK {
@ -126,12 +122,11 @@ private slots:
QDir testdir(QDir::tempPath() + QLatin1String("/test_speed"));
testdir.setSorting(QDir::Time);
testdir.setFilter(QDir::AllEntries | QDir::System | QDir::Hidden);
QStringList fileList = testdir.entryList(QDir::NoFilter, QDir::Time);
foreach (const QString &filename, fileList) {
const QStringList fileList = testdir.entryList(QDir::NoFilter, QDir::Time);
for (const QString &filename : fileList)
Q_UNUSED(filename);
}
}
}
void sorted_byName()
{

View File

@ -2,8 +2,6 @@
// Copyright (C) 2016 Intel Corporation.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include "tst_bench_qhash.h"
#include <QFile>
@ -84,7 +82,7 @@ void tst_QHash::initTestCase()
uuids.reserve(smallFilePaths.size());
longstrings.reserve(smallFilePaths.size());
foreach (const QString &path, smallFilePaths)
for (const QString &path : std::as_const(smallFilePaths))
uuids.append(QUuid::createUuidV5(ns, path).toString());
for (qsizetype i = 0; i < uuids.size(); ++i)
longstrings.append(uuids.at(i).repeated(8));
@ -133,13 +131,14 @@ void tst_QHash::data()
QTest::newRow("numbers") << numbers;
}
template <typename String> void tst_QHash::qhash_template()
template <typename Str> void tst_QHash::qhash_template()
{
QFETCH(QStringList, items);
QHash<String, int> hash;
QFETCH(const QStringList, items);
QHash<Str, int> hash;
QList<String> realitems;
foreach (const QString &s, items)
QList<Str> realitems;
realitems.reserve(items.size());
for (const QString &s : items)
realitems.append(s);
QBENCHMARK {
@ -149,18 +148,18 @@ template <typename String> void tst_QHash::qhash_template()
}
}
template <typename String, size_t Seed> void tst_QHash::hashing_template()
template <typename Str, size_t Seed> void tst_QHash::hashing_template()
{
// just the hashing function
QFETCH(QStringList, items);
QFETCH(const QStringList, items);
QList<String> realitems;
QList<Str> realitems;
realitems.reserve(items.size());
foreach (const QString &s, items) {
if constexpr (std::is_same_v<QString::value_type, typename String::value_type>) {
for (const QString &s : items) {
if constexpr (std::is_same_v<QString::value_type, typename Str::value_type>) {
realitems.append(s);
} else if constexpr (sizeof(typename String::value_type) == 1) {
realitems.append(String(s.toLatin1()));
} else if constexpr (sizeof(typename Str::value_type) == 1) {
realitems.append(Str(s.toLatin1()));
}
}

View File

@ -2,8 +2,6 @@
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
// This file contains benchmarks for QRect/QRectF functions.
#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include <QDebug>
#include <qtest.h>
@ -79,8 +77,8 @@ static void addRectRectData(bool includeProperArg = false)
if (includeProperArg)
QTest::addColumn<bool>("proper");
for (int i = 0; i < (includeProperArg ? 2 : 1); ++i) {
QList<RectRectCombination> combinations = createRectRectCombinations();
foreach (RectRectCombination c, combinations) {
const QList<RectRectCombination> combinations = createRectRectCombinations();
for (const RectRectCombination &c : combinations) {
QTestData &testData = QTest::newRow(c.tag.toLatin1().data());
QRectF r1(c.x1, c.y1, c.w1, c.h1);
QRectF r2(c.x2, c.y2, c.w2, c.h2);
@ -124,8 +122,8 @@ static void addRectPointData(bool includeProperArg = false)
if (includeProperArg)
QTest::addColumn<bool>("proper");
for (int i = 0; i < (includeProperArg ? 2 : 1); ++i) {
QList<RectPointCombination> combinations = createRectPointCombinations();
foreach (RectPointCombination c, combinations) {
const QList<RectPointCombination> combinations = createRectPointCombinations();
for (const RectPointCombination &c : combinations) {
QTestData &testData = QTest::newRow(c.tag.toLatin1().data());
QRectF r(c.x, c.y, c.w, c.h);
QPointF p(c.px, c.py);