mirror of
https://github.com/aria2/aria2.git
synced 2025-02-26 08:22:11 +00:00
The old implementation calculates download/upload statistics for a RequestGroup by summing up all PeerStat objects. For global statistics, those are summed together. This clearly incurs runtime penalty and we introduced some kind of caching which updates statistics every 250ms but it did not work right. This change removes all these aggregation code, and instead makes RequestGroup and RequestGroupMan objects hold NetStat object and download/upload bytes are directly calculated by thier own NetStat. This is far more simplar than the old way and less runtime penalty and brings more accuracy.
97 lines
1.9 KiB
C++
97 lines
1.9 KiB
C++
#ifndef D_MOCK_PEER_STORAGE_H
|
|
#define D_MOCK_PEER_STORAGE_H
|
|
|
|
#include "PeerStorage.h"
|
|
|
|
#include <algorithm>
|
|
|
|
#include "Peer.h"
|
|
|
|
namespace aria2 {
|
|
|
|
class MockPeerStorage : public PeerStorage {
|
|
private:
|
|
std::deque<SharedHandle<Peer> > peers;
|
|
std::deque<SharedHandle<Peer> > droppedPeers;
|
|
std::vector<SharedHandle<Peer> > activePeers;
|
|
int numChokeExecuted_;
|
|
public:
|
|
MockPeerStorage():numChokeExecuted_(0) {}
|
|
virtual ~MockPeerStorage() {}
|
|
|
|
virtual bool addPeer(const SharedHandle<Peer>& peer) {
|
|
peers.push_back(peer);
|
|
return true;
|
|
}
|
|
|
|
virtual void addPeer(const std::vector<SharedHandle<Peer> >& peers) {
|
|
std::copy(peers.begin(), peers.end(), back_inserter(this->peers));
|
|
}
|
|
|
|
virtual const std::deque<SharedHandle<Peer> >& getPeers() {
|
|
return peers;
|
|
}
|
|
|
|
virtual size_t countPeer() const
|
|
{
|
|
return peers.size();
|
|
}
|
|
|
|
virtual const std::deque<SharedHandle<Peer> >& getDroppedPeers() {
|
|
return droppedPeers;
|
|
}
|
|
|
|
void addDroppedPeer(const SharedHandle<Peer>& peer) {
|
|
droppedPeers.push_back(peer);
|
|
}
|
|
|
|
virtual SharedHandle<Peer> getUnusedPeer() {
|
|
return SharedHandle<Peer>();
|
|
}
|
|
|
|
virtual bool isPeerAvailable() {
|
|
return false;
|
|
}
|
|
|
|
void setActivePeers(const std::vector<SharedHandle<Peer> >& activePeers)
|
|
{
|
|
this->activePeers = activePeers;
|
|
}
|
|
|
|
virtual void getActivePeers(std::vector<SharedHandle<Peer> >& peers) {
|
|
peers.insert(peers.end(), activePeers.begin(), activePeers.end());
|
|
}
|
|
|
|
virtual bool isBadPeer(const std::string& ipaddr)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
virtual void addBadPeer(const std::string& ipaddr)
|
|
{
|
|
}
|
|
|
|
virtual void returnPeer(const SharedHandle<Peer>& peer)
|
|
{
|
|
}
|
|
|
|
virtual bool chokeRoundIntervalElapsed()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
virtual void executeChoke()
|
|
{
|
|
++numChokeExecuted_;
|
|
}
|
|
|
|
int getNumChokeExecuted() const
|
|
{
|
|
return numChokeExecuted_;
|
|
}
|
|
};
|
|
|
|
#endif // D_MOCK_PEER_STORAGE_H
|
|
|
|
} // namespace aria2
|