Add compiler metrics to JPS build report

#KT-63549: Fixed
This commit is contained in:
Nataliya.Valtman
2023-11-16 12:06:24 +01:00
committed by Space Team
parent 6cff71e7d1
commit 6bbf5b83c8
25 changed files with 616 additions and 183 deletions
@@ -0,0 +1,19 @@
/*
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.gradle.plugin.statistics
import org.jetbrains.kotlin.build.report.metrics.GradleBuildPerformanceMetric
import org.jetbrains.kotlin.build.report.metrics.GradleBuildTime
import org.jetbrains.kotlin.build.report.statistics.file.FileReportService
import org.jetbrains.kotlin.buildtools.api.KotlinLogger
import java.io.File
class GradleFileReportService(
buildReportDir: File,
projectName: String,
printMetrics: Boolean,
logger: KotlinLogger,
) : FileReportService<GradleBuildTime, GradleBuildPerformanceMetric>(buildReportDir, projectName, printMetrics, logger) {}
@@ -10,12 +10,12 @@ import org.gradle.api.logging.Logging
import org.gradle.tooling.events.task.TaskFinishEvent
import org.jetbrains.kotlin.build.report.metrics.ValueType
import org.jetbrains.kotlin.build.report.statistics.HttpReportService
import org.jetbrains.kotlin.build.report.statistics.file.FileReportService
import org.jetbrains.kotlin.build.report.statistics.formatSize
import org.jetbrains.kotlin.build.report.statistics.BuildFinishStatisticsData
import org.jetbrains.kotlin.build.report.statistics.BuildStartParameters
import org.jetbrains.kotlin.build.report.statistics.StatTag
import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
import org.jetbrains.kotlin.gradle.plugin.statistics.GradleFileReportService
import org.jetbrains.kotlin.gradle.report.data.BuildExecutionData
import org.jetbrains.kotlin.gradle.report.data.BuildOperationRecord
import org.jetbrains.kotlin.gradle.report.data.GradleCompileStatisticsData
@@ -51,7 +51,7 @@ class BuildReportsService {
fun close(
buildOperationRecords: Collection<BuildOperationRecord>,
failureMessages: List<String>,
parameters: BuildReportParameters
parameters: BuildReportParameters,
) {
val buildData = BuildExecutionData(
startParameters = parameters.startParameters,
@@ -65,14 +65,15 @@ class BuildReportsService {
executorService.submit { reportBuildFinish(parameters) }
}
reportingSettings.fileReportSettings?.also {
FileReportService.reportBuildStatInFile(
GradleFileReportService(
it.buildReportDir,
parameters.projectName,
it.includeMetricsInReport,
loggerAdapter
).process(
transformOperationRecordsToCompileStatisticsData(buildOperationRecords, parameters, onlyKotlinTask = false),
parameters.startParameters,
failureMessages.filter { it.isNotEmpty() },
loggerAdapter
)
}
@@ -92,7 +93,7 @@ class BuildReportsService {
buildOperationRecords: Collection<BuildOperationRecord>,
parameters: BuildReportParameters,
onlyKotlinTask: Boolean,
metricsToShow: Set<String>? = null
metricsToShow: Set<String>? = null,
) = buildOperationRecords.mapNotNull {
prepareData(
taskResult = null,
@@ -112,7 +113,7 @@ class BuildReportsService {
fun onFinish(
event: TaskFinishEvent, buildOperation: BuildOperationRecord,
parameters: BuildReportParameters
parameters: BuildReportParameters,
) {
addHttpReport(event, buildOperation, parameters)
}
@@ -162,7 +163,7 @@ class BuildReportsService {
private fun addHttpReport(
event: TaskFinishEvent,
buildOperationRecord: BuildOperationRecord,
parameters: BuildReportParameters
parameters: BuildReportParameters,
) {
parameters.httpService?.also { httpService ->
val data =
@@ -189,7 +190,7 @@ class BuildReportsService {
event: TaskFinishEvent,
buildOperationRecord: BuildOperationRecord,
parameters: BuildReportParameters,
buildScanExtension: BuildScanExtensionHolder
buildScanExtension: BuildScanExtensionHolder,
) {
val buildScanSettings = parameters.reportingSettings.buildScanReportSettings ?: return
@@ -212,7 +213,7 @@ class BuildReportsService {
internal fun addBuildScanReport(
buildOperationRecords: Collection<BuildOperationRecord>,
parameters: BuildReportParameters,
buildScanExtension: BuildScanExtensionHolder
buildScanExtension: BuildScanExtensionHolder,
) {
val buildScanSettings = parameters.reportingSettings.buildScanReportSettings ?: return
@@ -256,14 +257,14 @@ class BuildReportsService {
private fun addBuildScanValue(
buildScan: BuildScanExtensionHolder,
data: GradleCompileStatisticsData,
customValue: String
customValue: String,
) {
buildScan.buildScan.value(data.getTaskName(), customValue)
customValues++
}
private fun reportTryNextToConsole(
data: BuildExecutionData
data: BuildExecutionData,
) {
val tasksData = data.buildOperationRecord
.filterIsInstance<TaskRecord>()
@@ -309,7 +310,8 @@ class BuildReportsService {
}
val timeData =
data.getBuildTimesMetrics().map { (key, value) -> "${key.getReadableString()}: ${value}ms" } //sometimes it is better to have separate variable to be able debug
data.getBuildTimesMetrics()
.map { (key, value) -> "${key.getReadableString()}: ${value}ms" } //sometimes it is better to have separate variable to be able debug
val perfData = data.getPerformanceMetrics().map { (key, value) ->
when (key.getType()) {
ValueType.BYTES -> "${key.getReadableString()}: ${formatSize(value)}"
@@ -419,5 +421,5 @@ data class BuildReportParameters(
val label: String?,
val projectName: String,
val kotlinVersion: String,
val additionalTags: Set<StatTag>
val additionalTags: Set<StatTag>,
)