Report compiler performance data to ES
This commit is contained in:
+1
@@ -21,6 +21,7 @@ data class TaskData(
|
||||
val path: String,
|
||||
val typeFqName: String,
|
||||
val timeMetrics: Map<String, Long>,
|
||||
val performanceMetrics: Map<String, Long>,
|
||||
val buildAttributes: Map<String, Int>,
|
||||
val didWork: Boolean
|
||||
) : Serializable {
|
||||
|
||||
+3
-5
@@ -9,10 +9,7 @@ import com.intellij.openapi.util.io.FileUtil
|
||||
import org.jetbrains.annotations.TestOnly
|
||||
import org.jetbrains.kotlin.build.report.BuildReporter
|
||||
import org.jetbrains.kotlin.build.report.ICReporter
|
||||
import org.jetbrains.kotlin.build.report.metrics.BuildAttribute
|
||||
import org.jetbrains.kotlin.build.report.metrics.BuildMetrics
|
||||
import org.jetbrains.kotlin.build.report.metrics.BuildMetricsReporter
|
||||
import org.jetbrains.kotlin.build.report.metrics.BuildTime
|
||||
import org.jetbrains.kotlin.build.report.metrics.*
|
||||
import org.jetbrains.kotlin.cli.common.ExitCode
|
||||
import org.jetbrains.kotlin.incremental.*
|
||||
import java.io.File
|
||||
@@ -131,7 +128,8 @@ private object NoOpBuildReporter : BuildReporter(NoOpICReporter, NoOpBuildMetric
|
||||
object NoOpBuildMetricsReporter : BuildMetricsReporter {
|
||||
override fun startMeasure(time: BuildTime, startNs: Long) {}
|
||||
override fun endMeasure(time: BuildTime, endNs: Long) {}
|
||||
override fun addMetric(metric: BuildTime, value: Long) {}
|
||||
override fun addTimeMetric(metric: BuildTime, durationMs: Long) {}
|
||||
override fun addMetric(metric: BuildPerformanceMetric, value: Long) {}
|
||||
override fun addAttribute(attribute: BuildAttribute) {}
|
||||
override fun getMetrics(): BuildMetrics = BuildMetrics()
|
||||
override fun addMetrics(metrics: BuildMetrics?) {}
|
||||
|
||||
+4
-2
@@ -60,7 +60,9 @@ class KotlinBuildEsStatListener(val projectName: String, val reportStatistics: L
|
||||
return;
|
||||
}
|
||||
val taskExecutionResult = TaskExecutionResults[taskPath]
|
||||
val statData = taskExecutionResult?.buildMetrics?.buildTimes?.asMap() ?: emptyMap()
|
||||
val timeData = taskExecutionResult?.buildMetrics?.buildTimes?.asMap()?.filterValues { value -> value != 0L } ?: emptyMap()
|
||||
val perfData = taskExecutionResult?.buildMetrics?.buildPerformanceMetrics?.asMap()?.mapValues { it.value / 1000 }
|
||||
?.filterValues { value -> value != 0L } ?: emptyMap()
|
||||
val changes = when (val changedFiles = taskExecutionResult?.taskInfo?.changedFiles) {
|
||||
is ChangedFiles.Known -> changedFiles.modified.map { it.absolutePath } + changedFiles.removed.map { it.absolutePath }
|
||||
is ChangedFiles.Dependencies -> changedFiles.modified.map { it.absolutePath } + changedFiles.removed.map { it.absolutePath }
|
||||
@@ -69,7 +71,7 @@ class KotlinBuildEsStatListener(val projectName: String, val reportStatistics: L
|
||||
}
|
||||
val compileStatData = CompileStatData(
|
||||
duration = duration, taskResult = taskResult.name, label = label,
|
||||
statData = statData, projectName = projectName, taskName = taskPath, changes = changes,
|
||||
timeData = timeData, perfData = perfData, projectName = projectName, taskName = taskPath, changes = changes,
|
||||
tags = taskExecutionResult?.taskInfo?.properties?.map { it.name } ?: emptyList(),
|
||||
nonIncrementalAttributes = taskExecutionResult?.buildMetrics?.buildAttributes?.asMap() ?: emptyMap(),
|
||||
hostName = hostName, kotlinVersion = "1.6", buildUuid = buildUuid, timeInMillis = System.currentTimeMillis()
|
||||
|
||||
+3
-1
@@ -6,6 +6,7 @@
|
||||
package org.jetbrains.kotlin.gradle.plugin.stat
|
||||
|
||||
import org.jetbrains.kotlin.build.report.metrics.BuildAttribute
|
||||
import org.jetbrains.kotlin.build.report.metrics.BuildPerformanceMetric
|
||||
import org.jetbrains.kotlin.build.report.metrics.BuildTime
|
||||
|
||||
data class CompileStatData(
|
||||
@@ -22,7 +23,8 @@ data class CompileStatData(
|
||||
val hostName: String = "Unset",
|
||||
val timeInMillis: Long,
|
||||
val nonIncrementalAttributes: Map<BuildAttribute, Int>,
|
||||
val statData: Map<BuildTime, Long>
|
||||
val timeData: Map<BuildTime, Long>,
|
||||
val perfData: Map<BuildPerformanceMetric, Long>
|
||||
)
|
||||
|
||||
interface ReportStatistics {
|
||||
|
||||
+2
-1
@@ -27,7 +27,8 @@ class ReportStatisticsToBuildScan(private val buildScan: BuildScanExtension, pri
|
||||
data.changes.joinTo(readableString, prefix = "Changes: [", postfix = "]; ") { it.substringAfterLast(File.separator) }
|
||||
|
||||
readableString.append("Performance: [")
|
||||
data.statData.forEach { (key, value) -> readableString.append(key.readableString).append(": ").append(value).append("ms, ") }
|
||||
data.timeData.forEach { (key, value) -> readableString.append(key.readableString).append(": ").append(value).append("ms, ") }
|
||||
data.perfData.forEach { (key, value) -> readableString.append(key.readableString).append(": ").append(value).append("kb, ") }
|
||||
readableString.append("]; ")
|
||||
return readableString.toString()
|
||||
}
|
||||
|
||||
+2
@@ -38,12 +38,14 @@ internal class MetricsWriter(
|
||||
val path = data.task.path
|
||||
val type = data.task::class.java.canonicalName
|
||||
val buildTimes = data.buildMetrics.buildTimes.asMap().mapKeys { (k, _) -> k.name }
|
||||
val buildPerfMetrics = data.buildMetrics.buildPerformanceMetrics.asMap().mapKeys { (k, _) -> k.name }
|
||||
val buildAttributes = data.buildMetrics.buildAttributes.asMap().mapKeys { (k, _) -> k.name }
|
||||
buildMetricsData.taskData[path] =
|
||||
TaskData(
|
||||
path = path,
|
||||
typeFqName = type,
|
||||
timeMetrics = buildTimes,
|
||||
performanceMetrics = buildPerfMetrics,
|
||||
buildAttributes = buildAttributes,
|
||||
didWork = data.task.didWork
|
||||
)
|
||||
|
||||
+14
-4
@@ -6,10 +6,7 @@
|
||||
package org.jetbrains.kotlin.gradle.report
|
||||
|
||||
import org.gradle.api.logging.Logger
|
||||
import org.jetbrains.kotlin.build.report.metrics.BuildAttributes
|
||||
import org.jetbrains.kotlin.build.report.metrics.BuildMetrics
|
||||
import org.jetbrains.kotlin.build.report.metrics.BuildTime
|
||||
import org.jetbrains.kotlin.build.report.metrics.BuildTimes
|
||||
import org.jetbrains.kotlin.build.report.metrics.*
|
||||
import org.jetbrains.kotlin.gradle.report.data.BuildExecutionData
|
||||
import org.jetbrains.kotlin.gradle.report.data.BuildExecutionDataProcessor
|
||||
import org.jetbrains.kotlin.gradle.report.data.TaskExecutionData
|
||||
@@ -62,6 +59,7 @@ internal class PlainTextBuildReportWriter(
|
||||
if (!printMetrics) return
|
||||
|
||||
printBuildTimes(buildMetrics.buildTimes)
|
||||
printBuildPerformanceMetrics(buildMetrics.buildPerformanceMetrics)
|
||||
printBuildAttributes(buildMetrics.buildAttributes)
|
||||
}
|
||||
|
||||
@@ -92,6 +90,18 @@ internal class PlainTextBuildReportWriter(
|
||||
p.println()
|
||||
}
|
||||
|
||||
private fun printBuildPerformanceMetrics(buildMetrics: BuildPerformanceMetrics) {
|
||||
val allBuildMetrics = buildMetrics.asMap()
|
||||
if (allBuildMetrics.isEmpty()) return
|
||||
|
||||
p.withIndent("Build performance metrics:") {
|
||||
for (metric in BuildPerformanceMetric.values()) {
|
||||
p.println("${metric.name}: ${allBuildMetrics[metric]}")
|
||||
}
|
||||
}
|
||||
p.println()
|
||||
}
|
||||
|
||||
private fun printBuildAttributes(buildAttributes: BuildAttributes) {
|
||||
val allAttributes = buildAttributes.asMap()
|
||||
if (allAttributes.isEmpty()) return
|
||||
|
||||
+2
-2
@@ -347,12 +347,12 @@ abstract class AbstractKotlinCompile<T : CommonCompilerArguments> : AbstractKotl
|
||||
executeImpl(inputChanges)
|
||||
metrics.measure(BuildTime.CALCULATE_OUTPUT_SIZE) {
|
||||
metrics.addMetric(
|
||||
BuildTime.SNAPSHOT_SIZE,
|
||||
BuildPerformanceMetric.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,
|
||||
metrics.addMetric(BuildPerformanceMetric.OUTPUT_SIZE,
|
||||
taskBuildDirectory.dir("caches-jvm").get().asFileTree.files.filter { it.isFile }.map { it.length() }
|
||||
.sum()
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user