Commit 9a4f447d authored by Brian Sheedy's avatar Brian Sheedy Committed by Commit Bot

Switch gpu_perftests to histograms

Switches the perf tests in gpu_perftests to use PerfResultReporter
instead of PrintResult and whitelists the target for conversion to
histograms before uploading to the perf dashboard.

Bug: 923564
Change-Id: I1af7b843c71e66205f05955c230a6ae3013f8ff1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1785677Reviewed-by: default avatarDaniele Castagna <dcastagna@chromium.org>
Reviewed-by: default avatarCaleb Rouleau <crouleau@chromium.org>
Commit-Queue: Brian Sheedy <bsheedy@chromium.org>
Cr-Commit-Position: refs/heads/master@{#693907}
parent 1344c10d
...@@ -7,30 +7,34 @@ ...@@ -7,30 +7,34 @@
#include <stdint.h> #include <stdint.h>
#include "base/logging.h" #include "base/logging.h"
#include "testing/perf/perf_test.h" #include "testing/perf/perf_result_reporter.h"
#include "ui/gl/gpu_timing.h" #include "ui/gl/gpu_timing.h"
namespace gpu { namespace gpu {
Measurement::Measurement() = default; Measurement::Measurement() = default;
Measurement::Measurement(const Measurement& m) = default; Measurement::Measurement(const Measurement& m) = default;
Measurement::Measurement(const std::string& name, Measurement::Measurement(const std::string& metric_basename,
const base::TimeDelta wall_time, const base::TimeDelta wall_time,
const base::TimeDelta cpu_time, const base::TimeDelta cpu_time,
const base::TimeDelta gpu_time) const base::TimeDelta gpu_time)
: name(name), wall_time(wall_time), cpu_time(cpu_time), gpu_time(gpu_time) { : metric_basename(metric_basename),
} wall_time(wall_time),
cpu_time(cpu_time),
void Measurement::PrintResult(const std::string& graph) const { gpu_time(gpu_time) {}
perf_test::PrintResult(graph, "", name + "_wall", wall_time.InMillisecondsF(),
"ms", true); void Measurement::PrintResult(const std::string& story) const {
auto reporter =
std::make_unique<perf_test::PerfResultReporter>(metric_basename, story);
reporter->RegisterImportantMetric("_wall", "ms");
reporter->AddResult("_wall", wall_time.InMillisecondsF());
if (cpu_time.InMicroseconds() >= 0) { if (cpu_time.InMicroseconds() >= 0) {
perf_test::PrintResult(graph, "", name + "_cpu", cpu_time.InMillisecondsF(), reporter->RegisterImportantMetric("_cpu", "ms");
"ms", true); reporter->AddResult("_cpu", cpu_time.InMillisecondsF());
} }
if (gpu_time.InMicroseconds() >= 0) { if (gpu_time.InMicroseconds() >= 0) {
perf_test::PrintResult(graph, "", name + "_gpu", gpu_time.InMillisecondsF(), reporter->RegisterImportantMetric("_gpu", "ms");
"ms", true); reporter->AddResult("_gpu", gpu_time.InMillisecondsF());
} }
} }
...@@ -42,7 +46,8 @@ Measurement& Measurement::Increment(const Measurement& m) { ...@@ -42,7 +46,8 @@ Measurement& Measurement::Increment(const Measurement& m) {
} }
Measurement Measurement::Divide(int a) const { Measurement Measurement::Divide(int a) const {
return Measurement(name, wall_time / a, cpu_time / a, gpu_time / a); return Measurement(metric_basename, wall_time / a, cpu_time / a,
gpu_time / a);
} }
Measurement::~Measurement() = default; Measurement::~Measurement() = default;
...@@ -76,7 +81,8 @@ void MeasurementTimers::Record() { ...@@ -76,7 +81,8 @@ void MeasurementTimers::Record() {
} }
} }
Measurement MeasurementTimers::GetAsMeasurement(const std::string& name) { Measurement MeasurementTimers::GetAsMeasurement(
const std::string& metric_basename) {
DCHECK_NE(base::TimeDelta(), DCHECK_NE(base::TimeDelta(),
wall_time_); // At least wall_time_ has been set. wall_time_); // At least wall_time_ has been set.
...@@ -87,7 +93,7 @@ Measurement MeasurementTimers::GetAsMeasurement(const std::string& name) { ...@@ -87,7 +93,7 @@ Measurement MeasurementTimers::GetAsMeasurement(const std::string& name) {
if (gpu_timer_.get() != nullptr && gpu_timer_->IsAvailable()) { if (gpu_timer_.get() != nullptr && gpu_timer_->IsAvailable()) {
gpu_time = gpu_timer_->GetDeltaElapsed(); gpu_time = gpu_timer_->GetDeltaElapsed();
} }
return Measurement(name, wall_time_, cpu_time_, return Measurement(metric_basename, wall_time_, cpu_time_,
base::TimeDelta::FromMicroseconds(gpu_time)); base::TimeDelta::FromMicroseconds(gpu_time));
} }
......
...@@ -20,17 +20,17 @@ namespace gpu { ...@@ -20,17 +20,17 @@ namespace gpu {
struct Measurement { struct Measurement {
Measurement(); Measurement();
Measurement(const Measurement& m); Measurement(const Measurement& m);
Measurement(const std::string& name, Measurement(const std::string& metric_basename,
const base::TimeDelta wall_time, const base::TimeDelta wall_time,
const base::TimeDelta cpu_time, const base::TimeDelta cpu_time,
const base::TimeDelta gpu_time); const base::TimeDelta gpu_time);
~Measurement(); ~Measurement();
void PrintResult(const std::string& graph) const; void PrintResult(const std::string& story) const;
Measurement& Increment(const Measurement& m); Measurement& Increment(const Measurement& m);
Measurement Divide(int a) const; Measurement Divide(int a) const;
std::string name; std::string metric_basename;
base::TimeDelta wall_time; base::TimeDelta wall_time;
base::TimeDelta cpu_time; base::TimeDelta cpu_time;
base::TimeDelta gpu_time; base::TimeDelta gpu_time;
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
#include "gpu/perftests/measurements.h" #include "gpu/perftests/measurements.h"
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
#include "testing/perf/perf_test.h" #include "testing/perf/perf_result_reporter.h"
#include "ui/gfx/geometry/size.h" #include "ui/gfx/geometry/size.h"
#include "ui/gfx/geometry/vector2d_f.h" #include "ui/gfx/geometry/vector2d_f.h"
#include "ui/gl/gl_bindings.h" #include "ui/gl/gl_bindings.h"
...@@ -404,27 +404,29 @@ class TextureUploadPerfTest : public testing::Test { ...@@ -404,27 +404,29 @@ class TextureUploadPerfTest : public testing::Test {
} }
successful_runs++; successful_runs++;
for (const Measurement& measurement : run) { for (const Measurement& measurement : run) {
auto& aggregate = aggregates[measurement.name]; auto& aggregate = aggregates[measurement.metric_basename];
aggregate.name = measurement.name; aggregate.metric_basename = measurement.metric_basename;
aggregate.Increment(measurement); aggregate.Increment(measurement);
} }
} }
glDeleteTextures(1, &texture_id); glDeleteTextures(1, &texture_id);
std::string graph_name = base::StringPrintf( std::string story_name = base::StringPrintf(
"%d_%s", size.width(), gl::GLEnums::GetStringEnum(format).c_str()); "%d_%s", size.width(), gl::GLEnums::GetStringEnum(format).c_str());
if (subimage) { if (subimage) {
graph_name += "_sub"; story_name += "_sub";
} }
if (successful_runs) { if (successful_runs) {
for (const auto& entry : aggregates) { for (const auto& entry : aggregates) {
const auto m = entry.second.Divide(successful_runs); const auto m = entry.second.Divide(successful_runs);
m.PrintResult(graph_name); m.PrintResult(story_name);
} }
} }
perf_test::PrintResult("sample_runs", "", graph_name, auto reporter = std::make_unique<perf_test::PerfResultReporter>(
static_cast<size_t>(successful_runs), "laps", true); "sample_runs", story_name);
reporter->RegisterImportantMetric("", "count");
reporter->AddResult("", static_cast<size_t>(successful_runs));
} }
const gfx::Size fbo_size_; // for the fbo const gfx::Size fbo_size_; // for the fbo
......
...@@ -54,6 +54,7 @@ DATA_FORMAT_UNKNOWN = 'unknown' ...@@ -54,6 +54,7 @@ DATA_FORMAT_UNKNOWN = 'unknown'
# are okay with potentially encountering issues. # are okay with potentially encountering issues.
GTEST_CONVERSION_WHITELIST = [ GTEST_CONVERSION_WHITELIST = [
'angle_perftests', 'angle_perftests',
'gpu_perftests',
'xr.vr.common_perftests', 'xr.vr.common_perftests',
] ]
......
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