| 1 | // Copyright (C) 2016 Intel Corporation. |
| 2 | // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only |
| 3 | |
| 4 | #include "qcsvbenchmarklogger_p.h" |
| 5 | #include "qtestresult_p.h" |
| 6 | #include "qbenchmark_p.h" |
| 7 | |
| 8 | #include <cstdio> |
| 9 | |
| 10 | /*! \internal |
| 11 | \class QCsvBenchmarkLogger |
| 12 | \inmodule QtTest |
| 13 | |
| 14 | QCsvBenchmarkLogger implements a comma-separated value format for benchmarks. |
| 15 | |
| 16 | This is intended to be suitable for import into spreadsheets. |
| 17 | It does not print test failures, debug messages, warnings or any other details. |
| 18 | */ |
| 19 | |
| 20 | QCsvBenchmarkLogger::QCsvBenchmarkLogger(const char *filename) |
| 21 | : QAbstractTestLogger(filename) |
| 22 | { |
| 23 | } |
| 24 | |
| 25 | QCsvBenchmarkLogger::~QCsvBenchmarkLogger() = default; |
| 26 | |
| 27 | void QCsvBenchmarkLogger::startLogging() |
| 28 | { |
| 29 | // don't print anything |
| 30 | } |
| 31 | |
| 32 | void QCsvBenchmarkLogger::stopLogging() |
| 33 | { |
| 34 | // don't print anything |
| 35 | } |
| 36 | |
| 37 | void QCsvBenchmarkLogger::enterTestFunction(const char *) |
| 38 | { |
| 39 | // don't print anything |
| 40 | } |
| 41 | |
| 42 | void QCsvBenchmarkLogger::leaveTestFunction() |
| 43 | { |
| 44 | // don't print anything |
| 45 | } |
| 46 | |
| 47 | void QCsvBenchmarkLogger::addIncident(QAbstractTestLogger::IncidentTypes, const char *, const char *, int) |
| 48 | { |
| 49 | // don't print anything |
| 50 | } |
| 51 | |
| 52 | void QCsvBenchmarkLogger::addBenchmarkResult(const QBenchmarkResult &result) |
| 53 | { |
| 54 | const char *fn = QTestResult::currentTestFunction() ? QTestResult::currentTestFunction() |
| 55 | : "UnknownTestFunc" ; |
| 56 | const char *tag = QTestResult::currentDataTag() ? QTestResult::currentDataTag() : "" ; |
| 57 | const char *gtag = QTestResult::currentGlobalDataTag() |
| 58 | ? QTestResult::currentGlobalDataTag() |
| 59 | : "" ; |
| 60 | const char *filler = (tag[0] && gtag[0]) ? ":" : "" ; |
| 61 | |
| 62 | const char *metric = QTest::benchmarkMetricName(metric: result.measurement.metric); |
| 63 | |
| 64 | char buf[1024]; |
| 65 | // "function","[globaltag:]tag","metric",value_per_iteration,total,iterations |
| 66 | std::snprintf(s: buf, maxlen: sizeof(buf), format: "\"%s\",\"%s%s%s\",\"%s\",%.13g,%.13g,%u\n" , |
| 67 | fn, gtag, filler, tag, metric, |
| 68 | result.measurement.value / result.iterations, |
| 69 | result.measurement.value, result.iterations); |
| 70 | outputString(msg: buf); |
| 71 | } |
| 72 | |
| 73 | void QCsvBenchmarkLogger::addMessage(QAbstractTestLogger::MessageTypes, const QString &, const char *, int) |
| 74 | { |
| 75 | // don't print anything |
| 76 | } |
| 77 | |