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.provider.Provider
|
||||||
import org.gradle.api.services.BuildService
|
import org.gradle.api.services.BuildService
|
||||||
import org.gradle.api.services.BuildServiceParameters
|
import org.gradle.api.services.BuildServiceParameters
|
||||||
|
import org.gradle.tooling.events.FailureResult
|
||||||
import org.gradle.tooling.events.FinishEvent
|
import org.gradle.tooling.events.FinishEvent
|
||||||
import org.gradle.tooling.events.OperationCompletionListener
|
import org.gradle.tooling.events.OperationCompletionListener
|
||||||
import org.gradle.tooling.events.task.TaskExecutionResult
|
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.gradle.tooling.events.task.TaskSkippedResult
|
||||||
import org.jetbrains.kotlin.build.report.metrics.BuildMetrics
|
import org.jetbrains.kotlin.build.report.metrics.BuildMetrics
|
||||||
import org.jetbrains.kotlin.build.report.metrics.BuildMetricsReporter
|
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.build.report.metrics.BuildTime
|
||||||
import org.jetbrains.kotlin.gradle.plugin.internal.state.TaskExecutionResults
|
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.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.ConcurrentHashMap
|
||||||
import java.util.concurrent.ConcurrentLinkedQueue
|
import java.util.concurrent.ConcurrentLinkedQueue
|
||||||
|
|
||||||
@@ -72,7 +77,32 @@ abstract class BuildMetricsService : BuildService<BuildServiceParameters.None>,
|
|||||||
buildMetrics.addAll(it.getMetrics())
|
buildMetrics.addAll(it.getMetrics())
|
||||||
}
|
}
|
||||||
val taskExecutionResult = TaskExecutionResults[taskPath]
|
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(
|
buildOperationRecords.add(
|
||||||
TaskRecord(
|
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),
|
COMPILATION_STARTED(OVERRIDE, SAFE),
|
||||||
TESTS_EXECUTED(OVERRIDE, SAFE),
|
TESTS_EXECUTED(OVERRIDE, SAFE),
|
||||||
MAVEN_PUBLISH_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
|
//duration of the execution gradle phase
|
||||||
GRADLE_EXECUTION_DURATION(OVERRIDE, SAFE),
|
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),
|
NUMBER_OF_SUBPROJECTS(SUM, RANDOM_10_PERCENT),
|
||||||
|
|
||||||
STATISTICS_VISIT_ALL_PROJECTS_OVERHEAD(SUM, RANDOM_10_PERCENT),
|
STATISTICS_VISIT_ALL_PROJECTS_OVERHEAD(SUM, RANDOM_10_PERCENT),
|
||||||
|
|||||||
Reference in New Issue
Block a user