Skip to content

Commit e0cfe31

Browse files
authored
Merge pull request #274 from gradle/lptr/disallow-cleanup-actions-with-warm-daemon
2 parents c9dc1c2 + edc695c commit e0cfe31

37 files changed

+288
-233
lines changed

.editorconfig

+3
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,6 @@ insert_final_newline = true
1818
# Markdown files sometimes need trailing whitespaces.
1919
[*.md]
2020
trim_trailing_whitespace = false
21+
22+
[*.json]
23+
indent_size = 2

src/main/java/org/gradle/profiler/AdhocGradleScenarioDefinition.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,13 @@
44
import java.util.Collections;
55
import java.util.List;
66
import java.util.Map;
7-
import java.util.function.Supplier;
87

98
public class AdhocGradleScenarioDefinition extends GradleScenarioDefinition {
109
public AdhocGradleScenarioDefinition(
1110
GradleBuildConfiguration version,
1211
GradleBuildInvoker invoker,
1312
BuildAction buildAction,
1413
Map<String, String> systemProperties,
15-
Supplier<BuildMutator> buildMutator,
1614
int warmUpCount,
1715
int buildCount,
1816
File outputDir,
@@ -27,7 +25,7 @@ public AdhocGradleScenarioDefinition(
2725
BuildAction.NO_OP,
2826
Collections.emptyList(),
2927
systemProperties,
30-
buildMutator,
28+
Collections.emptyList(),
3129
warmUpCount,
3230
buildCount,
3331
outputDir,

src/main/java/org/gradle/profiler/BazelScenarioDefinition.java

+7-3
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,19 @@
33
import javax.annotation.Nullable;
44
import java.io.File;
55
import java.util.List;
6-
import java.util.function.Supplier;
76

87
public class BazelScenarioDefinition extends BuildToolCommandLineScenarioDefinition {
98
public BazelScenarioDefinition(
109
String scenarioName,
1110
@Nullable String title,
1211
List<String> targets,
13-
Supplier<BuildMutator> buildMutator,
12+
List<BuildMutator> buildMutators,
1413
int warmUpCount,
1514
int buildCount,
1615
File outputDir,
1716
@Nullable File bazelHome
1817
) {
19-
super(scenarioName, title, targets, buildMutator, warmUpCount, buildCount, outputDir, bazelHome);
18+
super(scenarioName, title, targets, buildMutators, warmUpCount, buildCount, outputDir, bazelHome);
2019
}
2120

2221
@Override
@@ -34,6 +33,11 @@ public String getBuildToolDisplayName() {
3433
return "bazel";
3534
}
3635

36+
@Override
37+
public BuildInvoker getInvoker() {
38+
return BuildInvoker.Bazel;
39+
}
40+
3741
@Override
3842
protected String getExecutableName() {
3943
if (OperatingSystem.isWindows()) {

src/main/java/org/gradle/profiler/BuckScenarioDefinition.java

+7-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import java.io.File;
55
import java.io.PrintStream;
66
import java.util.List;
7-
import java.util.function.Supplier;
87

98
public class BuckScenarioDefinition extends BuildToolCommandLineScenarioDefinition {
109
private final String type;
@@ -14,13 +13,13 @@ public BuckScenarioDefinition(
1413
@Nullable String title,
1514
List<String> targets,
1615
String type,
17-
Supplier<BuildMutator> buildMutator,
16+
List<BuildMutator> buildMutators,
1817
int warmUpCount,
1918
int buildCount,
2019
File outputDir,
2120
@Nullable File buckHome
2221
) {
23-
super(scenarioName, title, targets, buildMutator, warmUpCount, buildCount, outputDir, buckHome);
22+
super(scenarioName, title, targets, buildMutators, warmUpCount, buildCount, outputDir, buckHome);
2423
this.type = type;
2524
}
2625

@@ -43,6 +42,11 @@ public String getType() {
4342
return type;
4443
}
4544

45+
@Override
46+
public BuildInvoker getInvoker() {
47+
return BuildInvoker.Buck;
48+
}
49+
4650
@Override
4751
protected void printDetail(PrintStream out) {
4852
out.println(" Targets: " + getTargets());

src/main/java/org/gradle/profiler/BuildInvoker.java

+4
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,8 @@ public int benchmarkWarmUps() {
2727
public int profileWarmUps() {
2828
return 2;
2929
}
30+
31+
public boolean allowsCleanupBetweenBuilds() {
32+
return true;
33+
}
3034
}

src/main/java/org/gradle/profiler/BuildMutator.java

+5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
package org.gradle.profiler;
22

33
public interface BuildMutator {
4+
/**
5+
* Validates if the mutator works with the given invoker.
6+
*/
7+
default void validate(BuildInvoker invoker) {}
8+
49
/**
510
* Runs before the first iteration of the scenario.
611
*/

src/main/java/org/gradle/profiler/BuildMutatorFactory.java

-35
This file was deleted.

src/main/java/org/gradle/profiler/BuildToolCommandLineInvoker.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public abstract class BuildToolCommandLineInvoker<T extends BuildToolCommandLine
1515
void doRun(T scenario, InvocationSettings settings, Consumer<BuildInvocationResult> resultConsumer, List<String> commandLine) {
1616
ScenarioContext scenarioContext = ScenarioContext.from(settings, scenario);
1717

18-
BuildMutator mutator = scenario.getBuildMutator().get();
18+
BuildMutator mutator = new CompositeBuildMutator(scenario.getBuildMutators());
1919
mutator.beforeScenario(scenarioContext);
2020
try {
2121
for (int iteration = 1; iteration <= scenario.getWarmUpCount(); iteration++) {

src/main/java/org/gradle/profiler/BuildToolCommandLineScenarioDefinition.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import java.io.File;
55
import java.io.PrintStream;
66
import java.util.List;
7-
import java.util.function.Supplier;
87

98
public abstract class BuildToolCommandLineScenarioDefinition extends ScenarioDefinition {
109
private final List<String> targets;
@@ -14,13 +13,13 @@ public BuildToolCommandLineScenarioDefinition(
1413
String name,
1514
@Nullable String title,
1615
List<String> targets,
17-
Supplier<BuildMutator> buildMutator,
16+
List<BuildMutator> buildMutators,
1817
int warmUpCount,
1918
int buildCount,
2019
File outputDir,
2120
@Nullable File toolHome
2221
) {
23-
super(name, title, buildMutator, warmUpCount, buildCount, outputDir);
22+
super(name, title, buildMutators, warmUpCount, buildCount, outputDir);
2423
this.targets = targets;
2524
this.toolHome = toolHome;
2625
}

src/main/java/org/gradle/profiler/GradleBuildInvoker.java

+6
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,12 @@ private GradleBuildInvoker(GradleClientSpec client, GradleDaemonReuse daemonReus
1919
this.daemonReuse = daemonReuse;
2020
}
2121

22+
@Override
23+
public boolean allowsCleanupBetweenBuilds() {
24+
// Warm daemons keep caches open and thus they cannot be removed
25+
return !isReuseDaemon();
26+
}
27+
2228
@Override
2329
public String toString() {
2430
if (daemonReuse == GradleDaemonReuse.ColdDaemonOnly) {

src/main/java/org/gradle/profiler/GradleScenarioDefinition.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import java.util.List;
99
import java.util.Map;
1010
import java.util.function.Consumer;
11-
import java.util.function.Supplier;
1211
import java.util.stream.Collectors;
1312

1413
public class GradleScenarioDefinition extends ScenarioDefinition {
@@ -31,14 +30,14 @@ public GradleScenarioDefinition(
3130
BuildAction cleanupAction,
3231
List<String> gradleArgs,
3332
Map<String, String> systemProperties,
34-
Supplier<BuildMutator> buildMutator,
33+
List<BuildMutator> buildMutators,
3534
int warmUpCount,
3635
int buildCount,
3736
File outputDir,
3837
List<String> jvmArgs,
3938
List<String> measuredBuildOperations
4039
) {
41-
super(name, title, buildMutator, warmUpCount, buildCount, outputDir);
40+
super(name, title, buildMutators, warmUpCount, buildCount, outputDir);
4241
this.invoker = invoker;
4342
this.buildAction = buildAction;
4443
this.buildConfiguration = buildConfiguration;
@@ -77,6 +76,7 @@ public List<String> getGradleArgs() {
7776
return gradleArgs;
7877
}
7978

79+
@Override
8080
public GradleBuildInvoker getInvoker() {
8181
return invoker;
8282
}

src/main/java/org/gradle/profiler/GradleScenarioInvoker.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public void doRun(GradleScenarioDefinition scenario, InvocationSettings settings
6464

6565
daemonControl.stop(buildConfiguration);
6666

67-
BuildMutator mutator = scenario.getBuildMutator().get();
67+
BuildMutator mutator = new CompositeBuildMutator(scenario.getBuildMutators());
6868
ScenarioContext scenarioContext = ScenarioContext.from(settings, scenario);
6969
GradleClient gradleClient = scenario.getInvoker().getClient().create(buildConfiguration, settings);
7070
try {

src/main/java/org/gradle/profiler/MavenScenarioDefinition.java

+7-3
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,19 @@
33
import javax.annotation.Nullable;
44
import java.io.File;
55
import java.util.List;
6-
import java.util.function.Supplier;
76

87
public class MavenScenarioDefinition extends BuildToolCommandLineScenarioDefinition {
98
public MavenScenarioDefinition(
109
String scenarioName,
1110
@Nullable String title,
1211
List<String> targets,
13-
Supplier<BuildMutator> buildMutator,
12+
List<BuildMutator> buildMutators,
1413
int warmUpCount,
1514
int buildCount,
1615
File outputDir,
1716
@Nullable File mavenHome
1817
) {
19-
super(scenarioName, title, targets, buildMutator, warmUpCount, buildCount, outputDir, mavenHome);
18+
super(scenarioName, title, targets, buildMutators, warmUpCount, buildCount, outputDir, mavenHome);
2019
}
2120

2221
@Override
@@ -34,6 +33,11 @@ public String getBuildToolDisplayName() {
3433
return "maven";
3534
}
3635

36+
@Override
37+
public BuildInvoker getInvoker() {
38+
return BuildInvoker.Maven;
39+
}
40+
3741
@Override
3842
protected String getExecutableName() {
3943
if (OperatingSystem.isWindows()) {

src/main/java/org/gradle/profiler/ScenarioDefinition.java

+19-8
Original file line numberDiff line numberDiff line change
@@ -3,34 +3,43 @@
33
import javax.annotation.Nullable;
44
import java.io.File;
55
import java.io.PrintStream;
6+
import java.util.List;
67
import java.util.function.Consumer;
7-
import java.util.function.Supplier;
88

99
public abstract class ScenarioDefinition {
1010
private final String name;
1111
private final String title;
12-
private final Supplier<BuildMutator> buildMutator;
12+
private final List<BuildMutator> buildMutators;
1313
private final int warmUpCount;
1414
private final int buildCount;
1515
private final File outputDir;
1616

17-
1817
public ScenarioDefinition(
1918
String name,
2019
@Nullable String title,
21-
Supplier<BuildMutator> buildMutator,
20+
List<BuildMutator> buildMutators,
2221
int warmUpCount,
2322
int buildCount,
2423
File outputDir
2524
) {
2625
this.name = name;
2726
this.title = title;
28-
this.buildMutator = buildMutator;
27+
this.buildMutators = buildMutators;
2928
this.warmUpCount = warmUpCount;
3029
this.buildCount = buildCount;
3130
this.outputDir = outputDir;
3231
}
3332

33+
public void validate() {
34+
for (BuildMutator buildMutator : buildMutators) {
35+
try {
36+
buildMutator.validate(getInvoker());
37+
} catch (Exception ex) {
38+
throw new IllegalStateException("Scenario '" + getTitle() + "' is invalid: " + ex.getMessage(), ex);
39+
}
40+
}
41+
}
42+
3443
/**
3544
* A specific title defined for the scenario to be used in reports (defaults to {@link #getName()}.
3645
*/
@@ -58,6 +67,8 @@ public String getTitle() {
5867
*/
5968
public abstract String getTasksDisplayName();
6069

70+
public abstract BuildInvoker getInvoker();
71+
6172
public String getName() {
6273
return name;
6374
}
@@ -66,8 +77,8 @@ public File getOutputDir() {
6677
return outputDir;
6778
}
6879

69-
public Supplier<BuildMutator> getBuildMutator() {
70-
return buildMutator;
80+
public List<BuildMutator> getBuildMutators() {
81+
return buildMutators;
7182
}
7283

7384
public int getWarmUpCount() {
@@ -81,7 +92,7 @@ public int getBuildCount() {
8192
public void printTo(PrintStream out) {
8293
out.println("Scenario: " + getDisplayName());
8394
printDetail(out);
84-
out.println(" Build changes: " + getBuildMutator());
95+
out.println(" Build changes: " + getBuildMutators());
8596
out.println(" Warm-ups: " + getWarmUpCount());
8697
out.println(" Builds: " + getBuildCount());
8798
}

0 commit comments

Comments
 (0)