Skip to content

Commit db2b173

Browse files
committed
Refactor ScenarioLoader
- extract large method into separate methods for the different build scenarios Signed-off-by: Alex Beggs <[email protected]>
1 parent 2269d0a commit db2b173

File tree

1 file changed

+129
-59
lines changed

1 file changed

+129
-59
lines changed

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

+129-59
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.typesafe.config.Config;
77
import com.typesafe.config.ConfigFactory;
88
import com.typesafe.config.ConfigParseOptions;
9+
import java.util.Collections;
910
import org.gradle.profiler.mutations.ApplyAbiChangeToSourceFileMutator;
1011
import org.gradle.profiler.mutations.ApplyChangeToAndroidLayoutFileMutator;
1112
import org.gradle.profiler.mutations.ApplyChangeToAndroidManifestFileMutator;
@@ -220,72 +221,19 @@ static List<ScenarioDefinition> loadScenarios(File scenarioFile, InvocationSetti
220221
int buildCount = getBuildCount(settings, scenario);
221222
File scenarioBaseDir = new File(settings.getOutputDir(), GradleScenarioDefinition.safeFileName(scenarioName));
222223

223-
if (scenario.hasPath(BAZEL) && settings.isBazel()) {
224-
Config executionInstructions = getConfig(scenarioFile, settings, scenarioName, scenario, BAZEL, BAZEL_KEYS);
225-
226-
List<String> targets = ConfigUtil.strings(executionInstructions, TARGETS);
227-
File bazelHome = getToolHome(executionInstructions);
228-
File outputDir = new File(scenarioBaseDir, "bazel");
229-
int warmUpCount = getWarmUpCount(settings, scenario);
230-
definitions.add(new BazelScenarioDefinition(scenarioName, title, targets, mutators, warmUpCount, buildCount, outputDir, bazelHome));
231-
} else if (scenario.hasPath(BUCK) && settings.isBuck()) {
232-
Config executionInstructions = getConfig(scenarioFile, settings, scenarioName, scenario, BUCK, BUCK_KEYS);
233-
List<String> targets = ConfigUtil.strings(executionInstructions, TARGETS);
234-
String type = ConfigUtil.string(executionInstructions, TYPE, null);
235-
File buckHome = getToolHome(executionInstructions);
236-
File outputDir = new File(scenarioBaseDir, "buck");
237-
int warmUpCount = getWarmUpCount(settings, scenario);
238-
definitions.add(new BuckScenarioDefinition(scenarioName, title, targets, type, mutators, warmUpCount, buildCount, outputDir, buckHome));
239-
} else if (scenario.hasPath(MAVEN) && settings.isMaven()) {
240-
Config executionInstructions = getConfig(scenarioFile, settings, scenarioName, scenario, MAVEN, MAVEN_KEYS);
241-
List<String> targets = ConfigUtil.strings(executionInstructions, TARGETS);
242-
File mavenHome = getToolHome(executionInstructions);
243-
File outputDir = new File(scenarioBaseDir, "maven");
244-
int warmUpCount = getWarmUpCount(settings, scenario);
245-
definitions.add(new MavenScenarioDefinition(scenarioName, title, targets, mutators, warmUpCount, buildCount, outputDir, mavenHome));
246-
} else if (!settings.isBazel() && !settings.isBuck() && !settings.isMaven()) {
247-
List<GradleBuildConfiguration> versions = ConfigUtil.strings(scenario, VERSIONS, settings.getVersions()).stream().map(inspector::readConfiguration).collect(
248-
Collectors.toList());
249-
if (versions.isEmpty()) {
250-
versions.add(inspector.readConfiguration());
251-
}
252-
253-
List<String> gradleArgs = ConfigUtil.strings(scenario, GRADLE_ARGS);
254-
BuildAction buildAction = getBuildAction(scenario, scenarioFile, settings);
255-
GradleBuildInvoker invoker = invoker(scenario, (GradleBuildInvoker) settings.getInvoker(), buildAction);
256-
int warmUpCount = getWarmUpCount(settings, invoker, scenario);
257-
List<String> measuredBuildOperations = getMeasuredBuildOperations(settings, scenario);
258-
BuildAction cleanupAction = getCleanupAction(scenario);
259-
Map<String, String> systemProperties = ConfigUtil.map(scenario, SYSTEM_PROPERTIES, settings.getSystemProperties());
260-
List<String> jvmArgs = ConfigUtil.strings(scenario, JVM_ARGS);
261-
for (GradleBuildConfiguration version : versions) {
262-
File outputDir = versions.size() == 1 ? scenarioBaseDir : new File(scenarioBaseDir, version.getGradleVersion().getVersion());
263-
definitions.add(new GradleScenarioDefinition(
264-
scenarioName,
265-
title,
266-
invoker,
267-
version,
268-
buildAction,
269-
cleanupAction,
270-
gradleArgs,
271-
systemProperties,
272-
mutators,
273-
warmUpCount,
274-
buildCount,
275-
outputDir,
276-
jvmArgs,
277-
measuredBuildOperations
278-
));
279-
}
280-
}
224+
definitions.addAll(
225+
getScenarioDefinitions(
226+
scenarioFile, settings, scenarioName, scenario, title, mutators, buildCount,
227+
scenarioBaseDir, inspector)
228+
);
281229
}
282230

