From f70ecabb3090bebb38b7f5d2a369a79742c51d6e Mon Sep 17 00:00:00 2001 From: Colby Ranger Date: Thu, 3 Nov 2011 15:30:17 -0700 Subject: [PATCH] DfsBlockCache: Update hits to not include contains() Also expose the underlying hit and miss counters, in addition to the hit ratio. Change-Id: Icea2572d62e59318133b0a88848019f34ad70975 --- .../jgit/storage/dfs/DfsBlockCache.java | 35 ++++++++++++------- 1 file changed, 23 insertions(+), 12 deletions(-) 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 bd68ae520d..d3dadbe295 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 final class DfsBlockCache { 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 @@ public final class DfsBlockCache { 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 @@ public final class DfsBlockCache { if (e2 != e1) { v = scan(e2, key, position); if (v != null) { + statHit.incrementAndGet(); creditSpace(blockSize); return v; } @@ -469,6 +487,8 @@ public final class DfsBlockCache { 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 @@ public final class DfsBlockCache { @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") -- 2.39.5