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()15FPSMeter::FPSMeter() : frame_times_(kDefaultNumFrameTimes) {} 16 FPSMeter(size_t window_size)17FPSMeter::FPSMeter(size_t window_size) : frame_times_(window_size) {} 18 19 FPSMeter::~FPSMeter() = default; 20 GetNumFrameTimes()21size_t FPSMeter::GetNumFrameTimes() { 22 return frame_times_.GetWindowSize(); 23 } 24 AddFrame(const base::TimeTicks & time_stamp)25void 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() const37bool FPSMeter::CanComputeFPS() const { 38 return frame_times_.GetCount() > 0; 39 } 40 41 // Simply takes the average time delta. GetFPS() const42double 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