Browse Source

Merge pull request #16247 from Chocobo1/count_bits

Speed up piece relevance calculation
adaptive-webui-19844
Chocobo1 3 years ago committed by GitHub
parent
commit
9553afc3c2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 28
      src/base/bittorrent/peerinfo.cpp
  2. 2
      src/base/bittorrent/peerinfo.h

28
src/base/bittorrent/peerinfo.cpp

@ -39,8 +39,8 @@ using namespace BitTorrent; @@ -39,8 +39,8 @@ using namespace BitTorrent;
PeerInfo::PeerInfo(const Torrent *torrent, const lt::peer_info &nativeInfo)
: m_nativeInfo(nativeInfo)
, m_relevance(calcRelevance(torrent))
{
calcRelevance(torrent);
determineFlags();
}
@ -226,28 +226,16 @@ QString PeerInfo::connectionType() const @@ -226,28 +226,16 @@ QString PeerInfo::connectionType() const
: QLatin1String {"Web"};
}
void PeerInfo::calcRelevance(const Torrent *torrent)
qreal PeerInfo::calcRelevance(const Torrent *torrent) const
{
const QBitArray allPieces = torrent->pieces();
const QBitArray peerPieces = pieces();
int localMissing = 0;
int remoteHaves = 0;
for (int i = 0; i < allPieces.size(); ++i)
{
if (!allPieces[i])
{
++localMissing;
if (peerPieces[i])
++remoteHaves;
}
}
const int localMissing = allPieces.count(false);
if (localMissing <= 0)
return 0;
if (localMissing == 0)
m_relevance = 0.0;
else
m_relevance = static_cast<qreal>(remoteHaves) / localMissing;
const QBitArray peerPieces = pieces();
const int remoteHaves = (peerPieces & (~allPieces)).count(true);
return static_cast<qreal>(remoteHaves) / localMissing;
}
qreal PeerInfo::relevance() const

2
src/base/bittorrent/peerinfo.h

@ -92,7 +92,7 @@ namespace BitTorrent @@ -92,7 +92,7 @@ namespace BitTorrent
int downloadingPieceIndex() const;
private:
void calcRelevance(const Torrent *torrent);
qreal calcRelevance(const Torrent *torrent) const;
void determineFlags();
lt::peer_info m_nativeInfo = {};

Loading…
Cancel
Save