Index: chrome/browser/android/vr_shell/fps_meter.h |
diff --git a/chrome/browser/android/vr_shell/fps_meter.h b/chrome/browser/android/vr_shell/fps_meter.h |
index c52f4100ee599367977f2f1066de461f181be81c..86da9763d185375248271f2d3281c8d2a186c5f8 100644 |
--- a/chrome/browser/android/vr_shell/fps_meter.h |
+++ b/chrome/browser/android/vr_shell/fps_meter.h |
@@ -12,10 +12,32 @@ |
namespace vr_shell { |
+class SampleQueue { |
+ public: |
+ explicit SampleQueue(size_t window_size); |
+ ~SampleQueue(); |
+ |
+ int64_t GetSum() const { return sum_; } |
+ |
+ void AddSample(int64_t value); |
+ |
+ size_t GetCount() const { return samples_.size(); } |
+ |
+ // Get sliding window size for tests. |
+ size_t GetWindowSize() const { return window_size_; } |
+ |
+ private: |
+ int64_t sum_ = 0; |
+ size_t current_index_ = 0; |
+ size_t window_size_; |
+ std::vector<int64_t> samples_; |
+}; |
+ |
// Computes fps based on submitted frame times. |
class FPSMeter { |
public: |
FPSMeter(); |
+ explicit FPSMeter(size_t window_size); |
~FPSMeter(); |
void AddFrame(const base::TimeTicks& time_stamp); |
@@ -28,13 +50,24 @@ class FPSMeter { |
size_t GetNumFrameTimes(); |
private: |
- size_t current_index_; |
- int64_t total_time_us_; |
+ SampleQueue frame_times_; |
base::TimeTicks last_time_stamp_; |
- std::vector<base::TimeDelta> frame_times_; |
DISALLOW_COPY_AND_ASSIGN(FPSMeter); |
}; |
+class SlidingAverage { |
+ public: |
+ explicit SlidingAverage(size_t window_size); |
+ ~SlidingAverage(); |
+ |
+ void AddSample(int64_t value); |
+ int64_t GetAverageOrDefault(int64_t default_value) const; |
+ int64_t GetAverage() const { return GetAverageOrDefault(0); } |
+ |
+ private: |
+ SampleQueue values_; |
+}; |
+ |
} // namespace vr_shell |
#endif // CHROME_BROWSER_ANDROID_VR_SHELL_FPS_METER_H_ |