From 6ccefc2dbccb39f9f0235b2afde941b0e4a32e58 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Thu, 31 Jul 2008 15:27:39 +0000 Subject: [PATCH] 2008-08-01 Tatsuhiro Tsujikawa Avoid repeated call of gettimeofday() when calculating speed. * src/SpeedCalc.cc * src/SpeedCalc.h --- ChangeLog | 6 ++++++ src/SpeedCalc.cc | 13 +++++++++---- src/SpeedCalc.h | 3 +++ 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index c6a849ab..ca5279c5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-08-01 Tatsuhiro Tsujikawa + + Avoid repeated call of gettimeofday() when calculating speed. + * src/SpeedCalc.cc + * src/SpeedCalc.h + 2008-08-01 Tatsuhiro Tsujikawa Removed writable check when socket's send buffer is full in BitTorrent diff --git a/src/SpeedCalc.cc b/src/SpeedCalc.cc index d4fa4481..94921c71 100644 --- a/src/SpeedCalc.cc +++ b/src/SpeedCalc.cc @@ -59,12 +59,12 @@ void SpeedCalc::reset() { } unsigned int SpeedCalc::calculateSpeed() { - uint64_t milliElapsed = cpArray[sw].differenceInMillis(); + int64_t milliElapsed = cpArray[sw].differenceInMillis(); if(milliElapsed) { unsigned int speed = lengthArray[sw]*1000/milliElapsed; prevSpeed = speed; maxSpeed = std::max(speed, maxSpeed); - if(isIntervalOver()) { + if(isIntervalOver(milliElapsed)) { changeSw(); } return speed; @@ -74,12 +74,12 @@ unsigned int SpeedCalc::calculateSpeed() { } unsigned int SpeedCalc::calculateSpeed(const struct timeval& now) { - uint64_t milliElapsed = cpArray[sw].differenceInMillis(now); + int64_t milliElapsed = cpArray[sw].differenceInMillis(now); if(milliElapsed) { unsigned int speed = lengthArray[sw]*1000/milliElapsed; prevSpeed = speed; maxSpeed = std::max(speed, maxSpeed); - if(isIntervalOver()) { + if(isIntervalOver(milliElapsed)) { changeSw(); } return speed; @@ -101,6 +101,11 @@ bool SpeedCalc::isIntervalOver() const { return nextInterval <= cpArray[sw].difference(); } +bool SpeedCalc::isIntervalOver(int64_t milliElapsed) const +{ + return nextInterval <= milliElapsed/1000; +} + void SpeedCalc::changeSw() { lengthArray[sw] = 0; cpArray[sw].reset(); diff --git a/src/SpeedCalc.h b/src/SpeedCalc.h index 80df7311..c7e3513e 100644 --- a/src/SpeedCalc.h +++ b/src/SpeedCalc.h @@ -52,6 +52,9 @@ private: time_t nextInterval; bool isIntervalOver() const; + + bool isIntervalOver(int64_t milliElapsed) const; + void changeSw(); public: SpeedCalc() {