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 { ...@@ -52,8 +52,7 @@ class TextPerfTest : public testing::Test {
} }
void PrintResults() { void PrintResults() {
reporter_->AddResult(".render_time_avg", reporter_->AddResult(".render_time_avg", timer_.TimePerLap());
timer_.TimePerLap().InMillisecondsF());
reporter_->AddResult(".number_of_runs", reporter_->AddResult(".number_of_runs",
static_cast<size_t>(timer_.NumLaps())); static_cast<size_t>(timer_.NumLaps()));
} }
......
...@@ -52,6 +52,34 @@ void PerfResultReporter::AddResult(const std::string& metric_suffix, ...@@ -52,6 +52,34 @@ void PerfResultReporter::AddResult(const std::string& metric_suffix,
iter->second.units, iter->second.important); 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, void PerfResultReporter::AddResultList(const std::string& metric_suffix,
const std::string& values) { const std::string& values) {
auto iter = metric_map_.find(metric_suffix); auto iter = metric_map_.find(metric_suffix);
......
...@@ -8,6 +8,8 @@ ...@@ -8,6 +8,8 @@
#include <string> #include <string>
#include <unordered_map> #include <unordered_map>
#include "base/time/time.h"
namespace perf_test { namespace perf_test {
struct MetricInfo { struct MetricInfo {
...@@ -45,6 +47,11 @@ class PerfResultReporter { ...@@ -45,6 +47,11 @@ class PerfResultReporter {
void AddResult(const std::string& metric_suffix, size_t value); 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, double value);
void AddResult(const std::string& metric_suffix, const std::string& 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, void AddResultList(const std::string& metric_suffix,
const std::string& values); 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