Add output size to ES metrics

This commit is contained in:
nataliya.valtman
2021-07-26 06:20:04 +03:00
parent 9becb2c468
commit 7357aeb1c9
6 changed files with 43 additions and 17 deletions
@@ -6,8 +6,9 @@
package org.jetbrains.kotlin.build.report.metrics package org.jetbrains.kotlin.build.report.metrics
interface BuildMetricsReporter { interface BuildMetricsReporter {
fun startMeasure(metric: BuildTime, startNs: Long) fun startMeasure(time: BuildTime, startNs: Long)
fun endMeasure(metric: BuildTime, endNs: Long) fun endMeasure(time: BuildTime, endNs: Long)
fun addMetric(metric: BuildTime, value: Long)
fun addAttribute(attribute: BuildAttribute) fun addAttribute(attribute: BuildAttribute)
@@ -15,14 +16,14 @@ interface BuildMetricsReporter {
fun addMetrics(metrics: BuildMetrics?) fun addMetrics(metrics: BuildMetrics?)
} }
inline fun <T> BuildMetricsReporter.measure(metric: BuildTime, fn: () -> T): T { inline fun <T> BuildMetricsReporter.measure(time: BuildTime, fn: () -> T): T {
val start = System.nanoTime() val start = System.nanoTime()
startMeasure(metric, start) startMeasure(time, start)
try { try {
return fn() return fn()
} finally { } finally {
val end = System.nanoTime() val end = System.nanoTime()
endMeasure(metric, end) endMeasure(time, end)
} }
} }
@@ -15,17 +15,21 @@ class BuildMetricsReporterImpl : BuildMetricsReporter {
private val myBuildTimes = BuildTimes() private val myBuildTimes = BuildTimes()
private val myBuildAttributes = BuildAttributes() private val myBuildAttributes = BuildAttributes()
override fun startMeasure(metric: BuildTime, startNs: Long) { override fun startMeasure(time: BuildTime, startNs: Long) {
if (metric in myBuildTimeStartNs) { if (time in myBuildTimeStartNs) {
error("$metric was restarted before it finished") error("$time was restarted before it finished")
} }
myBuildTimeStartNs[metric] = startNs myBuildTimeStartNs[time] = startNs
} }
override fun endMeasure(metric: BuildTime, endNs: Long) { override fun endMeasure(time: BuildTime, endNs: Long) {
val startNs = myBuildTimeStartNs.remove(metric) ?: error("$metric finished before it started") val startNs = myBuildTimeStartNs.remove(time) ?: error("$time finished before it started")
val durationMs = (endNs - startNs) / 1_000_000 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) { override fun addAttribute(attribute: BuildAttribute) {
@@ -16,6 +16,7 @@ enum class BuildTime(val parent: BuildTime? = null, val readableString: String)
RESTORE_OUTPUT_FROM_BACKUP(GRADLE_TASK, "Restore output"), RESTORE_OUTPUT_FROM_BACKUP(GRADLE_TASK, "Restore output"),
CONNECT_TO_DAEMON(GRADLE_TASK, "Connect to Kotlin daemon"), CONNECT_TO_DAEMON(GRADLE_TASK, "Connect to Kotlin daemon"),
CLEAR_JAR_CACHE(GRADLE_TASK, "Clear jar cache"), CLEAR_JAR_CACHE(GRADLE_TASK, "Clear jar cache"),
CALCULATE_OUTPUT_SIZE(GRADLE_TASK, "Calculate output size"),
RUN_COMPILER(GRADLE_TASK, "Run compiler"), RUN_COMPILER(GRADLE_TASK, "Run compiler"),
NON_INCREMENTAL_COMPILATION_IN_PROCESS(RUN_COMPILER, "Inprocess compilation"), NON_INCREMENTAL_COMPILATION_IN_PROCESS(RUN_COMPILER, "Inprocess compilation"),
NON_INCREMENTAL_COMPILATION_OUT_OF_PROCESS(RUN_COMPILER, "Out of process 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"), IC_UPDATE_CACHES(INCREMENTAL_COMPILATION, "Update caches"),
INCREMENTAL_ITERATION(INCREMENTAL_COMPILATION, "Incremental iteration"), INCREMENTAL_ITERATION(INCREMENTAL_COMPILATION, "Incremental iteration"),
NON_INCREMENTAL_ITERATION(INCREMENTAL_COMPILATION, "Non-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 { companion object {
const val serialVersionUID = 0L const val serialVersionUID = 0L
@@ -6,10 +6,13 @@
package org.jetbrains.kotlin.build.report.metrics package org.jetbrains.kotlin.build.report.metrics
object DoNothingBuildMetricsReporter : BuildMetricsReporter { 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) { override fun addAttribute(attribute: BuildAttribute) {
@@ -129,8 +129,9 @@ private object NoOpBuildReporter : BuildReporter(NoOpICReporter, NoOpBuildMetric
} }
object NoOpBuildMetricsReporter : BuildMetricsReporter { object NoOpBuildMetricsReporter : 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(metric: BuildTime, value: Long) {}
override fun addAttribute(attribute: BuildAttribute) {} override fun addAttribute(attribute: BuildAttribute) {}
override fun getMetrics(): BuildMetrics = BuildMetrics() override fun getMetrics(): BuildMetrics = BuildMetrics()
override fun addMetrics(metrics: BuildMetrics?) {} override fun addMetrics(metrics: BuildMetrics?) {}
@@ -345,6 +345,18 @@ abstract class AbstractKotlinCompile<T : CommonCompilerArguments> : AbstractKotl
try { try {
executeImpl(inputChanges) 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) { } catch (t: Throwable) {
if (outputsBackup != null) { if (outputsBackup != null) {
metrics.measure(BuildTime.RESTORE_OUTPUT_FROM_BACKUP) { metrics.measure(BuildTime.RESTORE_OUTPUT_FROM_BACKUP) {