From 0e90561c8fb6e706a922d892808aa5877028c770 Mon Sep 17 00:00:00 2001 From: Cedric Beust Date: Wed, 23 Dec 2015 21:09:43 +0400 Subject: [PATCH] Display task timings in --log 2. --- .../com/beust/kobalt/internal/TaskManager.kt | 35 ++++++++++++------- src/main/kotlin/com/beust/kobalt/Main.kt | 8 +++-- 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/TaskManager.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/TaskManager.kt index 6a7519b5..e3e790ad 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/TaskManager.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/TaskManager.kt @@ -7,6 +7,7 @@ import com.beust.kobalt.api.PluginTask import com.beust.kobalt.api.Project import com.beust.kobalt.api.annotation.IncrementalTask import com.beust.kobalt.api.annotation.Task +import com.beust.kobalt.misc.benchmarkMillis import com.beust.kobalt.misc.log import com.google.common.collect.ArrayListMultimap import com.google.common.collect.Multimap @@ -46,8 +47,11 @@ public class TaskManager @Inject constructor(val args: Args, val incrementalMana fun matches(projectName: String) = project == null || project == projectName } - public fun runTargets(taskNames: List, projects: List) : Int { + class RunTargetResult(val exitCode: Int, val messages: List) + + public fun runTargets(taskNames: List, projects: List) : RunTargetResult { var result = 0 + val messages = Collections.synchronizedList(arrayListOf()) projects.forEach { project -> val projectName = project.name // There can be multiple tasks by the same name (e.g. PackagingPlugin and AndroidPlugin both @@ -139,9 +143,13 @@ public class TaskManager @Inject constructor(val args: Args, val incrementalMana val factory = object : IThreadWorkerFactory { override public fun createWorkers(nodes: List): List> { +// val tr = nodes.reduce { workers: List, node: PluginTask -> +// val result: List = workers + TaskWorker(listOf(node), args.dryRun, messages) +// result +// } val thisResult = arrayListOf>() nodes.forEach { - thisResult.add(TaskWorker(arrayListOf(it), args.dryRun)) + thisResult.add(TaskWorker(listOf(it), args.dryRun, messages)) } return thisResult } @@ -154,7 +162,7 @@ public class TaskManager @Inject constructor(val args: Args, val incrementalMana } } - return result + return RunTargetResult(result, messages) } /** @@ -205,7 +213,7 @@ public class TaskManager @Inject constructor(val args: Args, val incrementalMana dependencyNames.forEach { newToProcess.add(TaskInfo(project.name, it)) } - } else { + } else { log(1, "Couldn't find task ${currentTask.taskName}: not applicable to project ${project.name}") } } @@ -319,15 +327,12 @@ public class TaskManager @Inject constructor(val args: Args, val incrementalMana } // - // + // Manage the tasks ///// - } -class TaskWorker(val tasks: List, val dryRun: Boolean) : IWorker { -// override fun compareTo(other: IWorker2): Int { -// return priority.compareTo(other.priority) -// } +class TaskWorker(val tasks: List, val dryRun: Boolean, val messages: MutableList) + : IWorker { override fun call() : TaskResult2 { if (tasks.size > 0) { @@ -338,9 +343,13 @@ class TaskWorker(val tasks: List, val dryRun: Boolean) : IWorker() tasks.forEach { - val tr = if (dryRun) TaskResult() else it.call() - success = success and tr.success - if (tr.errorMessage != null) errorMessages.add(tr.errorMessage) + val name = it.project.name + ":" + it.name + val time = benchmarkMillis { + val tr = if (dryRun) TaskResult() else it.call() + success = success and tr.success + if (tr.errorMessage != null) errorMessages.add(tr.errorMessage) + } + messages.add("$name: $time ms") } return TaskResult2(success, errorMessages.joinToString("\n"), tasks[0]) } diff --git a/src/main/kotlin/com/beust/kobalt/Main.kt b/src/main/kotlin/com/beust/kobalt/Main.kt index f35599cd..ac32669d 100644 --- a/src/main/kotlin/com/beust/kobalt/Main.kt +++ b/src/main/kotlin/com/beust/kobalt/Main.kt @@ -94,7 +94,7 @@ private class Main @Inject constructor( var result = 0 val latestVersionFuture = github.latestKobaltVersion - val seconds = benchmark { + val seconds = benchmarkSeconds { try { result = runWithArgs(jc, args, argv) } catch(ex: KobaltException) { @@ -195,10 +195,12 @@ private class Main @Inject constructor( // // Launch the build // - val thisResult = taskManager.runTargets(args.targets, allProjects) + val runTargetResult = taskManager.runTargets(args.targets, allProjects) if (result == 0) { - result = thisResult + result = runTargetResult.exitCode } + + log(2, "Timings:\n " + runTargetResult.messages.joinToString("\n ")) } } }