| /* |
| * Copyright 2013 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #include "perfMonitor.h" |
| |
| namespace ndk_helper |
| { |
| |
| PerfMonitor::PerfMonitor() : |
| last_tick_( 0.f ), |
| tv_last_sec_( 0 ), |
| tickindex_( 0 ), |
| ticksum_( 0 ) |
| { |
| for( int32_t i = 0; i < NUM_SAMPLES; ++i ) |
| ticklist_[i] = 0; |
| } |
| |
| PerfMonitor::~PerfMonitor() |
| { |
| } |
| |
| double PerfMonitor::UpdateTick( double currentTick ) |
| { |
| ticksum_ -= ticklist_[tickindex_]; |
| ticksum_ += currentTick; |
| ticklist_[tickindex_] = currentTick; |
| tickindex_ = (tickindex_ + 1) % NUM_SAMPLES; |
| |
| return ((double) ticksum_ / NUM_SAMPLES); |
| } |
| |
| bool PerfMonitor::Update( float &fFPS ) |
| { |
| struct timeval Time; |
| gettimeofday( &Time, NULL ); |
| |
| double time = Time.tv_sec + Time.tv_usec * 1.0 / 1000000.0; |
| double tick = time - last_tick_; |
| double d = UpdateTick( tick ); |
| last_tick_ = time; |
| |
| if( Time.tv_sec - tv_last_sec_ >= 1 ) |
| { |
| double time = Time.tv_sec + Time.tv_usec * 1.0 / 1000000.0; |
| current_FPS_ = 1.f / d; |
| tv_last_sec_ = Time.tv_sec; |
| fFPS = current_FPS_; |
| return true; |
| } |
| else |
| { |
| fFPS = current_FPS_; |
| return false; |
| } |
| } |
| |
| } //namespace ndkHelper |
| |