aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2015-02-11 00:18:07 +0000
committerGravatar Han-Wen Nienhuys <hanwen@google.com>2015-02-11 00:18:07 +0000
commitcdc90e9279fdd127720cb0bf8548ce3e1b4f6042 (patch)
treea6796726dbe7c59a36ed38f548c2824adeed03ef /src/main/java/com
parenta242f210e6584a4fbe2b29e2ca42e94dbb843552 (diff)
As a follow up to []. This changelist creates an intermediary FileWriteAction to store the list of lcov files in a file before calling the code coverage report binary.
Cleanup on the COVERAGE_REPORT to support multiple actions. RELNOTES: HTML code coverage report fix for large targets. -- MOS_MIGRATED_REVID=86033675
Diffstat (limited to 'src/main/java/com')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/BuildView.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/test/CoverageReportActionFactory.java43
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/CoverageReportFunction.java17
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/CoverageReportValue.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/PrecomputedValue.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java4
6 files changed, 67 insertions, 20 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
index 052d0a2a9a..59adaf7892 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
@@ -64,6 +64,7 @@ import com.google.devtools.build.lib.packages.Type;
import com.google.devtools.build.lib.pkgcache.LoadingPhaseRunner.LoadingResult;
import com.google.devtools.build.lib.pkgcache.PackageManager;
import com.google.devtools.build.lib.rules.test.CoverageReportActionFactory;
+import com.google.devtools.build.lib.rules.test.CoverageReportActionFactory.CoverageReportActionsWrapper;
import com.google.devtools.build.lib.skyframe.ConfiguredTargetKey;
import com.google.devtools.build.lib.skyframe.CoverageReportValue;
import com.google.devtools.build.lib.skyframe.SkyframeBuildView;
@@ -700,7 +701,7 @@ public class BuildView {
/**
* Skyframe implementation of {@link PackageRootResolver}.
- *
+ *
* <p> Note: you should not use this class inside of any SkyFunction.
*/
@VisibleForTesting
@@ -741,14 +742,16 @@ public class BuildView {
artifactsToBuild.addAll(buildInfoArtifacts);
addExtraActionsIfRequested(viewOptions, artifactsToBuild, configuredTargets);
if (coverageReportActionFactory != null) {
- Action action = coverageReportActionFactory.createCoverageReportAction(
+ CoverageReportActionsWrapper actionsWrapper;
+ actionsWrapper = coverageReportActionFactory.createCoverageReportActionsWrapper(
allTargetsToTest,
getBaselineCoverageArtifacts(configuredTargets),
artifactFactory,
CoverageReportValue.ARTIFACT_OWNER);
- if (action != null) {
- skyframeExecutor.injectCoverageReportData(action);
- artifactsToBuild.addAll(action.getOutputs());
+ if (actionsWrapper != null) {
+ ImmutableList <Action> actions = actionsWrapper.getActions();
+ skyframeExecutor.injectCoverageReportData(actions);
+ artifactsToBuild.addAll(actionsWrapper.getCoverageOutputs());
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/test/CoverageReportActionFactory.java b/src/main/java/com/google/devtools/build/lib/rules/test/CoverageReportActionFactory.java
index c3f5788a64..9354d4340b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/test/CoverageReportActionFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/test/CoverageReportActionFactory.java
@@ -14,6 +14,8 @@
package com.google.devtools.build.lib.rules.test;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.actions.Action;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.ArtifactFactory;
@@ -31,12 +33,43 @@ import javax.annotation.Nullable;
public interface CoverageReportActionFactory {
/**
- * Returns a coverage report Action. May return null if it's not necessary to create
- * such an Action based on the input parameters and some other data available to
- * the factory implementation, such as command line arguments.
+ * Wraps the necessary actions to get a coverage report as well as the final
+ * output artifacts.
+ * The lcovWriteAction creates a file containing a set of lcov files.
+ * This file is used as an input artifact for coverageReportAction.
+ * We are only interested about the output artifacts from
+ * coverageReportAction.
*/
+
+ public static final class CoverageReportActionsWrapper {
+ private final Action lcovWriteAction;
+ private final Action coverageReportAction;
+
+ public CoverageReportActionsWrapper (
+ Action lcovWriteAction, Action coverageReportAction) {
+ this.lcovWriteAction = lcovWriteAction;
+ this.coverageReportAction = coverageReportAction;
+ }
+
+ public ImmutableList<Action> getActions() {
+ return ImmutableList.of(lcovWriteAction, coverageReportAction);
+ }
+
+ public ImmutableSet<Artifact> getCoverageOutputs() {
+ return coverageReportAction.getOutputs();
+ }
+ }
+
+ /**
+ * Returns a CoverageReportActionsWrapper. May return null if
+ * it's not necessary to create such Actions based on the input parameters
+ * and some other data available to the factory implementation, such as
+ * command line arguments.
+ */
+
@Nullable
- public Action createCoverageReportAction(Collection<ConfiguredTarget> targetsToTest,
+ public CoverageReportActionsWrapper createCoverageReportActionsWrapper(
+ Collection<ConfiguredTarget> targetsToTest,
Set<Artifact> baselineCoverageArtifacts,
ArtifactFactory artifactFactory, ArtifactOwner artifactOwner);
-} \ No newline at end of file
+}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/CoverageReportFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/CoverageReportFunction.java
index 8d6fe3d684..19802e3a01 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/CoverageReportFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/CoverageReportFunction.java
@@ -15,7 +15,10 @@
package com.google.devtools.build.lib.skyframe;
import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.actions.Action;
+import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.skyframe.SkyFunction;
import com.google.devtools.build.skyframe.SkyKey;
import com.google.devtools.build.skyframe.SkyValue;
@@ -32,14 +35,20 @@ public class CoverageReportFunction implements SkyFunction {
CoverageReportValue.SKY_KEY.equals(skyKey), String.format(
"Expected %s for SkyKey but got %s instead", CoverageReportValue.SKY_KEY, skyKey));
- Action action = PrecomputedValue.COVERAGE_REPORT_KEY.get(env);
- if (action == null) {
+ ImmutableList <Action> actions = PrecomputedValue.COVERAGE_REPORT_KEY.get(env);
+ if (actions == null) {
return null;
}
+ ImmutableSet.Builder<Artifact> outputs = new ImmutableSet.Builder<>();
+
+ for (Action action : actions) {
+ outputs.addAll(action.getOutputs());
+ }
+
return new CoverageReportValue(
- action.getOutputs(),
- action);
+ outputs.build(),
+ actions);
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/CoverageReportValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/CoverageReportValue.java
index 862e381d15..45b84ed952 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/CoverageReportValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/CoverageReportValue.java
@@ -14,6 +14,7 @@
package com.google.devtools.build.lib.skyframe;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.actions.Action;
import com.google.devtools.build.lib.actions.Artifact;
@@ -32,8 +33,8 @@ public class CoverageReportValue extends ActionLookupValue {
public static final ArtifactOwner ARTIFACT_OWNER = new CoverageReportKey();
public CoverageReportValue(ImmutableSet<Artifact> coverageReportArtifacts,
- Action coverageReportAction) {
- super(coverageReportAction);
+ ImmutableList <Action> coverageReportActions) {
+ super(coverageReportActions);
this.coverageReportArtifacts = coverageReportArtifacts;
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PrecomputedValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/PrecomputedValue.java
index bb2656d2c4..5c9a337694 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PrecomputedValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PrecomputedValue.java
@@ -17,6 +17,7 @@ import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
import com.google.common.base.Supplier;
import com.google.common.base.Suppliers;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.actions.Action;
import com.google.devtools.build.lib.analysis.BlazeDirectories;
@@ -83,8 +84,8 @@ public class PrecomputedValue implements SkyValue {
static final Precomputed<WorkspaceStatusAction> WORKSPACE_STATUS_KEY =
new Precomputed<>(new SkyKey(SkyFunctions.PRECOMPUTED, "workspace_status_action"));
- static final Precomputed<Action> COVERAGE_REPORT_KEY =
- new Precomputed<>(new SkyKey(SkyFunctions.PRECOMPUTED, "coverage_report_action"));
+ static final Precomputed<ImmutableList <Action>> COVERAGE_REPORT_KEY =
+ new Precomputed<>(new SkyKey(SkyFunctions.PRECOMPUTED, "coverage_report_actions"));
static final Precomputed<TopLevelArtifactContext> TOP_LEVEL_CONTEXT =
new Precomputed<>(new SkyKey(SkyFunctions.PRECOMPUTED, "top_level_context"));
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 29b4c236b2..a30b5c7343 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
@@ -511,8 +511,8 @@ public abstract class SkyframeExecutor {
artifactFactory.get(), WorkspaceStatusValue.ARTIFACT_OWNER, buildId));
}
- public void injectCoverageReportData(Action action) {
- PrecomputedValue.COVERAGE_REPORT_KEY.set(injectable(), action);
+ public void injectCoverageReportData(ImmutableList<Action> actions) {
+ PrecomputedValue.COVERAGE_REPORT_KEY.set(injectable(), actions);
}
/**