diff options
author | nharmata <nharmata@google.com> | 2017-10-31 14:11:56 -0400 |
---|---|---|
committer | John Cater <jcater@google.com> | 2017-11-01 09:58:50 -0400 |
commit | f411e2ef94e7268286a810741fff2ba324fe72c3 (patch) | |
tree | 83becf5809341c7a21e97fc6d433e842faaa09e9 /src/main/java/com/google/devtools/build/lib/concurrent | |
parent | 18462d516727ce3b43773506bca4b2e4424d43b2 (diff) |
Add a 'estimateCurrentNumUniqueValues' method to MultisetSemaphore.
RELNOTES: None
PiperOrigin-RevId: 174062560
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/concurrent')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/concurrent/MultisetSemaphore.java | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/concurrent/MultisetSemaphore.java b/src/main/java/com/google/devtools/build/lib/concurrent/MultisetSemaphore.java index dae49c9e46..76debaa8a1 100644 --- a/src/main/java/com/google/devtools/build/lib/concurrent/MultisetSemaphore.java +++ b/src/main/java/com/google/devtools/build/lib/concurrent/MultisetSemaphore.java @@ -60,6 +60,8 @@ public abstract class MultisetSemaphore<T> { */ public abstract void releaseAll(Set<T> valuesToRelease); + public abstract int estimateCurrentNumUniqueValues(); + /** * Returns a {@link MultisetSemaphore} with a backing {@link Semaphore} that has an unbounded * number of permits; that is, {@link #acquireAll} will never block. @@ -122,6 +124,12 @@ public abstract class MultisetSemaphore<T> { @Override public void releaseAll(Set<T> valuesToRelease) { } + + @Override + public int estimateCurrentNumUniqueValues() { + // We can't give a good estimate since we don't track values at all. + return 0; + } } private static class NaiveMultisetSemaphore<T> extends MultisetSemaphore<T> { @@ -162,5 +170,14 @@ public abstract class MultisetSemaphore<T> { } semaphore.release(numUniqueValuesToRelease); } + + @Override + public int estimateCurrentNumUniqueValues() { + // Notes: + // (1) The race here is completely benign; we're just supposed to return an estimate. + // (2) See the javadoc for Multiset#size, which explains to use entrySet().size() to get the + // number of unique values. + return actualValues.entrySet().size(); + } } } |