]> source.dussan.org Git - jgit.git/commitdiff
DfsBlockCache: Update hits to not include contains() 46/4546/2
authorColby Ranger <cranger@google.com>
Thu, 3 Nov 2011 22:30:17 +0000 (15:30 -0700)
committerShawn O. Pearce <spearce@spearce.org>
Fri, 4 Nov 2011 18:14:32 +0000 (11:14 -0700)
Also expose the underlying hit and miss counters, in
addition to the hit ratio.

Change-Id: Icea2572d62e59318133b0a88848019f34ad70975

org.eclipse.jgit/src/org/eclipse/jgit/storage/dfs/DfsBlockCache.java

index bd68ae520d10e10597ab59f67f888d70c67edc86..d3dadbe2959e539b5bc9bae00fa0e38e520be57d 100644 (file)
@@ -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> T scan(HashEntry n, DfsPackKey pack, long position) {
-               for (; n != null; n = n.next) {
-                       Ref<T> 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<T> r = scanRef(n, pack, position);
+               return r != null ? r.get() : null;
        }
 
        @SuppressWarnings("unchecked")