Commit 1f0d2c6d authored by Brian Sheedy's avatar Brian Sheedy Committed by Commit Bot

Add TimeDelta support to PerfResultReporter

Adds support for base::TimeDelta in PerfResultReporter. This is due to
many perf tests reporting time taken from a TimeDelta, and handling the
conversion from TimeDelta to double in PerfResultReporter makes its use
less error-prone since users no longer need to worry about matching the
registered units to the correct TimeDelta::In*seconds calls.

Bug: 923564
Change-Id: I30dd6bcf0f11489b671f20e6e776fbad4659729e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1815081Reviewed-by: default avatarCaleb Rouleau <crouleau@chromium.org>
Commit-Queue: Brian Sheedy <bsheedy@chromium.org>
Auto-Submit: Brian Sheedy <bsheedy@chromium.org>
Cr-Commit-Position: refs/heads/master@{#702153}
parent 17ff3d67
......@@ -52,8 +52,7 @@ class TextPerfTest : public testing::Test {
}
void PrintResults() {
reporter_->AddResult(".render_time_avg",
timer_.TimePerLap().InMillisecondsF());
reporter_->AddResult(".render_time_avg", timer_.TimePerLap());
reporter_->AddResult(".number_of_runs",
static_cast<size_t>(timer_.NumLaps()));
}
......
......@@ -52,6 +52,34 @@ void PerfResultReporter::AddResult(const std::string& metric_suffix,
iter->second.units, iter->second.important);
}
void PerfResultReporter::AddResult(const std::string& metric_suffix,
const base::TimeDelta& value) {
auto iter = metric_map_.find(metric_suffix);
CHECK(iter != metric_map_.end());
// Decide what time unit to convert the TimeDelta into. Units are based on
// the legacy units in
// https://cs.chromium.org/chromium/src/third_party/catapult/tracing/tracing/value/legacy_unit_info.py?q=legacy_unit_info
double time = 0;
if (iter->second.units == "seconds") {
time = value.InSecondsF();
} else if (iter->second.units == "ms" ||
iter->second.units == "milliseconds") {
time = value.InMillisecondsF();
} else if (iter->second.units == "us") {
time = value.InMicrosecondsF();
} else if (iter->second.units == "ns") {
time = value.InNanoseconds();
} else {
NOTREACHED() << "Attempted to use AddResult with a TimeDelta when "
<< "registered unit for metric " << metric_suffix << " is "
<< iter->second.units;
}
PrintResult(metric_basename_, metric_suffix, story_name_, time,
iter->second.units, iter->second.important);
}
void PerfResultReporter::AddResultList(const std::string& metric_suffix,
const std::string& values) {
auto iter = metric_map_.find(metric_suffix);
......
......@@ -8,6 +8,8 @@
#include <string>
#include <unordered_map>
#include "base/time/time.h"
namespace perf_test {
struct MetricInfo {
......@@ -45,6 +47,11 @@ class PerfResultReporter {
void AddResult(const std::string& metric_suffix, size_t value);
void AddResult(const std::string& metric_suffix, double value);
void AddResult(const std::string& metric_suffix, const std::string& value);
// A special version of AddResult that will automatically convert the given
// TimeDelta into a double with the correct units for the registered metric.
void AddResult(const std::string& metric_suffix,
const base::TimeDelta& value);
void AddResultList(const std::string& metric_suffix,
const std::string& values);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment