Skip to content

Commit ea59e2a

Browse files
authored
Merge pull request #29 from asarkar/issue-27
issue-27: Support parallel builds
2 parents 324e68b + e152acc commit ea59e2a

File tree

3 files changed

+12
-12
lines changed

3 files changed

+12
-12
lines changed

gradle.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ pluginImplementationClass = com.asarkar.gradle.buildtimetracker.BuildTimeTracker
1111
pluginDeclarationName = buildTimeTrackerPlugin
1212

1313
projectGroup = com.asarkar.gradle
14-
projectVersion = 3.0.0
14+
projectVersion = 3.0.1
1515

1616
junitVersion = latest.release
1717
assertjVersion = latest.release

src/main/kotlin/com/asarkar/gradle/buildtimetracker/Printer.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import kotlin.math.round
1313

1414
data class PrinterInput(
1515
val buildDuration: Long,
16-
val taskDurations: List<Pair<String, Long>>,
16+
val taskDurations: Collection<Pair<String, Long>>,
1717
val maxWidth: Int,
1818
val showBars: Boolean,
1919
val barPosition: BarPosition

src/main/kotlin/com/asarkar/gradle/buildtimetracker/TimingRecorder.kt

+10-10
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,21 @@ import org.gradle.api.reflect.TypeOf
1111
import org.gradle.api.tasks.TaskState
1212
import java.time.Duration
1313
import java.time.Instant
14+
import java.util.concurrent.ConcurrentHashMap
15+
import java.util.concurrent.ConcurrentLinkedQueue
1416

1517
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()
1720
private lateinit var buildStarted: Instant
18-
private val taskDurations = mutableListOf<Pair<String, Long>>()
1921

2022
override fun beforeExecute(task: Task) {
21-
taskStarted = Instant.now()
23+
taskStartTimings[task.path] = Instant.now()
2224
}
2325

2426
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
2629
if (duration >= ext.minTaskDuration.get().seconds) {
2730
taskDurations.add(task.path to duration)
2831
}
@@ -40,19 +43,16 @@ class TimingRecorder(private val ext: BuildTimeTrackerPluginExtension) : TaskExe
4043
return
4144
}
4245
val buildDuration = Duration.between(buildStarted, Instant.now()).seconds
43-
if (ext.sort.get()) {
44-
taskDurations.sortBy { -it.second }
45-
}
4646
Printer.newInstance(ext)
47-
.use {
47+
.use { printer ->
4848
val input = PrinterInput(
4949
buildDuration,
50-
taskDurations,
50+
if (ext.sort.get()) taskDurations.sortedBy { -it.second } else taskDurations,
5151
ext.maxWidth.get(),
5252
ext.showBars.get(),
5353
ext.barPosition.get()
5454
)
55-
it.print(input)
55+
printer.print(input)
5656
}
5757
}
5858

0 commit comments

Comments
 (0)