1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "device/vr/util/fps_meter.h"
6 
7 namespace device {
8 
9 namespace {
10 
11 static constexpr size_t kDefaultNumFrameTimes = 10;
12 
13 }  // namespace
14 
FPSMeter()15 FPSMeter::FPSMeter() : frame_times_(kDefaultNumFrameTimes) {}
16 
FPSMeter(size_t window_size)17 FPSMeter::FPSMeter(size_t window_size) : frame_times_(window_size) {}
18 
19 FPSMeter::~FPSMeter() = default;
20 
GetNumFrameTimes()21 size_t FPSMeter::GetNumFrameTimes() {
22   return frame_times_.GetWindowSize();
23 }
24 
AddFrame(const base::TimeTicks & time_stamp)25 void FPSMeter::AddFrame(const base::TimeTicks& time_stamp) {
26   if (last_time_stamp_.is_null()) {
27     last_time_stamp_ = time_stamp;
28     return;
29   }
30 
31   int64_t delta = (time_stamp - last_time_stamp_).InMicroseconds();
32   last_time_stamp_ = time_stamp;
33 
34   frame_times_.AddSample(delta);
35 }
36 
CanComputeFPS() const37 bool FPSMeter::CanComputeFPS() const {
38   return frame_times_.GetCount() > 0;
39 }
40 
41 // Simply takes the average time delta.
GetFPS() const42 double FPSMeter::GetFPS() const {
43   if (!CanComputeFPS())
44     return 0.0;
45 
46   return (frame_times_.GetCount() * 1.0e6) / frame_times_.GetSum();
47 }
48 
49 }  // namespace device
50