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) <ogoffart@woboq.com>
This commit is contained in:
parent
3045ac99f2
commit
e475017753
@ -91,6 +91,7 @@ struct QBenchmarkContext
|
|||||||
|
|
||||||
QBenchmarkContext() : checkpointIndex(-1) {}
|
QBenchmarkContext() : checkpointIndex(-1) {}
|
||||||
};
|
};
|
||||||
|
Q_DECLARE_TYPEINFO(QBenchmarkContext, Q_MOVABLE_TYPE);
|
||||||
|
|
||||||
class QBenchmarkResult
|
class QBenchmarkResult
|
||||||
{
|
{
|
||||||
@ -126,6 +127,7 @@ public:
|
|||||||
return (value / iterations) < (other.value / other.iterations);
|
return (value / iterations) < (other.value / other.iterations);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
Q_DECLARE_TYPEINFO(QBenchmarkResult, Q_MOVABLE_TYPE);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
The QBenchmarkGlobalData class stores global benchmark-related data.
|
The QBenchmarkGlobalData class stores global benchmark-related data.
|
||||||
|
@ -1925,7 +1925,7 @@ Q_TESTLIB_EXPORT void qtest_qParseArgs(int argc, char *argv[], bool qml)
|
|||||||
QTestLog::addLogger(logFormat, logFilename);
|
QTestLog::addLogger(logFormat, logFilename);
|
||||||
}
|
}
|
||||||
|
|
||||||
QBenchmarkResult qMedian(const QList<QBenchmarkResult> &container)
|
QBenchmarkResult qMedian(const QVector<QBenchmarkResult> &container)
|
||||||
{
|
{
|
||||||
const int count = container.count();
|
const int count = container.count();
|
||||||
if (count == 0)
|
if (count == 0)
|
||||||
@ -1934,7 +1934,7 @@ QBenchmarkResult qMedian(const QList<QBenchmarkResult> &container)
|
|||||||
if (count == 1)
|
if (count == 1)
|
||||||
return container.front();
|
return container.front();
|
||||||
|
|
||||||
QList<QBenchmarkResult> containerCopy = container;
|
QVector<QBenchmarkResult> containerCopy = container;
|
||||||
std::sort(containerCopy.begin(), containerCopy.end());
|
std::sort(containerCopy.begin(), containerCopy.end());
|
||||||
|
|
||||||
const int middle = count / 2;
|
const int middle = count / 2;
|
||||||
@ -1971,7 +1971,7 @@ static void qInvokeTestMethodDataEntry(char *slot)
|
|||||||
bool isBenchmark = false;
|
bool isBenchmark = false;
|
||||||
int i = (QBenchmarkGlobalData::current->measurer->needsWarmupIteration()) ? -1 : 0;
|
int i = (QBenchmarkGlobalData::current->measurer->needsWarmupIteration()) ? -1 : 0;
|
||||||
|
|
||||||
QList<QBenchmarkResult> results;
|
QVector<QBenchmarkResult> results;
|
||||||
bool minimumTotalReached = false;
|
bool minimumTotalReached = false;
|
||||||
do {
|
do {
|
||||||
QBenchmarkTestMethodData::current->beginDataRun();
|
QBenchmarkTestMethodData::current->beginDataRun();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user