| // Copyright 2017 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 "device/vr/util/fps_meter.h" |
| |
| namespace device { |
| |
| namespace { |
| |
| static constexpr size_t kDefaultNumFrameTimes = 10; |
| |
| } // namespace |
| |
| FPSMeter::FPSMeter() : frame_times_(kDefaultNumFrameTimes) {} |
| |
| FPSMeter::FPSMeter(size_t window_size) : frame_times_(window_size) {} |
| |
| FPSMeter::~FPSMeter() = default; |
| |
| size_t FPSMeter::GetNumFrameTimes() { |
| return frame_times_.GetWindowSize(); |
| } |
| |
| void FPSMeter::AddFrame(const base::TimeTicks& time_stamp) { |
| if (last_time_stamp_.is_null()) { |
| last_time_stamp_ = time_stamp; |
| return; |
| } |
| |
| int64_t delta = (time_stamp - last_time_stamp_).InMicroseconds(); |
| last_time_stamp_ = time_stamp; |
| |
| frame_times_.AddSample(delta); |
| } |
| |
| bool FPSMeter::CanComputeFPS() const { |
| return frame_times_.GetCount() > 0; |
| } |
| |
| // Simply takes the average time delta. |
| double FPSMeter::GetFPS() const { |
| if (!CanComputeFPS()) |
| return 0.0; |
| |
| return (frame_times_.GetCount() * 1.0e6) / frame_times_.GetSum(); |
| } |
| |
| } // namespace device |