Add output size to ES metrics
This commit is contained in:
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+11
-7
@@ -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
|
||||||
|
|||||||
+5
-2
@@ -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) {
|
||||||
|
|||||||
+3
-2
@@ -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?) {}
|
||||||
|
|||||||
+12
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user