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