From 9a5072d1bf9187b32ce9a88842dffa31ef416442 Mon Sep 17 00:00:00 2001 From: jpmag Date: Tue, 4 Apr 2017 20:31:28 +0100 Subject: [PATCH] Fixes #357: broken RMS values when time unit is set. (#362) --- src/complexity.cc | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/complexity.cc b/src/complexity.cc index 015db4ce..02adbef6 100644 --- a/src/complexity.cc +++ b/src/complexity.cc @@ -295,6 +295,11 @@ std::vector ComputeBigO( big_o.report_big_o = true; big_o.complexity = result_cpu.complexity; + // All the time results are reported after being multiplied by the + // time unit multiplier. But since RMS is a relative quantity it + // should not be multiplied at all. So, here, we _divide_ it by the + // multiplier so that when it is multiplied later the result is the + // correct one. double multiplier = GetTimeUnitMultiplier(reports[0].time_unit); // Only add label to mean/stddev if it is same for all runs @@ -307,6 +312,9 @@ std::vector ComputeBigO( rms.cpu_accumulated_time = result_cpu.rms / multiplier; rms.report_rms = true; rms.complexity = result_cpu.complexity; + // don't forget to keep the time unit, or we won't be able to + // recover the correct value. + rms.time_unit = reports[0].time_unit; results.push_back(big_o); results.push_back(rms);