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
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 <T> BuildMetricsReporter.measure(metric: BuildTime, fn: () -> T): T {
inline fun <T> 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)
}
}
@@ -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) {
@@ -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
@@ -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) {
@@ -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?) {}
@@ -345,6 +345,18 @@ abstract class AbstractKotlinCompile<T : CommonCompilerArguments> : 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) {