@@ -11,18 +11,21 @@ import org.gradle.api.reflect.TypeOf
11
11
import org.gradle.api.tasks.TaskState
12
12
import java.time.Duration
13
13
import java.time.Instant
14
+ import java.util.concurrent.ConcurrentHashMap
15
+ import java.util.concurrent.ConcurrentLinkedQueue
14
16
15
17
class TimingRecorder (private val ext : BuildTimeTrackerPluginExtension ) : TaskExecutionListener, BuildAdapter() {
16
- private lateinit var taskStarted: Instant
18
+ private val taskStartTimings: MutableMap <String , Instant > = ConcurrentHashMap ()
19
+ private val taskDurations: MutableCollection <Pair <String , Long >> = ConcurrentLinkedQueue ()
17
20
private lateinit var buildStarted: Instant
18
- private val taskDurations = mutableListOf<Pair <String , Long >>()
19
21
20
22
override fun beforeExecute (task : Task ) {
21
- taskStarted = Instant .now()
23
+ taskStartTimings[task.path] = Instant .now()
22
24
}
23
25
24
26
override fun afterExecute (task : Task , state : TaskState ) {
25
- val duration = Duration .between(taskStarted, Instant .now()).seconds
27
+ check(taskStartTimings.contains(task.path)) { " No start timing for task ${task.path} " }
28
+ val duration = Duration .between(taskStartTimings[task.path], Instant .now()).seconds
26
29
if (duration >= ext.minTaskDuration.get().seconds) {
27
30
taskDurations.add(task.path to duration)
28
31
}
@@ -40,19 +43,16 @@ class TimingRecorder(private val ext: BuildTimeTrackerPluginExtension) : TaskExe
40
43
return
41
44
}
42
45
val buildDuration = Duration .between(buildStarted, Instant .now()).seconds
43
- if (ext.sort.get()) {
44
- taskDurations.sortBy { - it.second }
45
- }
46
46
Printer .newInstance(ext)
47
- .use {
47
+ .use { printer ->
48
48
val input = PrinterInput (
49
49
buildDuration,
50
- taskDurations,
50
+ if (ext.sort.get()) taskDurations.sortedBy { - it.second } else taskDurations,
51
51
ext.maxWidth.get(),
52
52
ext.showBars.get(),
53
53
ext.barPosition.get()
54
54
)
55
- it .print (input)
55
+ printer .print (input)
56
56
}
57
57
}
58
58
0 commit comments