|
25 | 25 | import java.util.List;
|
26 | 26 | import java.util.Map;
|
27 | 27 | import java.util.concurrent.atomic.AtomicLong;
|
| 28 | +import java.util.concurrent.atomic.AtomicReference; |
28 | 29 |
|
29 | 30 | @SuppressWarnings("unused")
|
30 | 31 | public class BuildOperationTrace {
|
@@ -95,7 +96,7 @@ public BuildOperationDurationRecordingListener() throws ClassNotFoundException {
|
95 | 96 | for (Map.Entry<String, File> entry : getParameters().getCapturedBuildOperations().get().entrySet()) {
|
96 | 97 | String operationType = entry.getKey();
|
97 | 98 | File outputFile = entry.getValue();
|
98 |
| - collectors.add(new BuildOperationCollector(Class.forName(operationType + "$Details"), outputFile)); |
| 99 | + collectors.add(new BuildOperationTimeCollector(Class.forName(operationType + "$Details"), outputFile)); |
99 | 100 | }
|
100 | 101 | }
|
101 | 102 |
|
@@ -126,24 +127,38 @@ public void close() throws IOException {
|
126 | 127 | }
|
127 | 128 | }
|
128 | 129 |
|
129 |
| - private static class BuildOperationCollector { |
130 |
| - private final Class<?> detailsType; |
| 130 | + private abstract static class BuildOperationCollector { |
131 | 131 | private final File outputFile;
|
132 |
| - private final AtomicLong buildOperationTime = new AtomicLong(0); |
| 132 | + private final AtomicReference<Double> data = new AtomicReference<>(0d); |
133 | 133 |
|
134 |
| - public BuildOperationCollector(Class<?> detailsType, File outputFile) { |
135 |
| - this.detailsType = detailsType; |
| 134 | + public BuildOperationCollector(File outputFile) { |
136 | 135 | this.outputFile = outputFile;
|
137 | 136 | }
|
138 | 137 |
|
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); |
143 | 142 | }
|
144 | 143 |
|
145 | 144 | 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 | + } |
147 | 162 | }
|
148 | 163 | }
|
149 | 164 | }
|
0 commit comments