From 7357aeb1c9bdf7e0d82a6ee620ce1ae274657b7f Mon Sep 17 00:00:00 2001 From: "nataliya.valtman" Date: Mon, 26 Jul 2021 06:20:04 +0300 Subject: [PATCH] Add output size to ES metrics --- .../report/metrics/BuildMetricsReporter.kt | 11 ++++++----- .../report/metrics/BuildMetricsReporterImpl.kt | 18 +++++++++++------- .../kotlin/build/report/metrics/BuildTime.kt | 7 ++++++- .../metrics/DoNothingBuildMetricsReporter.kt | 7 +++++-- .../incremental/ClasspathChangesComputer.kt | 5 +++-- .../org/jetbrains/kotlin/gradle/tasks/Tasks.kt | 12 ++++++++++++ 6 files changed, 43 insertions(+), 17 deletions(-) diff --git a/build-common/src/org/jetbrains/kotlin/build/report/metrics/BuildMetricsReporter.kt b/build-common/src/org/jetbrains/kotlin/build/report/metrics/BuildMetricsReporter.kt index e27d5a70223..a633b8319c6 100644 --- a/build-common/src/org/jetbrains/kotlin/build/report/metrics/BuildMetricsReporter.kt +++ b/build-common/src/org/jetbrains/kotlin/build/report/metrics/BuildMetricsReporter.kt @@ -6,8 +6,9 @@ package org.jetbrains.kotlin.build.report.metrics interface BuildMetricsReporter { - fun startMeasure(metric: BuildTime, startNs: Long) - fun endMeasure(metric: BuildTime, endNs: Long) + fun startMeasure(time: BuildTime, startNs: Long) + fun endMeasure(time: BuildTime, endNs: Long) + fun addMetric(metric: BuildTime, value: Long) fun addAttribute(attribute: BuildAttribute) @@ -15,14 +16,14 @@ interface BuildMetricsReporter { fun addMetrics(metrics: BuildMetrics?) } -inline fun BuildMetricsReporter.measure(metric: BuildTime, fn: () -> T): T { +inline fun BuildMetricsReporter.measure(time: BuildTime, fn: () -> T): T { val start = System.nanoTime() - startMeasure(metric, start) + startMeasure(time, start) try { return fn() } finally { val end = System.nanoTime() - endMeasure(metric, end) + endMeasure(time, end) } } \ No newline at end of file diff --git a/build-common/src/org/jetbrains/kotlin/build/report/metrics/BuildMetricsReporterImpl.kt b/build-common/src/org/jetbrains/kotlin/build/report/metrics/BuildMetricsReporterImpl.kt index 62ec6d75345..79de9b22501 100644 --- a/build-common/src/org/jetbrains/kotlin/build/report/metrics/BuildMetricsReporterImpl.kt +++ b/build-common/src/org/jetbrains/kotlin/build/report/metrics/BuildMetricsReporterImpl.kt @@ -15,17 +15,21 @@ class BuildMetricsReporterImpl : BuildMetricsReporter { private val myBuildTimes = BuildTimes() private val myBuildAttributes = BuildAttributes() - override fun startMeasure(metric: BuildTime, startNs: Long) { - if (metric in myBuildTimeStartNs) { - error("$metric was restarted before it finished") + override fun startMeasure(time: BuildTime, startNs: Long) { + if (time in myBuildTimeStartNs) { + error("$time was restarted before it finished") } - myBuildTimeStartNs[metric] = startNs + myBuildTimeStartNs[time] = startNs } - override fun endMeasure(metric: BuildTime, endNs: Long) { - val startNs = myBuildTimeStartNs.remove(metric) ?: error("$metric finished before it started") + override fun endMeasure(time: BuildTime, endNs: Long) { + val startNs = myBuildTimeStartNs.remove(time) ?: error("$time finished before it started") val durationMs = (endNs - startNs) / 1_000_000 - myBuildTimes.add(metric, durationMs) + myBuildTimes.add(time, durationMs) + } + + override fun addMetric(metric: BuildTime, value: Long) { + myBuildTimes.add(metric, value) } override fun addAttribute(attribute: BuildAttribute) { diff --git a/build-common/src/org/jetbrains/kotlin/build/report/metrics/BuildTime.kt b/build-common/src/org/jetbrains/kotlin/build/report/metrics/BuildTime.kt index b12eb0d46cf..c17136c9c6c 100644 --- a/build-common/src/org/jetbrains/kotlin/build/report/metrics/BuildTime.kt +++ b/build-common/src/org/jetbrains/kotlin/build/report/metrics/BuildTime.kt @@ -16,6 +16,7 @@ enum class BuildTime(val parent: BuildTime? = null, val readableString: String) RESTORE_OUTPUT_FROM_BACKUP(GRADLE_TASK, "Restore output"), CONNECT_TO_DAEMON(GRADLE_TASK, "Connect to Kotlin daemon"), CLEAR_JAR_CACHE(GRADLE_TASK, "Clear jar cache"), + CALCULATE_OUTPUT_SIZE(GRADLE_TASK, "Calculate output size"), RUN_COMPILER(GRADLE_TASK, "Run compiler"), NON_INCREMENTAL_COMPILATION_IN_PROCESS(RUN_COMPILER, "Inprocess compilation"), NON_INCREMENTAL_COMPILATION_OUT_OF_PROCESS(RUN_COMPILER, "Out of process compilation"), @@ -36,7 +37,11 @@ enum class BuildTime(val parent: BuildTime? = null, val readableString: String) IC_UPDATE_CACHES(INCREMENTAL_COMPILATION, "Update caches"), INCREMENTAL_ITERATION(INCREMENTAL_COMPILATION, "Incremental iteration"), NON_INCREMENTAL_ITERATION(INCREMENTAL_COMPILATION, "Non-incremental iteration"), - IC_WRITE_HISTORY_FILE(INCREMENTAL_COMPILATION, "Write history file"); + IC_WRITE_HISTORY_FILE(INCREMENTAL_COMPILATION, "Write history file"), + OUTPUT_SIZE(readableString = "Total output size"), + LOOKUP_SIZE(OUTPUT_SIZE, "Lookups size"), + SNAPSHOT_SIZE(OUTPUT_SIZE, "ABI snapshot size") + ; companion object { const val serialVersionUID = 0L diff --git a/build-common/src/org/jetbrains/kotlin/build/report/metrics/DoNothingBuildMetricsReporter.kt b/build-common/src/org/jetbrains/kotlin/build/report/metrics/DoNothingBuildMetricsReporter.kt index 500e6db1238..00f5c770d4a 100644 --- a/build-common/src/org/jetbrains/kotlin/build/report/metrics/DoNothingBuildMetricsReporter.kt +++ b/build-common/src/org/jetbrains/kotlin/build/report/metrics/DoNothingBuildMetricsReporter.kt @@ -6,10 +6,13 @@ package org.jetbrains.kotlin.build.report.metrics object DoNothingBuildMetricsReporter : BuildMetricsReporter { - override fun startMeasure(metric: BuildTime, startNs: Long) { + override fun startMeasure(time: BuildTime, startNs: Long) { } - override fun endMeasure(metric: BuildTime, endNs: Long) { + override fun endMeasure(time: BuildTime, endNs: Long) { + } + + override fun addMetric(time: BuildTime, value: Long) { } override fun addAttribute(attribute: BuildAttribute) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/incremental/ClasspathChangesComputer.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/incremental/ClasspathChangesComputer.kt index 3aff490a00c..06aa528bedc 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/incremental/ClasspathChangesComputer.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/incremental/ClasspathChangesComputer.kt @@ -129,8 +129,9 @@ private object NoOpBuildReporter : BuildReporter(NoOpICReporter, NoOpBuildMetric } object NoOpBuildMetricsReporter : BuildMetricsReporter { - override fun startMeasure(metric: BuildTime, startNs: Long) {} - override fun endMeasure(metric: BuildTime, endNs: Long) {} + override fun startMeasure(time: BuildTime, startNs: Long) {} + override fun endMeasure(time: BuildTime, endNs: Long) {} + override fun addMetric(metric: BuildTime, value: Long) {} override fun addAttribute(attribute: BuildAttribute) {} override fun getMetrics(): BuildMetrics = BuildMetrics() override fun addMetrics(metrics: BuildMetrics?) {} diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt index e7ce9ef8f5a..7259cea6afb 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt @@ -345,6 +345,18 @@ abstract class AbstractKotlinCompile : AbstractKotl try { executeImpl(inputChanges) + metrics.measure(BuildTime.CALCULATE_OUTPUT_SIZE) { + metrics.addMetric( + BuildTime.SNAPSHOT_SIZE, + taskBuildDirectory.file("build-history.bin").get().asFile.length() + + taskBuildDirectory.file("last-build.bin").get().asFile.length() + + taskBuildDirectory.file("abi-snapshot.bin").get().asFile.length() + ) + metrics.addMetric(BuildTime.OUTPUT_SIZE, + taskBuildDirectory.dir("caches-jvm").get().asFileTree.files.filter { it.isFile }.map { it.length() } + .sum() + ) + } } catch (t: Throwable) { if (outputsBackup != null) { metrics.measure(BuildTime.RESTORE_OUTPUT_FROM_BACKUP) {