diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-03-06 08:29:53 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-03-06 08:29:53 +0000 |
| commit | 8d09b069e2b709d8657f5fdbcf2a933515545f39 (patch) | |
| tree | 431bf39e4ce0a90c7fb4804297562c0c4c93c478 /src/DefaultPeerStorage.cc | |
| parent | 7637fd76a27d8a97cd32d7597d5afb3361fe0d28 (diff) | |
2010-03-06 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Added Time global::wallclock to cache "current time" to reduce the
call gettimeofday(). Global variables are now in namespace global.
* src/AbstractCommand.cc
* src/ActivePeerConnectionCommand.cc
* src/AdaptiveURISelector.cc
* src/BtLeecherStateChoke.cc
* src/BtLeecherStateChoke.h
* src/BtSeederStateChoke.cc
* src/BtSeederStateChoke.h
* src/BtStopDownloadCommand.cc
* src/ConsoleStatCalc.cc
* src/DHTBucket.cc
* src/DHTGetPeersCommand.cc
* src/DHTMessageTrackerEntry.cc
* src/DHTNode.cc
* src/DHTPeerAnnounceEntry.cc
* src/DHTPeerAnnounceStorage.cc
* src/DHTSetup.cc
* src/DefaultBtAnnounce.cc
* src/DefaultBtInteractive.cc
* src/DefaultBtMessageDispatcher.cc
* src/DefaultPeerStorage.cc
* src/DefaultPieceStorage.cc
* src/DownloadCommand.cc
* src/DownloadEngine.cc
* src/FileEntry.cc
* src/HttpServerBodyCommand.cc
* src/HttpServerCommand.cc
* src/HttpServerResponseCommand.cc
* src/LpdMessageDispatcher.cc
* src/MultiUrlRequestInfo.cc
* src/Peer.cc
* src/Peer.h
* src/PeerAbstractCommand.cc
* src/PeerStat.h
* src/RequestSlot.cc
* src/RequestSlot.h
* src/SegmentMan.cc
* src/ServerStatMan.cc
* src/SleepCommand.cc
* src/SpeedCalc.cc
* src/SpeedCalc.h
* src/TimeA2.cc
* src/TimeA2.h
* src/TimeBasedCommand.cc
* src/TimeSeedCriteria.h
* src/UTMetadataRequestTracker.h
* src/UTPexExtensionMessage.cc
* src/wallclock.h
Diffstat (limited to 'src/DefaultPeerStorage.cc')
| -rw-r--r-- | src/DefaultPeerStorage.cc | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/src/DefaultPeerStorage.cc b/src/DefaultPeerStorage.cc index 2cced586..5f9053b7 100644 --- a/src/DefaultPeerStorage.cc +++ b/src/DefaultPeerStorage.cc @@ -45,6 +45,7 @@ #include "BtSeederStateChoke.h" #include "BtLeecherStateChoke.h" #include "PieceStorage.h" +#include "wallclock.h" namespace aria2 { @@ -200,11 +201,9 @@ void DefaultPeerStorage::getActivePeers static TransferStat calculateStatFor(const SharedHandle<Peer>& peer) { - struct timeval now; - gettimeofday(&now, 0); TransferStat s; - s.downloadSpeed = peer->calculateDownloadSpeed(now); - s.uploadSpeed = peer->calculateUploadSpeed(now); + s.downloadSpeed = peer->calculateDownloadSpeed(); + s.uploadSpeed = peer->calculateUploadSpeed(); s.sessionDownloadLength = peer->getSessionDownloadLength(); s.sessionUploadLength = peer->getSessionUploadLength(); return s; @@ -213,21 +212,19 @@ static TransferStat calculateStatFor(const SharedHandle<Peer>& peer) TransferStat DefaultPeerStorage::calculateStat() { TransferStat stat; - if(_lastTransferStatMapUpdated.elapsedInMillis(250)) { + if(_lastTransferStatMapUpdated.differenceInMillis(global::wallclock) >= 250) { if(logger->debug()) { logger->debug("Updating TransferStat of PeerStorage"); } - _lastTransferStatMapUpdated.reset(); + _lastTransferStatMapUpdated = global::wallclock; _peerTransferStatMap.clear(); std::vector<SharedHandle<Peer> > activePeers; getActivePeers(activePeers); - struct timeval now; - gettimeofday(&now, 0); for(std::vector<SharedHandle<Peer> >::const_iterator i = activePeers.begin(), eoi = activePeers.end(); i != eoi; ++i) { TransferStat s; - s.downloadSpeed = (*i)->calculateDownloadSpeed(now); - s.uploadSpeed = (*i)->calculateUploadSpeed(now); + s.downloadSpeed = (*i)->calculateDownloadSpeed(); + s.uploadSpeed = (*i)->calculateUploadSpeed(); s.sessionDownloadLength = (*i)->getSessionDownloadLength(); s.sessionUploadLength = (*i)->getSessionUploadLength(); @@ -319,9 +316,11 @@ bool DefaultPeerStorage::chokeRoundIntervalElapsed() { const time_t CHOKE_ROUND_INTERVAL = 10; if(_pieceStorage->downloadFinished()) { - return _seederStateChoke->getLastRound().elapsed(CHOKE_ROUND_INTERVAL); + return _seederStateChoke->getLastRound(). + difference(global::wallclock) >= CHOKE_ROUND_INTERVAL; } else { - return _leecherStateChoke->getLastRound().elapsed(CHOKE_ROUND_INTERVAL); + return _leecherStateChoke->getLastRound(). + difference(global::wallclock) >= CHOKE_ROUND_INTERVAL; } } |
