1 /* 2 * Copyright 2013 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #include "perfMonitor.h" 18 19 namespace ndk_helper 20 { 21 PerfMonitor()22PerfMonitor::PerfMonitor() : 23 last_tick_( 0.f ), 24 tv_last_sec_( 0 ), 25 tickindex_( 0 ), 26 ticksum_( 0 ) 27 { 28 for( int32_t i = 0; i < NUM_SAMPLES; ++i ) 29 ticklist_[i] = 0; 30 } 31 ~PerfMonitor()32PerfMonitor::~PerfMonitor() 33 { 34 } 35 UpdateTick(double currentTick)36double PerfMonitor::UpdateTick( double currentTick ) 37 { 38 ticksum_ -= ticklist_[tickindex_]; 39 ticksum_ += currentTick; 40 ticklist_[tickindex_] = currentTick; 41 tickindex_ = (tickindex_ + 1) % NUM_SAMPLES; 42 43 return ((double) ticksum_ / NUM_SAMPLES); 44 } 45 Update(float & fFPS)46bool PerfMonitor::Update( float &fFPS ) 47 { 48 struct timeval Time; 49 gettimeofday( &Time, NULL ); 50 51 double time = Time.tv_sec + Time.tv_usec * 1.0 / 1000000.0; 52 double tick = time - last_tick_; 53 double d = UpdateTick( tick ); 54 last_tick_ = time; 55 56 if( Time.tv_sec - tv_last_sec_ >= 1 ) 57 { 58 double time = Time.tv_sec + Time.tv_usec * 1.0 / 1000000.0; 59 current_FPS_ = 1.f / d; 60 tv_last_sec_ = Time.tv_sec; 61 fFPS = current_FPS_; 62 return true; 63 } 64 else 65 { 66 fFPS = current_FPS_; 67 return false; 68 } 69 } 70 71 } //namespace ndkHelper 72 73