From aac259c0fe3a01ebf0938231d1c2226cc0fc8df6 Mon Sep 17 00:00:00 2001 From: Zlatin Balevsky Date: Mon, 16 Mar 2020 22:45:16 +0000 Subject: [PATCH] cache the cardinality to speed up UI sorting --- core/src/main/groovy/com/muwire/core/download/Pieces.groovy | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/core/src/main/groovy/com/muwire/core/download/Pieces.groovy b/core/src/main/groovy/com/muwire/core/download/Pieces.groovy index 4d4a9d7e..b0950f05 100644 --- a/core/src/main/groovy/com/muwire/core/download/Pieces.groovy +++ b/core/src/main/groovy/com/muwire/core/download/Pieces.groovy @@ -6,6 +6,7 @@ class Pieces { private final float ratio private final Random random = new Random() private final Map partials = new HashMap<>() + private int cachedDone; Pieces(int nPieces) { this(nPieces, 1.0f) @@ -78,6 +79,7 @@ class Pieces { if (piece >= nPieces) throw new IllegalArgumentException("invalid piece marked as downloaded? $piece/$nPieces") done.set(piece) + cachedDone = done.cardinality(); claimed.set(piece) partials.remove(piece) } @@ -91,11 +93,11 @@ class Pieces { } synchronized boolean isComplete() { - done.cardinality() == nPieces + cachedDone == nPieces } synchronized int donePieces() { - done.cardinality() + cachedDone } synchronized boolean isDownloaded(int piece) {