aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe
diff options
context:
space:
mode:
authorGravatar tomlu <tomlu@google.com>2018-06-19 15:07:26 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-06-19 15:09:17 -0700
commita0e8aae4b30a23d6a3069c343a47cd56b5ed3809 (patch)
tree255a02dc61f029f3495ca7bbee4f54bc1a6fa40c /src/main/java/com/google/devtools/build/lib/skyframe
parentaf545684f4f9c2697951d291d00ae2106ff65041 (diff)
Add new BuildMetrics event to BEP.
To start we add just a single metric, the number of actions constructed in the current build. RELNOTES: None PiperOrigin-RevId: 201248490
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java22
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java7
2 files changed, 27 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java
index acb7c4a064..c41bf5d224 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java
@@ -13,6 +13,8 @@
// limitations under the License.
package com.google.devtools.build.lib.skyframe;
+import static com.google.devtools.build.skyframe.EvaluationProgressReceiver.EvaluationState.BUILT;
+
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
@@ -76,11 +78,13 @@ import com.google.devtools.build.skyframe.EvaluationProgressReceiver;
import com.google.devtools.build.skyframe.EvaluationResult;
import com.google.devtools.build.skyframe.SkyFunction.Environment;
import com.google.devtools.build.skyframe.SkyKey;
+import com.google.devtools.build.skyframe.SkyValue;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Supplier;
import javax.annotation.Nullable;
@@ -109,6 +113,8 @@ public final class SkyframeBuildView {
private Set<SkyKey> dirtiedConfiguredTargetKeys = Sets.newConcurrentHashSet();
private volatile boolean anyConfiguredTargetDeleted = false;
+ private final AtomicInteger evaluatedActionCount = new AtomicInteger();
+
private final ConfiguredRuleClassProvider ruleClassProvider;
// The host configuration containing all fragments used by this build's transitive closure.
@@ -148,6 +154,14 @@ public final class SkyframeBuildView {
return factory;
}
+ public int getEvaluatedActionCount() {
+ return evaluatedActionCount.get();
+ }
+
+ public void resetEvaluationActionCount() {
+ evaluatedActionCount.set(0);
+ }
+
private boolean areConfigurationsDifferent(BuildConfigurationCollection configurations) {
if (this.configurations == null) {
// no configurations currently, no need to drop anything
@@ -719,6 +733,7 @@ public final class SkyframeBuildView {
@Override
public void evaluated(
SkyKey skyKey,
+ @Nullable SkyValue value,
Supplier<EvaluationSuccessState> evaluationSuccessState,
EvaluationState state) {
if (skyKey.functionName().equals(SkyFunctions.CONFIGURED_TARGET)) {
@@ -729,6 +744,9 @@ public final class SkyframeBuildView {
// During multithreaded operation, this is only set to true, so no concurrency issues.
someConfiguredTargetEvaluated = true;
}
+ if (value instanceof ConfiguredTargetValue) {
+ evaluatedActionCount.addAndGet(((ConfiguredTargetValue) value).getNumActions());
+ }
break;
case CLEAN:
// If the configured target value did not need to be rebuilt, then it wasn't truly
@@ -736,6 +754,10 @@ public final class SkyframeBuildView {
dirtiedConfiguredTargetKeys.remove(skyKey);
break;
}
+ } else if (skyKey.functionName().equals(SkyFunctions.ASPECT)
+ && state == BUILT
+ && value instanceof AspectValue) {
+ evaluatedActionCount.addAndGet(((AspectValue) value).getNumActions());
}
}
}
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 32b5ca0d56..b0aee1bb43 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
@@ -2297,14 +2297,17 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory {
@Override
public void evaluated(
SkyKey skyKey,
+ @Nullable SkyValue value,
Supplier<EvaluationSuccessState> evaluationSuccessState,
EvaluationState state) {
if (ignoreInvalidations) {
return;
}
- skyframeBuildView.getProgressReceiver().evaluated(skyKey, evaluationSuccessState, state);
+ skyframeBuildView
+ .getProgressReceiver()
+ .evaluated(skyKey, value, evaluationSuccessState, state);
if (executionProgressReceiver != null) {
- executionProgressReceiver.evaluated(skyKey, evaluationSuccessState, state);
+ executionProgressReceiver.evaluated(skyKey, value, evaluationSuccessState, state);
}
}
}