Add compiler IRMeasurement to build reports
#KT-65091: Fixed
This commit is contained in:
committed by
Space Team
parent
b4b1c7cd69
commit
090407b7e3
+5
-1
@@ -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 }
|
||||
|
||||
+4
-1
@@ -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 }
|
||||
|
||||
+29
-11
@@ -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<File>,
|
||||
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<String, AbiSnapshot>
|
||||
classpathAbiSnapshots: Map<String, AbiSnapshot>,
|
||||
): CompilationMode
|
||||
|
||||
protected open fun setupJarDependencies(args: Args, reporter: BuildReporter<GradleBuildTime, GradleBuildPerformanceMetric>): Map<String, AbiSnapshot> = emptyMap()
|
||||
protected open fun setupJarDependencies(
|
||||
args: Args,
|
||||
reporter: BuildReporter<GradleBuildTime, GradleBuildPerformanceMetric>,
|
||||
): Map<String, AbiSnapshot> = 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<GeneratedFile>,
|
||||
changesCollector: ChangesCollector
|
||||
changesCollector: ChangesCollector,
|
||||
)
|
||||
|
||||
protected open fun additionalDirtyFiles(caches: CacheManager, generatedFiles: List<GeneratedFile>, services: Services): Iterable<File> =
|
||||
@@ -387,7 +390,7 @@ abstract class IncrementalCompilerRunner<
|
||||
expectActualTracker: ExpectActualTracker,
|
||||
caches: CacheManager,
|
||||
dirtySources: Set<File>,
|
||||
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<File>,
|
||||
isIncremental: Boolean
|
||||
isIncremental: Boolean,
|
||||
): Pair<ExitCode, Collection<File>>
|
||||
|
||||
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<String>()
|
||||
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")
|
||||
|
||||
+6
@@ -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:",
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user