|  | // 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. | 
|  |  | 
|  | #ifndef GPU_PERFTESTS_MEASUREMENTS_H_ | 
|  | #define GPU_PERFTESTS_MEASUREMENTS_H_ | 
|  |  | 
|  | #include <string> | 
|  |  | 
|  | #include "base/memory/scoped_ptr.h" | 
|  | #include "base/time/time.h" | 
|  |  | 
|  | namespace gfx { | 
|  | class GPUTimingClient; | 
|  | class GPUTimer; | 
|  | } | 
|  |  | 
|  | namespace gpu { | 
|  |  | 
|  | struct Measurement { | 
|  | Measurement(); | 
|  | Measurement(const Measurement& m); | 
|  | Measurement(const std::string& name, | 
|  | const base::TimeDelta wall_time, | 
|  | const base::TimeDelta cpu_time, | 
|  | const base::TimeDelta gpu_time); | 
|  | ~Measurement(); | 
|  |  | 
|  | void PrintResult(const std::string& suffix) const; | 
|  | Measurement& Increment(const Measurement& m); | 
|  | Measurement Divide(int a) const; | 
|  |  | 
|  | std::string name; | 
|  | base::TimeDelta wall_time; | 
|  | base::TimeDelta cpu_time; | 
|  | base::TimeDelta gpu_time; | 
|  | }; | 
|  |  | 
|  | // Class to measure wall, cpu and gpu time deltas. | 
|  | // The deltas are measured from the time of the object | 
|  | // creation up to when Record is called. | 
|  | class MeasurementTimers { | 
|  | public: | 
|  | explicit MeasurementTimers(gfx::GPUTimingClient* gpu_timing_client); | 
|  | void Record(); | 
|  | Measurement GetAsMeasurement(const std::string& name); | 
|  | ~MeasurementTimers(); | 
|  |  | 
|  | private: | 
|  | base::TimeTicks wall_time_start_; | 
|  | base::TimeTicks cpu_time_start_; | 
|  | scoped_ptr<gfx::GPUTimer> gpu_timer_; | 
|  |  | 
|  | base::TimeDelta wall_time_; | 
|  | base::TimeDelta cpu_time_; | 
|  | }; | 
|  |  | 
|  | }  // namespace gpu | 
|  |  | 
|  | #endif  // GPU_PERFTESTS_MEASUREMENTS_H_ |