summaryrefslogtreecommitdiff
path: root/src/SpeedCalc.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2008-07-31 15:27:39 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2008-07-31 15:27:39 +0000
commit6ccefc2dbccb39f9f0235b2afde941b0e4a32e58 (patch)
treef93da87391cba06bf136faa44854b1c62896613c /src/SpeedCalc.cc
parentdfe3b9bf15fcc579c7f5414939e568e5e4b2104e (diff)
2008-08-01 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Avoid repeated call of gettimeofday() when calculating speed. * src/SpeedCalc.cc * src/SpeedCalc.h
Diffstat (limited to 'src/SpeedCalc.cc')
-rw-r--r--src/SpeedCalc.cc13
1 files changed, 9 insertions, 4 deletions
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();