aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Nathan Harmata <nharmata@google.com>2016-01-13 19:42:45 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2016-01-14 09:53:19 +0000
commit483ded980b2a3f4128dbc42419172068c51147a4 (patch)
treef48c963c7bbdfcba33c97131dbc96414e8002c95 /src
parentee624453d9f5dd908d721abb4663246c70bf4509 (diff)
Use AutoProfiler in SkyQueryEnvironment#init. Also augment the WalkableGraphFactory interface with a hook to inform the factory when the WalkableGraph is done being used.
-- MOS_MIGRATED_REVID=112074284
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java18
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java5
-rw-r--r--src/main/java/com/google/devtools/build/skyframe/WalkableGraph.java3
3 files changed, 17 insertions, 9 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
index 7df803396a..28431bec76 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
@@ -42,7 +42,7 @@ import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
import com.google.devtools.build.lib.pkgcache.TargetPatternEvaluator;
-import com.google.devtools.build.lib.profiler.Profiler;
+import com.google.devtools.build.lib.profiler.AutoProfiler;
import com.google.devtools.build.lib.query2.engine.AllRdepsFunction;
import com.google.devtools.build.lib.query2.engine.Callback;
import com.google.devtools.build.lib.query2.engine.QueryEvalResult;
@@ -141,14 +141,12 @@ public class SkyQueryEnvironment extends AbstractBlazeQueryEnvironment<Target> {
}
private void init() throws InterruptedException {
- long startTime = Profiler.nanoTimeMaybe();
- EvaluationResult<SkyValue> result =
- graphFactory.prepareAndGet(universeScope, parserPrefix, loadingPhaseThreads, eventHandler);
- graph = result.getWalkableGraph();
- long duration = Profiler.nanoTimeMaybe() - startTime;
- if (duration > 0) {
- LOG.info("Spent " + (duration / 1000 / 1000) + " ms on evaluation and walkable graph");
+ EvaluationResult<SkyValue> result;
+ try (AutoProfiler p = AutoProfiler.logged("evaluation and walkable graph", LOG)) {
+ result = graphFactory.prepareAndGet(universeScope, parserPrefix, loadingPhaseThreads,
+ eventHandler);
}
+ graph = result.getWalkableGraph();
SkyKey universeKey = graphFactory.getUniverseKey(universeScope, parserPrefix);
universeTargetPatternKeys =
@@ -178,7 +176,9 @@ public class SkyQueryEnvironment extends AbstractBlazeQueryEnvironment<Target> {
// errors here.
eventHandler.resetErrors();
init();
- return super.evaluateQuery(expr, callback);
+ QueryEvalResult result = super.evaluateQuery(expr, callback);
+ graphFactory.afterUse(graph);
+ return result;
}
private Map<Target, Collection<Target>> makeTargetsMap(Map<SkyKey, Iterable<SkyKey>> input) {
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
index 20b3777fe2..1bae0b7276 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
@@ -136,6 +136,7 @@ import com.google.devtools.build.skyframe.SkyFunction;
import com.google.devtools.build.skyframe.SkyFunctionName;
import com.google.devtools.build.skyframe.SkyKey;
import com.google.devtools.build.skyframe.SkyValue;
+import com.google.devtools.build.skyframe.WalkableGraph;
import com.google.devtools.build.skyframe.WalkableGraph.WalkableGraphFactory;
import java.io.IOException;
@@ -1455,6 +1456,10 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory {
return evaluationResult;
}
+ @Override
+ public void afterUse(WalkableGraph walkableGraph) {
+ }
+
/**
* Get metadata related to the prepareAndGet() lookup. Resulting data is specific to the
* underlying evaluation implementation.
diff --git a/src/main/java/com/google/devtools/build/skyframe/WalkableGraph.java b/src/main/java/com/google/devtools/build/skyframe/WalkableGraph.java
index 0c073a7565..75c347f8fe 100644
--- a/src/main/java/com/google/devtools/build/skyframe/WalkableGraph.java
+++ b/src/main/java/com/google/devtools/build/skyframe/WalkableGraph.java
@@ -80,6 +80,9 @@ public interface WalkableGraph {
EvaluationResult<SkyValue> prepareAndGet(Collection<String> roots, String offset,
int numThreads, EventHandler eventHandler) throws InterruptedException;
+ /** Consumers of the graph given by {@link #prepareAndGet} may call this after they are done. */
+ void afterUse(WalkableGraph walkableGraph);
+
/** Returns the {@link SkyKey} that defines this universe. */
SkyKey getUniverseKey(Collection<String> roots, String offset);
}