Skip to content

Commit

Permalink
Warm up profiler plugin code
Browse files Browse the repository at this point in the history
The build scan and chrome trace plugins should be warmed
up to minimize their effect on the final measurement.
  • Loading branch information
oehme committed Apr 1, 2017
1 parent 64d42f9 commit 7948fd1
Show file tree
Hide file tree
Showing 10 changed files with 87 additions and 82 deletions.
17 changes: 12 additions & 5 deletions src/main/java/org/gradle/profiler/GeneratedInitScript.java
Expand Up @@ -25,20 +25,27 @@
public abstract class GeneratedInitScript {
private final File initScript;

public GeneratedInitScript() throws IOException {
initScript = File.createTempFile("gradleProfiler" + getClass().getSimpleName(), ".gradle");
public GeneratedInitScript() {
try {
initScript = File.createTempFile("gradleProfiler" + getClass().getSimpleName(), ".gradle");
} catch (IOException e) {
throw new RuntimeException(e);
}
initScript.deleteOnExit();
}

public abstract void writeContents(PrintWriter writer);
protected abstract void writeContents(PrintWriter writer);

protected void generateInitScript() throws IOException {
private void generateInitScript(){
try (PrintWriter writer = new PrintWriter(new FileWriter(initScript))) {
writeContents(writer);
} catch (IOException e) {
throw new RuntimeException(e);
}
}

public List<String> getArgs() {
public final List<String> getArgs() {
generateInitScript();
return Arrays.asList("-I", initScript.getAbsolutePath());
}
}
8 changes: 1 addition & 7 deletions src/main/java/org/gradle/profiler/PidInstrumentation.java
@@ -1,19 +1,13 @@
package org.gradle.profiler;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.*;

class PidInstrumentation extends GeneratedInitScript {
private final File pidFile;

PidInstrumentation() throws IOException {
super();
pidFile = File.createTempFile("gradle-profiler", "pid");
pidFile.deleteOnExit();
generateInitScript();
}

@Override
Expand Down

This file was deleted.

10 changes: 2 additions & 8 deletions src/main/java/org/gradle/profiler/bs/BuildScanInitScript.java
Expand Up @@ -17,19 +17,14 @@

import org.gradle.profiler.GeneratedInitScript;

import java.io.IOException;
import java.io.PrintWriter;

public class BuildScanInitScript extends GeneratedInitScript {
public final static String VERSION = "1.6";

private final String version;

public BuildScanInitScript(String version) throws IOException {
super();
this.version = version == null ? VERSION : version;
generateInitScript();
System.out.println("Using build scan profiler version " + this.version);
public BuildScanInitScript(String version) {
this.version = version;
}

@Override
Expand All @@ -50,7 +45,6 @@ public void writeContents(final PrintWriter writer) {
writer.write(" buildScan {\n");
writer.write(" licenseAgreementUrl = 'https://gradle.com/terms-of-service'\n");
writer.write(" licenseAgree = 'yes'\n");
writer.write(" publishAlways()\n");
writer.write(" }\n");
writer.write("}\n");
}
Expand Down
24 changes: 22 additions & 2 deletions src/main/java/org/gradle/profiler/bs/BuildScanProfiler.java
Expand Up @@ -14,14 +14,18 @@
import java.util.stream.Stream;

public class BuildScanProfiler extends Profiler {

private final static String VERSION = "1.6";

private final String buildScanVersion;

public BuildScanProfiler() {
this(null);
}

private BuildScanProfiler(String buildScanVersion) {
this.buildScanVersion = buildScanVersion;
this.buildScanVersion = buildScanVersion == null ? VERSION : buildScanVersion;
;
}

@Override
Expand Down Expand Up @@ -57,9 +61,25 @@ public List<String> summarizeResultFile(File resultFile) {
return buildScanURLs;
}

@Override
public GradleArgsCalculator newGradleArgsCalculator(ScenarioSettings settings) {
return new GradleArgsCalculator() {
@Override
public void calculateGradleArgs(List<String> gradleArgs) {
gradleArgs.addAll(new BuildScanInitScript(buildScanVersion).getArgs());
}
};
}

@Override
public GradleArgsCalculator newInstrumentedBuildsGradleArgsCalculator(ScenarioSettings settings) {
return new BuildScanGradleArgsCalculator(buildScanVersion);
return new GradleArgsCalculator() {
@Override
public void calculateGradleArgs(List<String> gradleArgs) {
System.out.println("Using build scan profiler version " + buildScanVersion);
gradleArgs.add("-Dscan");
}
};
}

@Override
Expand Down

This file was deleted.

15 changes: 8 additions & 7 deletions src/main/java/org/gradle/profiler/ct/ChromeTraceInitScript.java
Expand Up @@ -29,12 +29,14 @@ public class ChromeTraceInitScript extends GeneratedInitScript {
private final File chromeTracePlugin;
private final File traceFile;

public ChromeTraceInitScript(File outputDir) throws IOException {
super();
chromeTracePlugin = File.createTempFile("chrome-trace", ".jar");
public ChromeTraceInitScript(File outputDir) {
try {
chromeTracePlugin = File.createTempFile("chrome-trace", "jar");
} catch (IOException e) {
throw new RuntimeException(e);
}
chromeTracePlugin.deleteOnExit();
traceFile = new File(outputDir, "chrome-trace.html");
unpackChromeTracePlugin();
generateInitScript();
}

private void unpackChromeTracePlugin() {
Expand All @@ -48,6 +50,7 @@ private void unpackChromeTracePlugin() {

@Override
public void writeContents(final PrintWriter writer) {
unpackChromeTracePlugin();
writer.write("initscript {\n");
writer.write(" dependencies {\n");
writer.write(" classpath files(\"" + chromeTracePlugin.getAbsolutePath() + "\")\n");
Expand All @@ -57,6 +60,4 @@ public void writeContents(final PrintWriter writer) {
writer.write("rootProject { ext.chromeTraceFile = new File(\"" + traceFile.getAbsolutePath() + "\") }\n");
writer.write("apply plugin: org.gradle.trace.GradleTracingPlugin\n");
}


}
18 changes: 17 additions & 1 deletion src/main/java/org/gradle/profiler/ct/ChromeTraceProfiler.java
Expand Up @@ -22,8 +22,24 @@ public List<String> summarizeResultFile(File resultFile) {
return null;
}

@Override
public GradleArgsCalculator newGradleArgsCalculator(ScenarioSettings settings) {
return new GradleArgsCalculator() {
@Override
public void calculateGradleArgs(List<String> gradleArgs) {
gradleArgs.addAll(new ChromeTraceInitScript(settings.getScenario().getOutputDir()).getArgs());
}
};
}

@Override
public GradleArgsCalculator newInstrumentedBuildsGradleArgsCalculator(ScenarioSettings settings) {
return new ChromeTraceGradleArgsCalculator(settings);
return new GradleArgsCalculator() {
@Override
public void calculateGradleArgs(List<String> gradleArgs) {
gradleArgs.add("-Dtrace");
}
};
}

}
@@ -1,6 +1,7 @@
package org.gradle.profiler

import org.gradle.profiler.bs.BuildScanInitScript
import org.gradle.profiler.bs.BuildScanProfiler
import org.gradle.profiler.jprofiler.JProfiler
import org.gradle.profiler.yjp.YourKit
import org.junit.Rule
Expand Down Expand Up @@ -366,7 +367,7 @@ println "<daemon: " + gradle.services.get(org.gradle.internal.environment.Gradle
logFile.grep("<gradle-version: $gradleVersion>").size() == 4
logFile.grep("<daemon: true").size() == 4
logFile.grep("<tasks: [assemble]>").size() == 3
assertBuildScanPublished(BuildScanInitScript.VERSION)
assertBuildScanPublished(BuildScanProfiler.VERSION)
}

@Requires({ new File(JProfiler.getDefaultHomeDir()).exists() })
Expand All @@ -385,6 +386,22 @@ apply plugin: BasePlugin
outputDir.listFiles().find { it.name.matches("default.jps") }
}

@Requires({ new File(JProfiler.getDefaultHomeDir()).exists() })
def "profiles --no-daemon build using JProfiler"() {
given:
buildFile.text = """
apply plugin: BasePlugin
"""

when:
new Main().
run("--project-dir", projectDir.absolutePath, "--output-dir", outputDir.absolutePath, "--gradle-version", gradleVersion, "--profile", "jprofiler",
"--no-daemon", "assemble")

then:
outputDir.listFiles().find { it.name.matches("default.jps") }
}

@Requires({ new File(JProfiler.getDefaultHomeDir()).exists() })
def "profiles build using JProfiler with all supported options"() {
given:
Expand Down
Expand Up @@ -181,13 +181,15 @@ public void buildFinished(BuildResult result) {
start(PHASE_BUILD, CATEGORY_PHASE, toNanoTime(buildRequestMetaData.getBuildTimeClock().getStartTime()));
finish(PHASE_BUILD, System.nanoTime(), new HashMap<>());

File traceFile = getTraceFile();
if (System.getProperty("trace") != null) {
File traceFile = getTraceFile();

copyResourceToFile("/trace-header.html", traceFile, false);
writeEvents(traceFile);
copyResourceToFile("/trace-footer.html", traceFile, true);
copyResourceToFile("/trace-header.html", traceFile, false);
writeEvents(traceFile);
copyResourceToFile("/trace-footer.html", traceFile, true);

result.getGradle().getRootProject().getLogger().lifecycle("Trace written to file://" + traceFile.getAbsolutePath());
result.getGradle().getRootProject().getLogger().lifecycle("Trace written to file://" + traceFile.getAbsolutePath());
}
}

private void copyResourceToFile(String resourcePath, File traceFile, boolean append) {
Expand Down

0 comments on commit 7948fd1

Please sign in to comment.