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 @@
#include <stdint.h>
#include "base/logging.h"
#include "testing/perf/perf_test.h"
#include "testing/perf/perf_result_reporter.h"
#include "ui/gl/gpu_timing.h"
namespace gpu {
Measurement::Measurement() = 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 cpu_time,
const base::TimeDelta gpu_time)
: name(name), wall_time(wall_time), cpu_time(cpu_time), gpu_time(gpu_time) {
}
void Measurement::PrintResult(const std::string& graph) const {
perf_test::PrintResult(graph, "", name + "_wall", wall_time.InMillisecondsF(),
"ms", true);
: metric_basename(metric_basename),
wall_time(wall_time),
cpu_time(cpu_time),
gpu_time(gpu_time) {}
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) {
perf_test::PrintResult(graph, "", name + "_cpu", cpu_time.InMillisecondsF(),
"ms", true);
reporter->RegisterImportantMetric("_cpu", "ms");
reporter->AddResult("_cpu", cpu_time.InMillisecondsF());
}
if (gpu_time.InMicroseconds() >= 0) {
perf_test::PrintResult(graph, "", name + "_gpu", gpu_time.InMillisecondsF(),
"ms", true);
reporter->RegisterImportantMetric("_gpu", "ms");
reporter->AddResult("_gpu", gpu_time.InMillisecondsF());
}
}
......@@ -42,7 +46,8 @@ Measurement& Measurement::Increment(const Measurement& m) {
}
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;
......@@ -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(),
wall_time_); // At least wall_time_ has been set.
......@@ -87,7 +93,7 @@ Measurement MeasurementTimers::GetAsMeasurement(const std::string& name) {
if (gpu_timer_.get() != nullptr && gpu_timer_->IsAvailable()) {
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));
}
......
......@@ -20,17 +20,17 @@ namespace gpu {
struct Measurement {
Measurement();
Measurement(const Measurement& m);
Measurement(const std::string& name,
Measurement(const std::string& metric_basename,
const base::TimeDelta wall_time,
const base::TimeDelta cpu_time,
const base::TimeDelta gpu_time);
~Measurement();
void PrintResult(const std::string& graph) const;
void PrintResult(const std::string& story) const;
Measurement& Increment(const Measurement& m);
Measurement Divide(int a) const;
std::string name;
std::string metric_basename;
base::TimeDelta wall_time;
base::TimeDelta cpu_time;
base::TimeDelta gpu_time;
......
......@@ -16,7 +16,7 @@
#include "gpu/perftests/measurements.h"
#include "testing/gmock/include/gmock/gmock.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/vector2d_f.h"
#include "ui/gl/gl_bindings.h"
......@@ -404,27 +404,29 @@ class TextureUploadPerfTest : public testing::Test {
}
successful_runs++;
for (const Measurement& measurement : run) {
auto& aggregate = aggregates[measurement.name];
aggregate.name = measurement.name;
auto& aggregate = aggregates[measurement.metric_basename];
aggregate.metric_basename = measurement.metric_basename;
aggregate.Increment(measurement);
}
}
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());
if (subimage) {
graph_name += "_sub";
story_name += "_sub";
}
if (successful_runs) {
for (const auto& entry : aggregates) {
const auto m = entry.second.Divide(successful_runs);
m.PrintResult(graph_name);
m.PrintResult(story_name);
}
}
perf_test::PrintResult("sample_runs", "", graph_name,
static_cast<size_t>(successful_runs), "laps", true);
auto reporter = std::make_unique<perf_test::PerfResultReporter>(
"sample_runs", story_name);
reporter->RegisterImportantMetric("", "count");
reporter->AddResult("", static_cast<size_t>(successful_runs));
}
const gfx::Size fbo_size_; // for the fbo
......
......@@ -54,6 +54,7 @@ DATA_FORMAT_UNKNOWN = 'unknown'
# are okay with potentially encountering issues.
GTEST_CONVERSION_WHITELIST = [
'angle_perftests',
'gpu_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