diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/storage/dfs/DfsBlockCache.java b/org.eclipse.jgit/src/org/eclipse/jgit/storage/dfs/DfsBlockCache.java index bd68ae520..d3dadbe29 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/storage/dfs/DfsBlockCache.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/storage/dfs/DfsBlockCache.java @@ -230,6 +230,21 @@ public long getFillPercentage() { return getCurrentSize() * 100 / maxBytes; } + /** @return number of requests for items in the cache. */ + public long getHitCount() { + return statHit.get(); + } + + /** @return number of requests for items not in the cache. */ + public long getMissCount() { + return statMiss.get(); + } + + /** @return total number of requests (hit + miss). */ + public long getTotalRequestCount() { + return getHitCount() + getMissCount(); + } + /** @return 0..100, defining number of cache hits. */ public long getHitRatio() { long hits = statHit.get(); @@ -315,8 +330,10 @@ DfsBlock getOrLoad(DfsPackFile pack, long position, DfsReader ctx) int slot = slot(key, position); HashEntry e1 = table.get(slot); DfsBlock v = scan(e1, key, position); - if (v != null) + if (v != null) { + statHit.incrementAndGet(); return v; + } reserveSpace(blockSize); ReentrantLock regionLock = lockFor(key, position); @@ -326,6 +343,7 @@ DfsBlock getOrLoad(DfsPackFile pack, long position, DfsReader ctx) if (e2 != e1) { v = scan(e2, key, position); if (v != null) { + statHit.incrementAndGet(); creditSpace(blockSize); return v; } @@ -469,6 +487,8 @@ T get(DfsPackKey key, long position) { T val = (T) scan(table.get(slot(key, position)), key, position); if (val == null) statMiss.incrementAndGet(); + else + statHit.incrementAndGet(); return val; } @@ -500,17 +520,8 @@ boolean readAhead(ReadableChannel rc, DfsPackKey key, int size, long pos, @SuppressWarnings("unchecked") private T scan(HashEntry n, DfsPackKey pack, long position) { - for (; n != null; n = n.next) { - Ref r = n.ref; - if (r.pack != pack || r.position != position) - continue; - T v = r.get(); - if (v == null) - return null; - statHit.incrementAndGet(); - return v; - } - return null; + Ref r = scanRef(n, pack, position); + return r != null ? r.get() : null; } @SuppressWarnings("unchecked")