From 0dde612bca82f428a95d6d764af7703afb333b37 Mon Sep 17 00:00:00 2001 From: klee0kai Date: Sun, 6 Aug 2023 13:26:56 +0400 Subject: [PATCH 1/3] collect and print task prices --- example/build.gradle.kts | 6 +- .../klee0kai/tasktree/TaskTreeExtension.kt | 33 +++++++++++ .../klee0kai/tasktree/tasks/TaskTreeTask.kt | 57 ++++++++++++++----- .../klee0kai/tasktree/utils/ProjectExt.kt | 18 +++++- 4 files changed, 97 insertions(+), 17 deletions(-) diff --git a/example/build.gradle.kts b/example/build.gradle.kts index 3145ce2..4bf70f0 100644 --- a/example/build.gradle.kts +++ b/example/build.gradle.kts @@ -9,12 +9,14 @@ tasks.create("simple_first_task") { tasks.getByName("assemble").dependsOn(this) } - tasktree { inputs = false outputs = false - printClassName = true + printClassName = false + printPrice = true + printWeight = true + printComplexPrice = true } diff --git a/tasktree/src/main/kotlin/com/github/klee0kai/tasktree/TaskTreeExtension.kt b/tasktree/src/main/kotlin/com/github/klee0kai/tasktree/TaskTreeExtension.kt index 1de7206..520d698 100644 --- a/tasktree/src/main/kotlin/com/github/klee0kai/tasktree/TaskTreeExtension.kt +++ b/tasktree/src/main/kotlin/com/github/klee0kai/tasktree/TaskTreeExtension.kt @@ -2,16 +2,49 @@ package com.github.klee0kai.tasktree open class TaskTreeExtension { + /** + * Print task inputs + */ var inputs: Boolean = false + /** + * Print task outputs + */ var outputs: Boolean = false + /** + * Graph max depth + */ var maxDepth: Int = -1 + /** + * print task's class type + */ var printClassName: Boolean = false + /** + * Don't show doubles in graph + */ var printDoubles: Boolean = false + /** + * Print dependency count for task + */ + var printPrice: Boolean = false + + /** + * Print depended task count + */ + var printWeight: Boolean = false + + /** + * Complex price + * ``` + * ( dependencies count ) * (depended task count) / ( all task count ) + * ``` + * Show that task expensive to run and necessary for many others + */ + var printComplexPrice: Boolean = false } diff --git a/tasktree/src/main/kotlin/com/github/klee0kai/tasktree/tasks/TaskTreeTask.kt b/tasktree/src/main/kotlin/com/github/klee0kai/tasktree/tasks/TaskTreeTask.kt index 7b7d3af..d9a78d5 100644 --- a/tasktree/src/main/kotlin/com/github/klee0kai/tasktree/tasks/TaskTreeTask.kt +++ b/tasktree/src/main/kotlin/com/github/klee0kai/tasktree/tasks/TaskTreeTask.kt @@ -1,9 +1,7 @@ package com.github.klee0kai.tasktree.tasks import com.github.klee0kai.tasktree.TaskTreeExtension -import com.github.klee0kai.tasktree.utils.requestedTasks -import com.github.klee0kai.tasktree.utils.simpleClassName -import com.github.klee0kai.tasktree.utils.taskGraph +import com.github.klee0kai.tasktree.utils.* import org.gradle.api.Project import org.gradle.api.Task import org.gradle.api.tasks.diagnostics.ProjectBasedReportTask @@ -19,23 +17,58 @@ open class TaskTreeTask @Inject constructor( private val renderer = TextReportRenderer() private val graphRenderer: GraphRenderer? by lazy { GraphRenderer(renderer.textOutput) } - private val renderedTasks = HashSet() + private val renderedTasks = mutableSetOf() + private val allTasks = mutableSetOf() override fun getRenderer(): ReportRenderer = renderer override fun generate(project: Project) { + project.requestedTasks?.flatMap { + setOf(it) + project.taskGraph.getAllDeps(it) + }?.let { allTasks.addAll(it) } + project.requestedTasks?.forEach { render(it) } + + + renderedTasks.clear() + allTasks.clear() } private fun render(task: Task, lastChild: Boolean = true, depth: Int = 0) { graphRenderer?.visit({ + val allDeps by lazy { project.taskGraph.getAllDeps(task) } + val dependedCount by lazy { + allTasks.count { + project.taskGraph + .getDeps(it) + .contains(task) + } + } + val complexPrice by lazy { + val depsCount = allDeps.size.toFloat() + val allTasksCount = allTasks.count().toFloat() + depsCount * (dependedCount / allTasksCount) + } + withStyle(Identifier) .text(task.name) + if (ext.printPrice) { + withStyle(Description) + .text(" price: ${allDeps.size};") + } + if (ext.printWeight) { + withStyle(Description) + .text(" weight: $dependedCount;") + } + if (ext.printComplexPrice) { + withStyle(Description) + .text(" complexPrice: $complexPrice;") + } if (ext.printClassName) { withStyle(Description) - .text(" class: ${task.simpleClassName}") + .text(" class: ${task.simpleClassName};") } if (task.isIncludedBuild) { @@ -67,15 +100,11 @@ open class TaskTreeTask @Inject constructor( renderedTasks.add(task) graphRenderer?.startChildren() - try { - val deps = project.taskGraph.getDependencies(task) - val depsSize = deps.size - deps.forEachIndexed { indx, it -> - val lastChild = indx >= depsSize - 1 - render(it, lastChild = lastChild, depth = depth + 1) - } - } catch (ignore: Exception) { - //ignore non available info + val deps = project.taskGraph.getDeps(task) + val depsSize = deps.size + deps.forEachIndexed { indx, it -> + val lastChild = indx >= depsSize - 1 + render(it, lastChild = lastChild, depth = depth + 1) } graphRenderer?.completeChildren() } diff --git a/tasktree/src/main/kotlin/com/github/klee0kai/tasktree/utils/ProjectExt.kt b/tasktree/src/main/kotlin/com/github/klee0kai/tasktree/utils/ProjectExt.kt index ff99bdf..96e8c35 100644 --- a/tasktree/src/main/kotlin/com/github/klee0kai/tasktree/utils/ProjectExt.kt +++ b/tasktree/src/main/kotlin/com/github/klee0kai/tasktree/utils/ProjectExt.kt @@ -13,4 +13,20 @@ val Project.executionPlan get() = taskGraph.executionPlan val Project.isTaskTreeRequested get() = executionPlan?.requestedTasks?.any { it is TaskTreeTask } ?: false -val Project.requestedTasks get() = executionPlan?.requestedTasks?.filter { it !is TaskTreeTask } \ No newline at end of file +val Project.requestedTasks get() = executionPlan?.requestedTasks?.filter { it !is TaskTreeTask } + +fun DefaultTaskExecutionGraph.getAllDeps(task: Task): Set = + getDeps(task) + .flatMap { + setOf(it) + getAllDeps(it) + } + .toSet() + + +fun DefaultTaskExecutionGraph.getDeps(task: Task): Set = + try { + getDependencies(task) + } catch (ignore: Exception) { + //ignore non available info + setOf() + } From ccedf4af2be0b11cb26d7b9e322c5a2459dda8c4 Mon Sep 17 00:00:00 2001 From: klee0kai Date: Sun, 6 Aug 2023 13:27:17 +0400 Subject: [PATCH 2/3] remove useless repositories --- build.gradle.kts | 1 - settings.gradle.kts | 2 -- 2 files changed, 3 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 44066f5..2269842 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,7 +1,6 @@ buildscript { repositories { gradlePluginPortal() - mavenLocal() mavenCentral() google() mavenCentral() diff --git a/settings.gradle.kts b/settings.gradle.kts index bef36d3..c56f4ad 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -4,7 +4,6 @@ pluginManagement { google() mavenCentral() maven(url = "https://plugins.gradle.org/m2") - maven(url = "https://jitpack.io") } } @@ -13,7 +12,6 @@ dependencyResolutionManagement { repositories { google() mavenCentral() - maven(url = "https://jitpack.io") } } From 238ca9432654ca356290696a02df6097435d13bc Mon Sep 17 00:00:00 2001 From: klee0kai Date: Sun, 6 Aug 2023 13:28:31 +0400 Subject: [PATCH 3/3] gradle init with extensions --- readme.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/readme.md b/readme.md index 1335f99..6c6f8c0 100644 --- a/readme.md +++ b/readme.md @@ -58,6 +58,11 @@ initscript { rootProject{ pluginManager.apply(com.github.klee0kai.tasktree.TaskTreePlugin::class.java) + + extensions.findByType(com.github.klee0kai.tasktree.TaskTreeExtension::class.java) + ?.apply { + printComplexPrice = true + } } ```