DfsBlockCache: Update hits to not include contains()

Also expose the underlying hit and miss counters, in
addition to the hit ratio.

Change-Id: Icea2572d62e59318133b0a88848019f34ad70975
This commit is contained in:
Colby Ranger 2011-11-03 15:30:17 -07:00 committed by Shawn O. Pearce
parent 0f8e486a4d
commit f70ecabb30
1 changed files with 23 additions and 12 deletions

View File

@ -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> 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> 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")