Skip to content

Commit 8235eca

Browse files
committed
Separate capturing build operations from measuring their execution time
1 parent 774e23a commit 8235eca

File tree

4 files changed

+29
-14
lines changed

4 files changed

+29
-14
lines changed

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ protected Duration getDuration(GradleBuildInvocationResult result) {
2727
}
2828
};
2929

30-
public static Sample<GradleBuildInvocationResult> sampleBuildOperation(String buildOperationDetailsClass) {
30+
public static Sample<GradleBuildInvocationResult> sampleBuildOperationDuration(String buildOperationDetailsClass) {
3131
return new TimeSample<GradleBuildInvocationResult>() {
3232
@Override
3333
public String getName() {

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public List<Sample<? super GradleBuildInvocationResult>> samplesFor(InvocationSe
3737
builder.add(GradleBuildInvocationResult.TIME_TO_TASK_EXECUTION);
3838
}
3939
scenario.getMeasuredBuildOperations().stream()
40-
.map(GradleBuildInvocationResult::sampleBuildOperation)
40+
.map(GradleBuildInvocationResult::sampleBuildOperationDuration)
4141
.forEach(builder::add);
4242
return builder.build();
4343
}

src/main/java/org/gradle/profiler/buildops/BuildOperationInstrumentation.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ public Map<String, Duration> getCumulativeBuildOperationTimes() {
9090
private static Duration readCumulativeTimeFromDataFile(File dataFile) {
9191
try {
9292
try (Stream<String> lines = Files.lines(dataFile.toPath(), StandardCharsets.UTF_8)) {
93-
return Duration.ofMillis(lines.mapToLong(Long::parseLong).sum());
93+
return Duration.ofNanos((long) lines.mapToDouble(Double::parseDouble).sum() * 1000000);
9494
}
9595
} catch (IOException e) {
9696
throw new RuntimeException("Could not read result from file.", e);

subprojects/build-operations/src/main/java/org/gradle/trace/buildops/BuildOperationTrace.java

+26-11
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import java.util.List;
2626
import java.util.Map;
2727
import java.util.concurrent.atomic.AtomicLong;
28+
import java.util.concurrent.atomic.AtomicReference;
2829

2930
@SuppressWarnings("unused")
3031
public class BuildOperationTrace {
@@ -95,7 +96,7 @@ public BuildOperationDurationRecordingListener() throws ClassNotFoundException {
9596
for (Map.Entry<String, File> entry : getParameters().getCapturedBuildOperations().get().entrySet()) {
9697
String operationType = entry.getKey();
9798
File outputFile = entry.getValue();
98-
collectors.add(new BuildOperationCollector(Class.forName(operationType + "$Details"), outputFile));
99+
collectors.add(new BuildOperationTimeCollector(Class.forName(operationType + "$Details"), outputFile));
99100
}
100101
}
101102

@@ -126,24 +127,38 @@ public void close() throws IOException {
126127
}
127128
}
128129

129-
private static class BuildOperationCollector {
130-
private final Class<?> detailsType;
130+
private abstract static class BuildOperationCollector {
131131
private final File outputFile;
132-
private final AtomicLong buildOperationTime = new AtomicLong(0);
132+
private final AtomicReference<Double> data = new AtomicReference<>(0d);
133133

134-
public BuildOperationCollector(Class<?> detailsType, File outputFile) {
135-
this.detailsType = detailsType;
134+
public BuildOperationCollector(File outputFile) {
136135
this.outputFile = outputFile;
137136
}
138137

139-
public void collect(Object details, OperationFinishEvent operationFinishEvent) {
140-
if (detailsType.isAssignableFrom(details.getClass())) {
141-
buildOperationTime.addAndGet(operationFinishEvent.getEndTime() - operationFinishEvent.getStartTime());
142-
}
138+
public abstract void collect(Object details, OperationFinishEvent operationFinishEvent);
139+
140+
protected void accumulate(double delta) {
141+
data.accumulateAndGet(delta, Double::sum);
143142
}
144143

145144
public void write() throws IOException {
146-
Files.write(outputFile.toPath(), String.valueOf(buildOperationTime.longValue()).getBytes(StandardCharsets.UTF_8));
145+
Files.write(outputFile.toPath(), String.valueOf(data.get().doubleValue()).getBytes(StandardCharsets.UTF_8));
146+
}
147+
}
148+
149+
private static class BuildOperationTimeCollector extends BuildOperationCollector {
150+
private final Class<?> detailsType;
151+
152+
public BuildOperationTimeCollector(Class<?> detailsType, File outputFile) {
153+
super(outputFile);
154+
this.detailsType = detailsType;
155+
}
156+
157+
@Override
158+
public void collect(Object details, OperationFinishEvent operationFinishEvent) {
159+
if (detailsType.isAssignableFrom(details.getClass())) {
160+
accumulate(operationFinishEvent.getEndTime() - operationFinishEvent.getStartTime());
161+
}
147162
}
148163
}
149164
}

0 commit comments

Comments
 (0)