summaryrefslogtreecommitdiffstatsabout
diff options
context:
space:
mode:
authorDave Borowitz2011-11-03 15:54:21 (EDT)
committer Shawn O. Pearce2011-11-04 14:14:32 (EDT)
commit4fc1af68501c70407ade42dc13906061939a499c (patch)
treea91568df80f61975154397deb62f72396f57f277
parentdff9d56b946552b4a6b802908a22793f95d3738c (diff)
downloadjgit-4fc1af68501c70407ade42dc13906061939a499c.zip
jgit-4fc1af68501c70407ade42dc13906061939a499c.tar.gz
jgit-4fc1af68501c70407ade42dc13906061939a499c.tar.bz2
Add a DfsPackFile method to get the number of cached bytesrefs/changes/43/4543/3
The counter is actually stored in the DfsPackKey so it can be manipulated by the cache. Change-Id: I10cee76c92d65c68d1aa1a9dd0c4fd7173c4cede
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/storage/dfs/DfsBlockCache.java11
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/storage/dfs/DfsPackFile.java5
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/storage/dfs/DfsPackKey.java5
3 files changed, 19 insertions, 2 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 871a2c5..bd68ae5 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
@@ -115,8 +115,12 @@ public final class DfsBlockCache {
DfsBlockCache oc = cache;
cache = nc;
- if (oc != null && oc.readAheadService != null)
- oc.readAheadService.shutdown();
+ if (oc != null) {
+ if (oc.readAheadService != null)
+ oc.readAheadService.shutdown();
+ for (DfsPackFile pack : oc.getPackFiles())
+ pack.key.cachedSize.set(0);
+ }
}
/** @return the currently active DfsBlockCache. */
@@ -343,6 +347,7 @@ public final class DfsBlockCache {
e2 = table.get(slot);
}
+ key.cachedSize.addAndGet(v.size());
Ref<DfsBlock> ref = new Ref<DfsBlock>(key, position, v.size(), v);
ref.hot = true;
for (;;) {
@@ -389,6 +394,7 @@ public final class DfsBlockCache {
dead.next = null;
dead.value = null;
live -= dead.size;
+ dead.pack.cachedSize.addAndGet(-dead.size);
statEvict++;
} while (maxBytes < live);
clockHand = prev;
@@ -438,6 +444,7 @@ public final class DfsBlockCache {
}
}
+ key.cachedSize.addAndGet(size);
ref = new Ref<T>(key, pos, size, v);
ref.hot = true;
for (;;) {
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/storage/dfs/DfsPackFile.java b/org.eclipse.jgit/src/org/eclipse/jgit/storage/dfs/DfsPackFile.java
index 02ba0a0..573e8e7 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/storage/dfs/DfsPackFile.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/storage/dfs/DfsPackFile.java
@@ -171,6 +171,11 @@ public final class DfsPackFile {
return packDesc;
}
+ /** @return bytes cached in memory for this pack, excluding the index. */
+ public long getCachedSize() {
+ return key.cachedSize.get();
+ }
+
private String getPackName() {
return packDesc.getPackName();
}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/storage/dfs/DfsPackKey.java b/org.eclipse.jgit/src/org/eclipse/jgit/storage/dfs/DfsPackKey.java
index 8e77dba..880ac99 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/storage/dfs/DfsPackKey.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/storage/dfs/DfsPackKey.java
@@ -43,13 +43,18 @@
package org.eclipse.jgit.storage.dfs;
+import java.util.concurrent.atomic.AtomicLong;
+
final class DfsPackKey {
final int hash;
+ final AtomicLong cachedSize;
+
DfsPackKey() {
// Multiply by 31 here so we can more directly combine with another
// value without doing the multiply there.
//
hash = System.identityHashCode(this) * 31;
+ cachedSize = new AtomicLong();
}
}