From e4750177536d096221a50d221124a4f1047a5456 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Sun, 17 Aug 2014 20:44:39 +0200 Subject: [PATCH] QtTest: don't hold QBenchmarkResults in QList QBenchmarkResult is larger than a void*, so holding them in a QList is needlessly inefficient. Worse, the code could come to depend on the fragile property of (inefficient) QLists that references to elements therein never are invalidated. Also saves ~1.2KiB of text size on GCC 4.9 optimized C++11 AMD64 Linux builds. Change-Id: I0c99e591bb9b4405aa1bb78ec095dcaf9277993f Reviewed-by: Olivier Goffart (Woboq GmbH) --- src/testlib/qbenchmark_p.h | 2 ++ src/testlib/qtestcase.cpp | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/testlib/qbenchmark_p.h b/src/testlib/qbenchmark_p.h index d785f3d4b7..6312a34cb8 100644 --- a/src/testlib/qbenchmark_p.h +++ b/src/testlib/qbenchmark_p.h @@ -91,6 +91,7 @@ struct QBenchmarkContext QBenchmarkContext() : checkpointIndex(-1) {} }; +Q_DECLARE_TYPEINFO(QBenchmarkContext, Q_MOVABLE_TYPE); class QBenchmarkResult { @@ -126,6 +127,7 @@ public: return (value / iterations) < (other.value / other.iterations); } }; +Q_DECLARE_TYPEINFO(QBenchmarkResult, Q_MOVABLE_TYPE); /* The QBenchmarkGlobalData class stores global benchmark-related data. diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp index 7dc846db4d..be68f8d866 100644 --- a/src/testlib/qtestcase.cpp +++ b/src/testlib/qtestcase.cpp @@ -1925,7 +1925,7 @@ Q_TESTLIB_EXPORT void qtest_qParseArgs(int argc, char *argv[], bool qml) QTestLog::addLogger(logFormat, logFilename); } -QBenchmarkResult qMedian(const QList &container) +QBenchmarkResult qMedian(const QVector &container) { const int count = container.count(); if (count == 0) @@ -1934,7 +1934,7 @@ QBenchmarkResult qMedian(const QList &container) if (count == 1) return container.front(); - QList containerCopy = container; + QVector containerCopy = container; std::sort(containerCopy.begin(), containerCopy.end()); const int middle = count / 2; @@ -1971,7 +1971,7 @@ static void qInvokeTestMethodDataEntry(char *slot) bool isBenchmark = false; int i = (QBenchmarkGlobalData::current->measurer->needsWarmupIteration()) ? -1 : 0; - QList results; + QVector results; bool minimumTotalReached = false; do { QBenchmarkTestMethodData::current->beginDataRun();