| // Copyright 2013 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. |
| |
| #ifndef FRAME_COUNTER_H_ |
| #define FRAME_COUNTER_H_ |
| |
| class FrameCounter { |
| public: |
| FrameCounter() |
| : frame_duration_accumulator_(0), |
| frame_count_(0), |
| frames_per_second_(0) {} |
| ~FrameCounter() {} |
| |
| // Record the current time, which is used to compute the frame duration |
| // when EndFrame() is called. |
| void BeginFrame(); |
| |
| // Compute the delta since the last call to BeginFrame() and increment the |
| // frame count. Update the frame rate whenever the prescribed number of |
| // frames have been counted, or at least one second of simulator time has |
| // passed, whichever is less. |
| void EndFrame(); |
| |
| // Reset the frame counters back to 0. |
| void Reset(); |
| |
| // The current frame rate. Note that this is 0 for the first second in |
| // the accumulator, and is updated every 100 frames (and at least once |
| // every second of simulation time or so). |
| double frames_per_second() const { |
| return frames_per_second_; |
| } |
| |
| private: |
| static const double kMicroSecondsPerSecond = 1000000.0; |
| static const int32_t kFrameRateRefreshCount = 100; |
| |
| double frame_duration_accumulator_; // Measured in microseconds. |
| int32_t frame_count_; |
| double frame_start_; |
| double frames_per_second_; |
| }; |
| |
| #endif // FRAME_COUNTER_H_ |