| Index: gpu/perftests/measurements.cc
|
| diff --git a/gpu/perftests/measurements.cc b/gpu/perftests/measurements.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..270e459d55d7cbffacb029b5dad9841498d5fd4d
|
| --- /dev/null
|
| +++ b/gpu/perftests/measurements.cc
|
| @@ -0,0 +1,99 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "gpu/perftests/measurements.h"
|
| +
|
| +#include "testing/perf/perf_test.h"
|
| +
|
| +namespace gpu {
|
| +
|
| +Measurement::Measurement() : name(), wall_time(), cpu_time(), gpu_time() {
|
| +}
|
| +Measurement::Measurement(const Measurement& m)
|
| + : name(m.name),
|
| + wall_time(m.wall_time),
|
| + cpu_time(m.cpu_time),
|
| + gpu_time(m.gpu_time) {
|
| +}
|
| +Measurement::Measurement(const std::string& name,
|
| + 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 {
|
| + perf_test::PrintResult(name, "_wall", "", wall_time.InMillisecondsF(), "ms",
|
| + true);
|
| + if (cpu_time.InMicroseconds() >= 0) {
|
| + perf_test::PrintResult(name, "_cpu", "", cpu_time.InMillisecondsF(), "ms",
|
| + true);
|
| + }
|
| + if (gpu_time.InMicroseconds() >= 0) {
|
| + perf_test::PrintResult(name, "_gpu", "", gpu_time.InMillisecondsF(), "ms",
|
| + true);
|
| + }
|
| +}
|
| +
|
| +Measurement& Measurement::Increment(const Measurement& m) {
|
| + wall_time += m.wall_time;
|
| + cpu_time += m.cpu_time;
|
| + gpu_time += m.gpu_time;
|
| + return *this;
|
| +}
|
| +
|
| +Measurement Measurement::Divide(int a) const {
|
| + return Measurement(name, wall_time / a, cpu_time / a, gpu_time / a);
|
| +}
|
| +
|
| +Measurement::~Measurement() {
|
| +}
|
| +
|
| +MeasurementTimers::MeasurementTimers(GPUTiming* gpu_timing)
|
| + : wall_time_start_(), cpu_time_start_(), gpu_timer_() {
|
| + DCHECK(gpu_timing);
|
| + wall_time_start_ = base::TimeTicks::NowFromSystemTraceTime();
|
| + if (base::TimeTicks::IsThreadNowSupported()) {
|
| + cpu_time_start_ = base::TimeTicks::ThreadNow();
|
| + } else {
|
| + static bool logged_once = false;
|
| + LOG_IF(WARNING, !logged_once) << "ThreadNow not supported.";
|
| + logged_once = true;
|
| + }
|
| +
|
| + if (gpu_timing->IsAvailable()) {
|
| + gpu_timer_.reset(new GPUTimer(gpu_timing));
|
| + gpu_timer_->Start();
|
| + }
|
| +}
|
| +
|
| +void MeasurementTimers::Record() {
|
| + wall_time_ = base::TimeTicks::NowFromSystemTraceTime() - wall_time_start_;
|
| + if (base::TimeTicks::IsThreadNowSupported()) {
|
| + cpu_time_ = base::TimeTicks::ThreadNow() - cpu_time_start_;
|
| + }
|
| + if (gpu_timer_.get()) {
|
| + gpu_timer_->End();
|
| + }
|
| +}
|
| +
|
| +Measurement MeasurementTimers::GetAsMeasurement(const std::string& name) {
|
| + DCHECK_NE(base::TimeDelta(),
|
| + wall_time_); // At least wall_time_ has been set.
|
| +
|
| + if (!base::TimeTicks::IsThreadNowSupported()) {
|
| + cpu_time_ = base::TimeDelta::FromMicroseconds(-1);
|
| + }
|
| + int64 gpu_time = -1;
|
| + if (gpu_timer_.get() != nullptr && gpu_timer_->IsAvailable()) {
|
| + gpu_time = gpu_timer_->GetDeltaElapsed();
|
| + }
|
| + return Measurement(name, wall_time_, cpu_time_,
|
| + base::TimeDelta::FromMicroseconds(gpu_time));
|
| +}
|
| +
|
| +MeasurementTimers::~MeasurementTimers() {
|
| +}
|
| +
|
| +} // namespace gpu
|
|
|