Index: chrome/browser/android/vr_shell/fps_meter.cc |
diff --git a/chrome/browser/android/vr_shell/fps_meter.cc b/chrome/browser/android/vr_shell/fps_meter.cc |
index 9065fd4350373435e2b0225e07c81db5999719a1..6caf38fa0cb2fe8cc4ccf8d69f7ce62952e487c6 100644 |
--- a/chrome/browser/android/vr_shell/fps_meter.cc |
+++ b/chrome/browser/android/vr_shell/fps_meter.cc |
@@ -10,18 +10,40 @@ namespace vr_shell { |
namespace { |
-static constexpr size_t kNumFrameTimes = 10; |
+static constexpr size_t kDefaultNumFrameTimes = 10; |
-} // namepsace |
+} // namespace |
-FPSMeter::FPSMeter() : total_time_us_(0) { |
- frame_times_.reserve(kNumFrameTimes); |
+SampleQueue::SampleQueue(size_t window_size) : window_size_(window_size) { |
+ samples_.reserve(window_size); |
} |
+SampleQueue::~SampleQueue() {} |
cjgrant
2017/05/24 13:37:30
does "= default;" work here?
klausw
2017/05/24 16:32:23
Done.
|
+ |
+void SampleQueue::AddSample(int64_t value) { |
+ sum_ += value; |
+ |
+ if (samples_.size() < window_size_) { |
+ samples_.push_back(value); |
+ } else { |
+ sum_ -= samples_[current_index_]; |
+ samples_[current_index_] = value; |
+ } |
+ |
+ ++current_index_; |
+ if (current_index_ >= window_size_) { |
+ current_index_ = 0; |
+ } |
+} |
+ |
+FPSMeter::FPSMeter() : frame_times_(kDefaultNumFrameTimes) {} |
+ |
+FPSMeter::FPSMeter(size_t window_size) : frame_times_(window_size) {} |
+ |
FPSMeter::~FPSMeter() {} |
size_t FPSMeter::GetNumFrameTimes() { |
- return kNumFrameTimes; |
+ return frame_times_.GetWindowSize(); |
} |
void FPSMeter::AddFrame(const base::TimeTicks& time_stamp) { |
@@ -30,25 +52,14 @@ void FPSMeter::AddFrame(const base::TimeTicks& time_stamp) { |
return; |
} |
- base::TimeDelta delta = time_stamp - last_time_stamp_; |
+ int64_t delta = (time_stamp - last_time_stamp_).InMicroseconds(); |
last_time_stamp_ = time_stamp; |
- total_time_us_ += delta.InMicroseconds(); |
- |
- if (frame_times_.size() < kNumFrameTimes) { |
- frame_times_.push_back(delta); |
- } else { |
- total_time_us_ -= frame_times_[current_index_].InMicroseconds(); |
- frame_times_[current_index_] = delta; |
- } |
- |
- current_index_++; |
- if (current_index_ >= kNumFrameTimes) |
- current_index_ = 0; |
+ frame_times_.AddSample(delta); |
} |
bool FPSMeter::CanComputeFPS() const { |
- return !frame_times_.empty(); |
+ return frame_times_.GetCount() > 0; |
} |
// Simply takes the average time delta. |
@@ -56,7 +67,23 @@ double FPSMeter::GetFPS() const { |
if (!CanComputeFPS()) |
return 0.0; |
- return (frame_times_.size() * 1.0e6) / total_time_us_; |
+ return (frame_times_.GetCount() * 1.0e6) / frame_times_.GetSum(); |
+} |
+ |
+SlidingAverage::SlidingAverage(size_t window_size) : values_(window_size) {} |
+ |
+SlidingAverage::~SlidingAverage() {} |
+ |
+void SlidingAverage::AddSample(int64_t value) { |
+ values_.AddSample(value); |
+} |
+ |
+int64_t SlidingAverage::GetAverageOrDefault(int64_t default_value) { |
+ if (values_.GetCount() == 0) { |
cjgrant
2017/05/24 13:37:30
if (values.GetCount() == 0)
return default_value
klausw
2017/05/24 16:32:22
Done.
|
+ return default_value; |
+ } else { |
+ return values_.GetSum() / values_.GetCount(); |
+ } |
} |
} // namespace vr_shell |