283231
definitions.forEach(ScenarioDefinition::validate);
284232

285233
return definitions;
286234
}
287235

288-
private static Config getConfig(File scenarioFile, InvocationSettings settings, String scenarioName, Config scenario, String toolName, List<String> toolKeys) {
236+
private static Config getExecutionInstructions(File scenarioFile, InvocationSettings settings, String scenarioName, Config scenario, String toolName, List<String> toolKeys) {
289237
if (settings.isProfile()) {
290238
throw new IllegalArgumentException("Can only profile scenario '" + scenarioName + "' when building using Gradle.");
291239
}
@@ -298,6 +246,128 @@ private static Config getConfig(File scenarioFile, InvocationSettings settings,
298246
return executionInstructions;
299247
}
300248

249+
private static List<ScenarioDefinition> getScenarioDefinitions(File scenarioFile,
250+
InvocationSettings settings, String scenarioName, Config scenario, String title,
251+
List<BuildMutator> mutators, int buildCount, File scenarioBaseDir,
252+
GradleBuildConfigurationReader inspector) {
253+
List<? extends ScenarioDefinition> scenarioDefinitions;
254+
if (scenario.hasPath(BAZEL) && settings.isBazel()) {
255+
scenarioDefinitions = getBazelScenarioDefinitions(
256+
scenarioFile, settings, scenarioName, scenario, title, mutators, buildCount,
257+
scenarioBaseDir);
258+
} else if (scenario.hasPath(BUCK) && settings.isBuck()) {
259+
scenarioDefinitions = getBuckScenarioDefinitions(
260+
scenarioFile, settings, scenarioName, scenario, title, mutators, buildCount,
261+
scenarioBaseDir);
262+
} else if (scenario.hasPath(MAVEN) && settings.isMaven()) {
263+
scenarioDefinitions = getMavenScenarioDefinitions(
264+
scenarioFile, settings, scenarioName, scenario, title, mutators, buildCount,
265+
scenarioBaseDir);
266+
} else if (!settings.isBazel() && !settings.isBuck() && !settings.isMaven()) {
267+
scenarioDefinitions = getGradleScenarioDefinitions(
268+
scenarioFile, settings, scenarioName, scenario, title, mutators, buildCount,
269+
scenarioBaseDir, inspector
270+
);
271+
} else {
272+
scenarioDefinitions = Collections.emptyList();
273+
}
274+
return Collections.unmodifiableList(scenarioDefinitions);
275+
}
276+
277+
private static List<GradleScenarioDefinition> getGradleScenarioDefinitions(
278+
File scenarioFile,
279+
InvocationSettings settings, String scenarioName, Config scenario, String title,
280+
List<BuildMutator> mutators, int buildCount, File scenarioBaseDir,
281+
GradleBuildConfigurationReader inspector
282+
) {
283+
List<GradleScenarioDefinition> scenarioDefinitions = new ArrayList<>();
284+
List<GradleBuildConfiguration> versions = ConfigUtil
285+
.strings(scenario, VERSIONS, settings.getVersions()).stream()
286+
.map(inspector::readConfiguration).collect(
287+
Collectors.toList());
288+
if (versions.isEmpty()) {
289+
versions.add(inspector.readConfiguration());
290+
}
291+
292+
List<String> gradleArgs = ConfigUtil.strings(scenario, GRADLE_ARGS);
293+
BuildAction buildAction = getBuildAction(scenario, scenarioFile, settings);
294+
GradleBuildInvoker invoker = invoker(scenario,
295+
(GradleBuildInvoker) settings.getInvoker(), buildAction);
296+
int warmUpCount = getWarmUpCount(settings, invoker, scenario);
297+
List<String> measuredBuildOperations = getMeasuredBuildOperations(settings,
298+
scenario);
299+
BuildAction cleanupAction = getCleanupAction(scenario);
300+
Map<String, String> systemProperties = ConfigUtil
301+
.map(scenario, SYSTEM_PROPERTIES, settings.getSystemProperties());
302+
List<String> jvmArgs = ConfigUtil.strings(scenario, JVM_ARGS);
303+
for (GradleBuildConfiguration version : versions) {
304+
File outputDir = versions.size() == 1 ? scenarioBaseDir
305+
: new File(scenarioBaseDir, version.getGradleVersion().getVersion());
306+
scenarioDefinitions.add(new GradleScenarioDefinition(
307+
scenarioName,
308+
title,
309+
invoker,
310+
version,
311+
buildAction,
312+
cleanupAction,
313+
gradleArgs,
314+
systemProperties,
315+
mutators,
316+
warmUpCount,
317+
buildCount,
318+
outputDir,
319+
jvmArgs,
320+
measuredBuildOperations
321+
));
322+
}
323+
return scenarioDefinitions;
324+
}
325+
326+
private static List<MavenScenarioDefinition> getMavenScenarioDefinitions(File scenarioFile,
327+
InvocationSettings settings, String scenarioName, Config scenario, String title,
328+
List<BuildMutator> mutators, int buildCount, File scenarioBaseDir) {
329+
330+
Config executionInstructions = getExecutionInstructions(scenarioFile, settings, scenarioName,
331+
scenario, MAVEN, MAVEN_KEYS);
332+
List<String> targets = ConfigUtil.strings(executionInstructions, TARGETS);
333+
File mavenHome = getToolHome(executionInstructions);
334+
File outputDir = new File(scenarioBaseDir, "maven");
335+
int warmUpCount = getWarmUpCount(settings, scenario);
336+
return Arrays.asList(new MavenScenarioDefinition(scenarioName,
337+
title, targets, mutators, warmUpCount,
338+
buildCount, outputDir, mavenHome));
339+
}
340+
341+
private static List<BuckScenarioDefinition> getBuckScenarioDefinitions(File scenarioFile,
342+
InvocationSettings settings, String scenarioName, Config scenario, String title,
343+
List<BuildMutator> mutators, int buildCount, File scenarioBaseDir) {
344+
Config executionInstructions = getExecutionInstructions(scenarioFile, settings, scenarioName,
345+
scenario, BUCK, BUCK_KEYS);
346+
List<String> targets = ConfigUtil.strings(executionInstructions, TARGETS);
347+
String type = ConfigUtil.string(executionInstructions, TYPE, null);
348+
File buckHome = getToolHome(executionInstructions);
349+
File outputDir = new File(scenarioBaseDir, "buck");
350+
int warmUpCount = getWarmUpCount(settings, scenario);
351+
return Arrays
352+
.asList(new BuckScenarioDefinition(scenarioName, title, targets, type, mutators,
353+
warmUpCount, buildCount, outputDir, buckHome));
354+
}
355+
356+
private static List<BazelScenarioDefinition> getBazelScenarioDefinitions(File scenarioFile,
357+
InvocationSettings settings, String scenarioName, Config scenario, String title,
358+
List<BuildMutator> mutators, int buildCount, File scenarioBaseDir) {
359+
Config executionInstructions = getExecutionInstructions(scenarioFile, settings, scenarioName, scenario,
360+
BAZEL, BAZEL_KEYS);
361+
362+
List<String> targets = ConfigUtil.strings(executionInstructions, TARGETS);
363+
File bazelHome = getToolHome(executionInstructions);
364+
File outputDir = new File(scenarioBaseDir, "bazel");
365+
int warmUpCount = getWarmUpCount(settings, scenario);
366+
return Arrays.asList(new BazelScenarioDefinition(
367+
scenarioName, title, targets, mutators, warmUpCount, buildCount, outputDir,
368+
bazelHome));
369+
}
370+
301371
private static ImmutableList<String> getMeasuredBuildOperations(InvocationSettings settings, Config scenario) {
302372
return ImmutableSet.<String>builder()
303373
.addAll(settings.getMeasuredBuildOperations())

0 commit comments

Comments
 (0)