From e152acc68a11726936a75279d59a9969db1eac46 Mon Sep 17 00:00:00 2001 From: Abhijit Sarkar Date: Mon, 19 Jul 2021 13:47:10 -0700 Subject: [PATCH] issue-27: Support parallel builds --- gradle.properties | 2 +- .../gradle/buildtimetracker/Printer.kt | 2 +- .../gradle/buildtimetracker/TimingRecorder.kt | 20 +++++++++---------- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/gradle.properties b/gradle.properties index 5baaccc..5626fcc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,7 +11,7 @@ pluginImplementationClass = com.asarkar.gradle.buildtimetracker.BuildTimeTracker pluginDeclarationName = buildTimeTrackerPlugin projectGroup = com.asarkar.gradle -projectVersion = 3.0.0 +projectVersion = 3.0.1 junitVersion = latest.release assertjVersion = latest.release diff --git a/src/main/kotlin/com/asarkar/gradle/buildtimetracker/Printer.kt b/src/main/kotlin/com/asarkar/gradle/buildtimetracker/Printer.kt index bb9dbfa..7f4d32d 100644 --- a/src/main/kotlin/com/asarkar/gradle/buildtimetracker/Printer.kt +++ b/src/main/kotlin/com/asarkar/gradle/buildtimetracker/Printer.kt @@ -13,7 +13,7 @@ import kotlin.math.round data class PrinterInput( val buildDuration: Long, - val taskDurations: List>, + val taskDurations: Collection>, val maxWidth: Int, val showBars: Boolean, val barPosition: BarPosition diff --git a/src/main/kotlin/com/asarkar/gradle/buildtimetracker/TimingRecorder.kt b/src/main/kotlin/com/asarkar/gradle/buildtimetracker/TimingRecorder.kt index 2cc1f0f..f6609ee 100644 --- a/src/main/kotlin/com/asarkar/gradle/buildtimetracker/TimingRecorder.kt +++ b/src/main/kotlin/com/asarkar/gradle/buildtimetracker/TimingRecorder.kt @@ -11,18 +11,21 @@ import org.gradle.api.reflect.TypeOf import org.gradle.api.tasks.TaskState import java.time.Duration import java.time.Instant +import java.util.concurrent.ConcurrentHashMap +import java.util.concurrent.ConcurrentLinkedQueue class TimingRecorder(private val ext: BuildTimeTrackerPluginExtension) : TaskExecutionListener, BuildAdapter() { - private lateinit var taskStarted: Instant + private val taskStartTimings: MutableMap = ConcurrentHashMap() + private val taskDurations: MutableCollection> = ConcurrentLinkedQueue() private lateinit var buildStarted: Instant - private val taskDurations = mutableListOf>() override fun beforeExecute(task: Task) { - taskStarted = Instant.now() + taskStartTimings[task.path] = Instant.now() } override fun afterExecute(task: Task, state: TaskState) { - val duration = Duration.between(taskStarted, Instant.now()).seconds + check(taskStartTimings.contains(task.path)) { "No start timing for task ${task.path}" } + val duration = Duration.between(taskStartTimings[task.path], Instant.now()).seconds if (duration >= ext.minTaskDuration.get().seconds) { taskDurations.add(task.path to duration) } @@ -40,19 +43,16 @@ class TimingRecorder(private val ext: BuildTimeTrackerPluginExtension) : TaskExe return } val buildDuration = Duration.between(buildStarted, Instant.now()).seconds - if (ext.sort.get()) { - taskDurations.sortBy { -it.second } - } Printer.newInstance(ext) - .use { + .use { printer -> val input = PrinterInput( buildDuration, - taskDurations, + if (ext.sort.get()) taskDurations.sortedBy { -it.second } else taskDurations, ext.maxWidth.get(), ext.showBars.get(), ext.barPosition.get() ) - it.print(input) + printer.print(input) } }