diff --git a/compiler/build-tools/kotlin-build-statistics/src/org/jetbrains/kotlin/build/report/metrics/BuildPerformanceMetric.kt b/compiler/build-tools/kotlin-build-statistics/src/org/jetbrains/kotlin/build/report/metrics/BuildPerformanceMetric.kt index 4476ae2354a..f0ff353a20c 100644 --- a/compiler/build-tools/kotlin-build-statistics/src/org/jetbrains/kotlin/build/report/metrics/BuildPerformanceMetric.kt +++ b/compiler/build-tools/kotlin-build-statistics/src/org/jetbrains/kotlin/build/report/metrics/BuildPerformanceMetric.kt @@ -81,6 +81,10 @@ enum class GradleBuildPerformanceMetric( CODE_GENERATED_LINES_NUMBER(parent = COMPILE_ITERATION, "Number of lines for code generation", type = ValueType.NUMBER), ANALYSIS_LPS(parent = COMPILE_ITERATION, "Analysis lines per second", type = ValueType.NUMBER), CODE_GENERATION_LPS(parent = COMPILE_ITERATION, "Code generation lines per second", type = ValueType.NUMBER), + IR_TRANSLATION_LINES_NUMBER(COMPILE_ITERATION, "Compiler IR translation line number", ValueType.NUMBER), + IR_LOWERING_LINES_NUMBER(COMPILE_ITERATION, "Compiler IR lowering line number", ValueType.NUMBER), + IR_GENERATION_LINES_NUMBER(COMPILE_ITERATION, "Compiler IR generation line number", ValueType.NUMBER), + // Metrics for the `kotlin.incremental.useClasspathSnapshot` feature CLASSPATH_ENTRY_SNAPSHOT_TRANSFORM_EXECUTION_COUNT( @@ -162,7 +166,7 @@ enum class GradleBuildPerformanceMetric( } companion object { - const val serialVersionUID = 1L + const val serialVersionUID = 2L val children by lazy { entries.filter { it.parent != null }.groupBy { it.parent } diff --git a/compiler/build-tools/kotlin-build-statistics/src/org/jetbrains/kotlin/build/report/metrics/BuildTime.kt b/compiler/build-tools/kotlin-build-statistics/src/org/jetbrains/kotlin/build/report/metrics/BuildTime.kt index 519396aa90b..7a66ddd859e 100644 --- a/compiler/build-tools/kotlin-build-statistics/src/org/jetbrains/kotlin/build/report/metrics/BuildTime.kt +++ b/compiler/build-tools/kotlin-build-statistics/src/org/jetbrains/kotlin/build/report/metrics/BuildTime.kt @@ -112,6 +112,9 @@ enum class GradleBuildTime(private val parent: GradleBuildTime? = null, private COMPILER_INITIALIZATION(COMPILER_PERFORMANCE, "Compiler initialization time"), CODE_ANALYSIS(COMPILER_PERFORMANCE, "Compiler code analysis"), CODE_GENERATION(COMPILER_PERFORMANCE, "Compiler code generation"), + IR_TRANSLATION(COMPILER_PERFORMANCE, "Compiler IR translation"), + IR_LOWERING(COMPILER_PERFORMANCE, "Compiler IR lowering"), + IR_GENERATION(COMPILER_PERFORMANCE, "Compiler IR generation"), IC_WRITE_HISTORY_FILE(INCREMENTAL_COMPILATION_DAEMON, "Write history file"), SHRINK_AND_SAVE_CURRENT_CLASSPATH_SNAPSHOT_AFTER_COMPILATION(INCREMENTAL_COMPILATION_DAEMON, "Shrink and save current classpath snapshot after compilation"), INCREMENTAL_SHRINK_CURRENT_CLASSPATH_SNAPSHOT(SHRINK_AND_SAVE_CURRENT_CLASSPATH_SNAPSHOT_AFTER_COMPILATION, "Shrink current classpath snapshot incrementally"), @@ -145,7 +148,7 @@ enum class GradleBuildTime(private val parent: GradleBuildTime? = null, private override fun getName(): String = this.name companion object { - const val serialVersionUID = 1L + const val serialVersionUID = 2L val children by lazy { entries.filter { it.parent != null }.groupBy { it.parent } diff --git a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalCompilerRunner.kt b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalCompilerRunner.kt index 3213b3d4d8d..5ed8ddbfd18 100644 --- a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalCompilerRunner.kt +++ b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalCompilerRunner.kt @@ -53,7 +53,7 @@ import java.nio.file.Files abstract class IncrementalCompilerRunner< Args : CommonCompilerArguments, - CacheManager : IncrementalCachesManager<*> + CacheManager : IncrementalCachesManager<*>, >( private val workingDir: File, cacheDirName: String, @@ -93,8 +93,8 @@ abstract class IncrementalCompilerRunner< transaction: CompilationTransaction, fragmentContext: FragmentContext? = null, ) = IncrementalCompilationContext( - pathConverterForSourceFiles = fileLocations?.let { it.getRelocatablePathConverterForSourceFiles() } ?: BasicFileToPathConverter, - pathConverterForOutputFiles = fileLocations?.let { it.getRelocatablePathConverterForOutputFiles() } ?: BasicFileToPathConverter, + pathConverterForSourceFiles = fileLocations?.getRelocatablePathConverterForSourceFiles() ?: BasicFileToPathConverter, + pathConverterForOutputFiles = fileLocations?.getRelocatablePathConverterForOutputFiles() ?: BasicFileToPathConverter, transaction = transaction, reporter = reporter, trackChangesInLookupCache = shouldTrackChangesInLookupCache, @@ -328,7 +328,7 @@ abstract class IncrementalCompilerRunner< private fun getChangedFiles( changedFiles: ChangedFiles.Known?, allSourceFiles: List, - caches: CacheManager + caches: CacheManager, ): ChangedFiles.Known { return when { changedFiles == null -> caches.inputsCache.sourceSnapshotMap.compareAndUpdate(allSourceFiles) @@ -348,10 +348,13 @@ abstract class IncrementalCompilerRunner< changedFiles: ChangedFiles.Known, args: Args, messageCollector: MessageCollector, - classpathAbiSnapshots: Map + classpathAbiSnapshots: Map, ): CompilationMode - protected open fun setupJarDependencies(args: Args, reporter: BuildReporter): Map = emptyMap() + protected open fun setupJarDependencies( + args: Args, + reporter: BuildReporter, + ): Map = emptyMap() protected fun initDirtyFiles(dirtyFiles: DirtyFilesContainer, changedFiles: ChangedFiles.Known) { dirtyFiles.add(changedFiles.modified, "was modified since last time") @@ -372,7 +375,7 @@ abstract class IncrementalCompilerRunner< services: Services, caches: CacheManager, generatedFiles: List, - changesCollector: ChangesCollector + changesCollector: ChangesCollector, ) protected open fun additionalDirtyFiles(caches: CacheManager, generatedFiles: List, services: Services): Iterable = @@ -387,7 +390,7 @@ abstract class IncrementalCompilerRunner< expectActualTracker: ExpectActualTracker, caches: CacheManager, dirtySources: Set, - isIncremental: Boolean + isIncremental: Boolean, ): Services.Builder = Services.Builder().apply { register(LookupTracker::class.java, lookupTracker) @@ -402,7 +405,7 @@ abstract class IncrementalCompilerRunner< services: Services, messageCollector: MessageCollector, allSources: List, - isIncremental: Boolean + isIncremental: Boolean, ): Pair> private fun compileImpl( @@ -496,7 +499,8 @@ abstract class IncrementalCompilerRunner< val outputItemsCollector = OutputItemsCollectorImpl() val transactionOutputsRegistrar = TransactionOutputsRegistrar(transaction, outputItemsCollector) val bufferingMessageCollector = BufferingMessageCollector() - val messageCollectorAdapter = MessageCollectorToOutputItemsCollectorAdapter(bufferingMessageCollector, transactionOutputsRegistrar) + val messageCollectorAdapter = + MessageCollectorToOutputItemsCollectorAdapter(bufferingMessageCollector, transactionOutputsRegistrar) val compiledSources = reporter.measure(GradleBuildTime.COMPILATION_ROUND) { runCompiler( @@ -607,7 +611,7 @@ abstract class IncrementalCompilerRunner< protected fun getRemovedClassesChanges( caches: IncrementalCachesManager<*>, - changedFiles: ChangedFiles.Known + changedFiles: ChangedFiles.Known, ): DirtyData { val removedClasses = HashSet() val dirtyFiles = changedFiles.modified.filterTo(HashSet()) { it.isKotlinFile(kotlinSourceFilesExtensions) } @@ -684,9 +688,23 @@ abstract class IncrementalCompilerRunner< } } } + is IRMeasurement -> { + when (it.kind) { + IRMeasurement.Kind.TRANSLATION -> reportIrMeasurements(it, GradleBuildTime.IR_TRANSLATION, GradleBuildPerformanceMetric.IR_TRANSLATION_LINES_NUMBER) + IRMeasurement.Kind.LOWERING -> reportIrMeasurements(it, GradleBuildTime.IR_LOWERING, GradleBuildPerformanceMetric.IR_LOWERING_LINES_NUMBER) + IRMeasurement.Kind.GENERATION -> reportIrMeasurements(it, GradleBuildTime.IR_GENERATION, GradleBuildPerformanceMetric.IR_GENERATION_LINES_NUMBER) + } + } } } } + + private fun reportIrMeasurements(it: IRMeasurement, timeMetric: GradleBuildTime, lineMetric: GradleBuildPerformanceMetric) { + reporter.addTimeMetricMs(timeMetric, it.milliseconds) + it.lines?.also { + reporter.addMetric(lineMetric, it.toLong()) + } + } } @Deprecated("Temporary function to reuse the logic. KT-62759") diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildReportsIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildReportsIT.kt index 7424e4890a1..cd07a997889 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildReportsIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildReportsIT.kt @@ -195,6 +195,12 @@ class BuildReportsIT : KGPBaseTest() { "Compiler code analysis:", "Compiler code generation:", "Compiler initialization time:", + "Compiler IR translation line number:", + "Compiler IR lowering line number:", + "Compiler IR generation line number:", + "Compiler IR translation:", + "Compiler IR lowering:", + "Compiler IR generation:", ) } }