aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/concurrent
diff options
context:
space:
mode:
authorGravatar nharmata <nharmata@google.com>2017-10-31 14:11:56 -0400
committerGravatar John Cater <jcater@google.com>2017-11-01 09:58:50 -0400
commitf411e2ef94e7268286a810741fff2ba324fe72c3 (patch)
tree83becf5809341c7a21e97fc6d433e842faaa09e9 /src/main/java/com/google/devtools/build/lib/concurrent
parent18462d516727ce3b43773506bca4b2e4424d43b2 (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.java17
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();
+ }
}
}