aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/skyframe/InMemoryGraph.java
diff options
context:
space:
mode:
authorGravatar Nathan Harmata <nharmata@google.com>2015-03-27 17:48:57 +0000
committerGravatar Ulf Adams <ulfjack@google.com>2015-03-30 12:18:19 +0000
commit6fc9fa05e5148c0996823dbaf8a6813d43c15c48 (patch)
treef4eb8325c666b2b73de8ea78d24b0f476dbe93fb /src/main/java/com/google/devtools/build/skyframe/InMemoryGraph.java
parent4664d3d08dfaff85405ae933c0c24e565cc8f1f6 (diff)
Introduce QueryableGraph#getBatch, a batched variant of QueryableGraph#get and use it in the underlying implementation of SkyFunction.Environment#getValues. It's reasonable for an alternative graph implementation to have a more efficient implementation of getBatch than the naive serial implementation.
-- MOS_MIGRATED_REVID=89708027
Diffstat (limited to 'src/main/java/com/google/devtools/build/skyframe/InMemoryGraph.java')
-rw-r--r--src/main/java/com/google/devtools/build/skyframe/InMemoryGraph.java14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/skyframe/InMemoryGraph.java b/src/main/java/com/google/devtools/build/skyframe/InMemoryGraph.java
index 28ba49a7ea..4f617b1c6f 100644
--- a/src/main/java/com/google/devtools/build/skyframe/InMemoryGraph.java
+++ b/src/main/java/com/google/devtools/build/skyframe/InMemoryGraph.java
@@ -17,11 +17,13 @@ import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.MapMaker;
import com.google.common.collect.Maps;
import java.util.Collections;
import java.util.Map;
+import java.util.Set;
import java.util.concurrent.ConcurrentMap;
import javax.annotation.Nullable;
@@ -57,6 +59,18 @@ public class InMemoryGraph implements ProcessableGraph {
}
@Override
+ public Map<SkyKey, NodeEntry> getBatch(Set<SkyKey> keys) {
+ ImmutableMap.Builder<SkyKey, NodeEntry> builder = ImmutableMap.builder();
+ for (SkyKey key : keys) {
+ NodeEntry entry = get(key);
+ if (entry != null) {
+ builder.put(key, entry);
+ }
+ }
+ return builder.build();
+ }
+
+ @Override
public NodeEntry createIfAbsent(SkyKey key) {
NodeEntry newval = keepEdges ? new InMemoryNodeEntry() : new EdgelessInMemoryNodeEntry();
NodeEntry oldval = nodeMap.putIfAbsent(key, newval);