Improved collecting compilation metrics in FUS
#KT-55537 Fixed
This commit is contained in:
+31
-1
@@ -10,6 +10,7 @@ import org.gradle.api.logging.Logging
|
||||
import org.gradle.api.provider.Provider
|
||||
import org.gradle.api.services.BuildService
|
||||
import org.gradle.api.services.BuildServiceParameters
|
||||
import org.gradle.tooling.events.FailureResult
|
||||
import org.gradle.tooling.events.FinishEvent
|
||||
import org.gradle.tooling.events.OperationCompletionListener
|
||||
import org.gradle.tooling.events.task.TaskExecutionResult
|
||||
@@ -18,9 +19,13 @@ import org.gradle.tooling.events.task.TaskFinishEvent
|
||||
import org.gradle.tooling.events.task.TaskSkippedResult
|
||||
import org.jetbrains.kotlin.build.report.metrics.BuildMetrics
|
||||
import org.jetbrains.kotlin.build.report.metrics.BuildMetricsReporter
|
||||
import org.jetbrains.kotlin.build.report.metrics.BuildPerformanceMetric
|
||||
import org.jetbrains.kotlin.build.report.metrics.BuildTime
|
||||
import org.jetbrains.kotlin.gradle.plugin.internal.state.TaskExecutionResults
|
||||
import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService
|
||||
import org.jetbrains.kotlin.gradle.report.data.BuildOperationRecord
|
||||
import org.jetbrains.kotlin.statistics.metrics.NumericalMetrics
|
||||
import org.jetbrains.kotlin.statistics.metrics.BooleanMetrics
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
import java.util.concurrent.ConcurrentLinkedQueue
|
||||
|
||||
@@ -72,7 +77,32 @@ abstract class BuildMetricsService : BuildService<BuildServiceParameters.None>,
|
||||
buildMetrics.addAll(it.getMetrics())
|
||||
}
|
||||
val taskExecutionResult = TaskExecutionResults[taskPath]
|
||||
taskExecutionResult?.buildMetrics?.also { buildMetrics.addAll(it) }
|
||||
taskExecutionResult?.buildMetrics?.also {
|
||||
buildMetrics.addAll(it)
|
||||
|
||||
KotlinBuildStatsService.applyIfInitialised { collector ->
|
||||
collector.report(NumericalMetrics.COMPILATION_DURATION, totalTimeMs)
|
||||
collector.report(BooleanMetrics.KOTLIN_COMPILATION_FAILED, event.result is FailureResult)
|
||||
val metricsMap = buildMetrics.buildPerformanceMetrics.asMap()
|
||||
|
||||
val linesOfCode = metricsMap[BuildPerformanceMetric.ANALYZED_LINES_NUMBER]
|
||||
if (linesOfCode != null && linesOfCode > 0 && totalTimeMs > 0) {
|
||||
collector.report(NumericalMetrics.COMPILED_LINES_OF_CODE, linesOfCode)
|
||||
collector.report(NumericalMetrics.COMPILATION_LINES_PER_SECOND, linesOfCode * 1000 / totalTimeMs, null, linesOfCode)
|
||||
metricsMap[BuildPerformanceMetric.ANALYSIS_LPS]?.also {
|
||||
collector.report(NumericalMetrics.ANALYSIS_LINES_PER_SECOND, it, null, linesOfCode)
|
||||
}
|
||||
metricsMap[BuildPerformanceMetric.CODE_GENERATION_LPS]?.also { value ->
|
||||
collector.report(NumericalMetrics.CODE_GENERATION_LINES_PER_SECOND, value, null, linesOfCode)
|
||||
}
|
||||
}
|
||||
collector.report(NumericalMetrics.COMPILATIONS_COUNT, 1)
|
||||
collector.report(
|
||||
NumericalMetrics.INCREMENTAL_COMPILATIONS_COUNT,
|
||||
if (taskExecutionResult.buildMetrics.buildAttributes.asMap().isEmpty()) 1 else 0
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
buildOperationRecords.add(
|
||||
TaskRecord(
|
||||
|
||||
+14
@@ -208,4 +208,18 @@ class BuildSessionLoggerTest {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testWeight() {
|
||||
val logger = BuildSessionLogger(rootFolder)
|
||||
logger.startBuildSession(1, 1)
|
||||
|
||||
logger.report(NumericalMetrics.ANALYSIS_LINES_PER_SECOND, 10, null, 9)
|
||||
logger.report(NumericalMetrics.ANALYSIS_LINES_PER_SECOND, 100, null, 1)
|
||||
|
||||
logger.finishBuildSession("Build", null)
|
||||
MetricsContainer.readFromFile(rootFolder.listFiles()?.single()?.listFiles()?.single() ?: fail("Could not find stat file")) {
|
||||
assertEquals(19L, it.getMetric(NumericalMetrics.ANALYSIS_LINES_PER_SECOND)?.getValue())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -52,5 +52,6 @@ enum class BooleanMetrics(val type: BooleanOverridePolicy, val anonymization: Bo
|
||||
COMPILATION_STARTED(OVERRIDE, SAFE),
|
||||
TESTS_EXECUTED(OVERRIDE, SAFE),
|
||||
MAVEN_PUBLISH_EXECUTED(OVERRIDE, SAFE),
|
||||
BUILD_FAILED(OVERRIDE, SAFE)
|
||||
BUILD_FAILED(OVERRIDE, SAFE),
|
||||
KOTLIN_COMPILATION_FAILED(OR, SAFE)
|
||||
}
|
||||
|
||||
+9
@@ -45,6 +45,15 @@ enum class NumericalMetrics(val type: NumberOverridePolicy, val anonymization: N
|
||||
//duration of the execution gradle phase
|
||||
GRADLE_EXECUTION_DURATION(OVERRIDE, SAFE),
|
||||
|
||||
//performance of compiler
|
||||
COMPILATIONS_COUNT(SUM, RANDOM_10_PERCENT),
|
||||
INCREMENTAL_COMPILATIONS_COUNT(SUM, RANDOM_10_PERCENT),
|
||||
COMPILATION_DURATION(SUM, SAFE),
|
||||
COMPILED_LINES_OF_CODE(SUM, RANDOM_10_PERCENT),
|
||||
COMPILATION_LINES_PER_SECOND(OVERRIDE, SAFE),
|
||||
ANALYSIS_LINES_PER_SECOND(AVERAGE, SAFE),
|
||||
CODE_GENERATION_LINES_PER_SECOND(AVERAGE, SAFE),
|
||||
|
||||
NUMBER_OF_SUBPROJECTS(SUM, RANDOM_10_PERCENT),
|
||||
|
||||
STATISTICS_VISIT_ALL_PROJECTS_OVERHEAD(SUM, RANDOM_10_PERCENT),
|
||||
|
||||
Reference in New Issue
Block a user