diff options
author | 2015-03-27 17:48:57 +0000 | |
---|---|---|
committer | 2015-03-30 12:18:19 +0000 | |
commit | 6fc9fa05e5148c0996823dbaf8a6813d43c15c48 (patch) | |
tree | f4eb8325c666b2b73de8ea78d24b0f476dbe93fb /src/main/java/com/google/devtools/build/skyframe/InMemoryGraph.java | |
parent | 4664d3d08dfaff85405ae933c0c24e565cc8f1f6 (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.java | 14 |
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); |