2008-08-01 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>

Avoid repeated call of gettimeofday() when calculating speed.
	* src/SpeedCalc.cc
	* src/SpeedCalc.h
pull/1/head
Tatsuhiro Tsujikawa 2008-07-31 15:27:39 +00:00
parent dfe3b9bf15
commit 6ccefc2dbc
3 changed files with 18 additions and 4 deletions

View File

@ -1,3 +1,9 @@
2008-08-01 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Avoid repeated call of gettimeofday() when calculating speed.
* src/SpeedCalc.cc
* src/SpeedCalc.h
2008-08-01 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com> 2008-08-01 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Removed writable check when socket's send buffer is full in BitTorrent Removed writable check when socket's send buffer is full in BitTorrent

View File

@ -59,12 +59,12 @@ void SpeedCalc::reset() {
} }
unsigned int SpeedCalc::calculateSpeed() { unsigned int SpeedCalc::calculateSpeed() {
uint64_t milliElapsed = cpArray[sw].differenceInMillis(); int64_t milliElapsed = cpArray[sw].differenceInMillis();
if(milliElapsed) { if(milliElapsed) {
unsigned int speed = lengthArray[sw]*1000/milliElapsed; unsigned int speed = lengthArray[sw]*1000/milliElapsed;
prevSpeed = speed; prevSpeed = speed;
maxSpeed = std::max(speed, maxSpeed); maxSpeed = std::max(speed, maxSpeed);
if(isIntervalOver()) { if(isIntervalOver(milliElapsed)) {
changeSw(); changeSw();
} }
return speed; return speed;
@ -74,12 +74,12 @@ unsigned int SpeedCalc::calculateSpeed() {
} }
unsigned int SpeedCalc::calculateSpeed(const struct timeval& now) { unsigned int SpeedCalc::calculateSpeed(const struct timeval& now) {
uint64_t milliElapsed = cpArray[sw].differenceInMillis(now); int64_t milliElapsed = cpArray[sw].differenceInMillis(now);
if(milliElapsed) { if(milliElapsed) {
unsigned int speed = lengthArray[sw]*1000/milliElapsed; unsigned int speed = lengthArray[sw]*1000/milliElapsed;
prevSpeed = speed; prevSpeed = speed;
maxSpeed = std::max(speed, maxSpeed); maxSpeed = std::max(speed, maxSpeed);
if(isIntervalOver()) { if(isIntervalOver(milliElapsed)) {
changeSw(); changeSw();
} }
return speed; return speed;
@ -101,6 +101,11 @@ bool SpeedCalc::isIntervalOver() const {
return nextInterval <= cpArray[sw].difference(); return nextInterval <= cpArray[sw].difference();
} }
bool SpeedCalc::isIntervalOver(int64_t milliElapsed) const
{
return nextInterval <= milliElapsed/1000;
}
void SpeedCalc::changeSw() { void SpeedCalc::changeSw() {
lengthArray[sw] = 0; lengthArray[sw] = 0;
cpArray[sw].reset(); cpArray[sw].reset();

View File

@ -52,6 +52,9 @@ private:
time_t nextInterval; time_t nextInterval;
bool isIntervalOver() const; bool isIntervalOver() const;
bool isIntervalOver(int64_t milliElapsed) const;
void changeSw(); void changeSw();
public: public:
SpeedCalc() { SpeedCalc() {