Chromium Code Reviews| 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 |