1 /* 2 * avgspeed.cpp 3 * Class to compute moving average speed 4 * 5 * Created by Arno Bakker 6 * Copyright 2009-2012 Delft University of Technology. All rights reserved. 7 * 8 */ 9 #include "avgspeed.h" 10 11 using namespace swift; 12 MovingAverageSpeed(tint speed_interval,tint fudge)13MovingAverageSpeed::MovingAverageSpeed(tint speed_interval, tint fudge) 14 { 15 speed_interval_ = speed_interval; 16 fudge_ = fudge; 17 t_start_ = usec_time() - fudge_; 18 t_end_ = t_start_; 19 speed_ = 0.0; 20 resetstate_ = false; 21 } 22 23 AddPoint(uint64_t amount)24void MovingAverageSpeed::AddPoint(uint64_t amount) 25 { 26 // Arno, 2012-01-04: Resetting this measurement includes not adding 27 // points for a few seconds after the reset, to accomodate the case 28 // of going from high speed to low speed and content still coming in. 29 // 30 if (resetstate_) { 31 if ((t_start_ + speed_interval_/2) > usec_time()) { 32 return; 33 } 34 resetstate_ = false; 35 } 36 37 tint t = usec_time(); 38 speed_ = (speed_ * ((double)(t_end_ - t_start_)/((double)TINT_SEC)) + (double)amount) / ((t - t_start_)/(( 39 double)TINT_SEC) + 0.0001); 40 t_end_ = t; 41 if (t_start_ < t - speed_interval_) 42 t_start_ = t - speed_interval_; 43 } 44 45 GetSpeed()46double MovingAverageSpeed::GetSpeed() 47 { 48 AddPoint(0); 49 return speed_; 50 } 51 52 GetSpeedNeutral()53double MovingAverageSpeed::GetSpeedNeutral() 54 { 55 return speed_; 56 } 57 58 Reset()59void MovingAverageSpeed::Reset() 60 { 61 resetstate_ = true; 62 t_start_ = usec_time() - fudge_; 63 t_end_ = t_start_; 64 speed_ = 0.0; 65 } 66