aboutsummaryrefslogtreecommitdiff
path: root/tests/framework/printers/JSONPrinter.cpp
diff options
context:
space:
mode:
authorAnthony Barbier <anthony.barbier@arm.com>2017-11-09 10:29:59 +0000
committerAnthony Barbier <anthony.barbier@arm.com>2018-11-02 16:35:24 +0000
commitab14c15dc9a0f55664fe523aed072fffa60da420 (patch)
treeb5a90018b71d10cd5a7ac2f19acdb34354208baa /tests/framework/printers/JSONPrinter.cpp
parent33da05bc53a3de35c8b2fad04ab78d5b40d6aa77 (diff)
downloadComputeLibrary-ab14c15dc9a0f55664fe523aed072fffa60da420.tar.gz
COMPMID-663: Reworked / cleaned up instuments' measurements
Everything used to be stored as double which led to some numbers appearing in scientific notation and some counters values getting corrupted. Now measurements can be stored as either floating point or integer values. Added support for raw_data in order to output more detailed information to the JSON files (Will make use of that in the OpenCL timer instrument) Change-Id: Ie83776b347a764c8bf45b47d7d9d7bec02b04257 Reviewed-on: http://mpd-gerrit.cambridge.arm.com/95035 Tested-by: Kaizen <jeremy.johnson+kaizengerrit@arm.com> Reviewed-by: Gian Marco Iodice <gianmarco.iodice@arm.com> Reviewed-by: Georgios Pinitas <georgios.pinitas@arm.com>
Diffstat (limited to 'tests/framework/printers/JSONPrinter.cpp')
-rw-r--r--tests/framework/printers/JSONPrinter.cpp33
1 files changed, 23 insertions, 10 deletions
diff --git a/tests/framework/printers/JSONPrinter.cpp b/tests/framework/printers/JSONPrinter.cpp
index 4f17e6277b..bb85a134f2 100644
--- a/tests/framework/printers/JSONPrinter.cpp
+++ b/tests/framework/printers/JSONPrinter.cpp
@@ -164,36 +164,49 @@ void JSONPrinter::print_measurements(const Profiler::MeasurementsMap &measuremen
{
*_stream << R"(")" << i_it->first << R"(" : {)";
- auto add_measurements = [](double a, const Measurement & b)
+ auto add_measurements = [](Measurement::Value a, const Measurement & b)
{
- return a + b.value;
+ return a + b.value();
};
auto cmp_measurements = [](const Measurement & a, const Measurement & b)
{
- return a.value < b.value;
+ return a.value() < b.value();
};
- double sum_values = std::accumulate(i_it->second.cbegin(), i_it->second.cend(), 0., add_measurements);
int num_values = i_it->second.size();
const auto minmax_values = std::minmax_element(i_it->second.begin(), i_it->second.end(), cmp_measurements);
+ Measurement::Value sum_values = std::accumulate(i_it->second.cbegin(), i_it->second.cend(), Measurement::Value(minmax_values.first->value().is_floating_point), add_measurements);
if(num_values > 2)
{
- sum_values -= minmax_values.first->value + minmax_values.second->value;
+ sum_values -= minmax_values.first->value() + minmax_values.second->value();
num_values -= 2;
}
auto measurement_to_string = [](const Measurement & measurement)
{
- return support::cpp11::to_string(measurement.value);
+ if(measurement.raw_data().size() == 1)
+ {
+ return measurement.raw_data().front();
+ }
+ else
+ {
+ std::stringstream str;
+ str << "[";
+ str << join(measurement.raw_data().begin(), measurement.raw_data().end(), ",");
+ str << "]";
+ return str.str();
+ }
};
-
*_stream << R"("avg" : )" << (sum_values / num_values) << ",";
- *_stream << R"("min" : )" << minmax_values.first->value << ",";
- *_stream << R"("max" : )" << minmax_values.second->value << ",";
+ if(num_values > 1)
+ {
+ *_stream << R"("min" : )" << minmax_values.first->value() << ",";
+ *_stream << R"("max" : )" << minmax_values.second->value() << ",";
+ }
*_stream << R"("raw" : [)" << join(i_it->second.begin(), i_it->second.end(), ",", measurement_to_string) << "],";
- *_stream << R"("unit" : ")" << minmax_values.first->unit << R"(")";
+ *_stream << R"("unit" : ")" << minmax_values.first->unit() << R"(")";
*_stream << "}";
if(++i_it != i_end)