diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/common/CommonCompilerPerformanceManager.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/common/CommonCompilerPerformanceManager.kt index 3085783a6f9..267bb100434 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/common/CommonCompilerPerformanceManager.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/common/CommonCompilerPerformanceManager.kt @@ -22,6 +22,7 @@ abstract class CommonCompilerPerformanceManager(private val presentableName: Str private var startGCData = mutableMapOf() private var irTranslationStart: Long = 0 + private var irLoweringStart: Long = 0 private var irGenerationStart: Long = 0 private var targetDescription: String? = null @@ -88,6 +89,19 @@ abstract class CommonCompilerPerformanceManager(private val presentableName: Str ) } + open fun notifyIRLoweringStarted() { + irLoweringStart = PerformanceCounter.currentTime() + } + + open fun notifyIRLoweringFinished() { + val time = deltaTime(irLoweringStart) + measurements += IRMeasurement( + lines, + TimeUnit.NANOSECONDS.toMillis(time), + IRMeasurement.Kind.LOWERING + ) + } + open fun notifyIRGenerationStarted() { irGenerationStart = PerformanceCounter.currentTime() } diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/common/performanceMeasurements.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/common/performanceMeasurements.kt index cc4c492794b..5771c469aa7 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/common/performanceMeasurements.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/common/performanceMeasurements.kt @@ -37,7 +37,7 @@ class IRMeasurement(val lines: Int?, val milliseconds: Long, val kind: Kind) : P override fun render(): String = formatMeasurement("IR $kind", milliseconds, lines) enum class Kind { - TRANSLATION, GENERATION + TRANSLATION, LOWERING, GENERATION } } diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt index 867ab0a1bb9..7beaf6b4ffb 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt @@ -387,10 +387,14 @@ object KotlinToJVMBytecodeCompiler { ProgressIndicatorAndCompilationCanceledStatus.checkCanceled() - performanceManager?.notifyIRGenerationStarted() + performanceManager?.notifyIRLoweringStarted() generationState.beforeCompile() codegenFactory.generateModuleInFrontendIRMode( - generationState, moduleFragment, symbolTable, sourceManager, extensions, FirJvmBackendExtension(session, components) + generationState, moduleFragment, symbolTable, sourceManager, extensions, FirJvmBackendExtension(session, components), + { + performanceManager?.notifyIRLoweringFinished() + performanceManager?.notifyIRGenerationStarted() + } ) CodegenFactory.doCheckCancelled(generationState) generationState.factory.done() diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt index 51a4cb98c19..04e314f7f3b 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt @@ -49,6 +49,7 @@ class JvmIrCodegenFactory(private val phaseConfig: PhaseConfig) : CodegenFactory val irProviders: List, val extensions: JvmGeneratorExtensions, val backendExtension: JvmBackendExtension, + val notifyCodegenStart: () -> Unit, ) override fun generateModule(state: GenerationState, files: Collection) { @@ -158,6 +159,7 @@ class JvmIrCodegenFactory(private val phaseConfig: PhaseConfig) : CodegenFactory irProviders, extensions, JvmBackendExtension.Default, + {}, ) } @@ -173,7 +175,7 @@ class JvmIrCodegenFactory(private val phaseConfig: PhaseConfig) : CodegenFactory } fun doGenerateFilesInternal(input: JvmIrBackendInput) { - val (state, irModuleFragment, symbolTable, sourceManager, phaseConfig, irProviders, extensions, backendExtension) = input + val (state, irModuleFragment, symbolTable, sourceManager, phaseConfig, irProviders, extensions, backendExtension, notifyCodegenStart) = input val context = JvmBackendContext( state, sourceManager, irModuleFragment.irBuiltins, irModuleFragment, symbolTable, phaseConfig, extensions, backendExtension @@ -189,6 +191,8 @@ class JvmIrCodegenFactory(private val phaseConfig: PhaseConfig) : CodegenFactory JvmLower(context).lower(irModuleFragment) + notifyCodegenStart() + for (generateMultifileFacade in listOf(true, false)) { for (irFile in irModuleFragment.files) { // Generate multifile facades first, to compute and store JVM signatures of const properties which are later used @@ -221,10 +225,11 @@ class JvmIrCodegenFactory(private val phaseConfig: PhaseConfig) : CodegenFactory sourceManager: PsiSourceManager, extensions: JvmGeneratorExtensions, backendExtension: JvmBackendExtension, + notifyCodegenStart: () -> Unit ) { val irProviders = configureBuiltInsAndgenerateIrProvidersInFrontendIRMode(irModuleFragment, symbolTable, extensions) doGenerateFilesInternal( - JvmIrBackendInput(state, irModuleFragment, symbolTable, sourceManager, phaseConfig, irProviders, extensions, backendExtension) + JvmIrBackendInput(state, irModuleFragment, symbolTable, sourceManager, phaseConfig, irProviders, extensions, backendExtension, notifyCodegenStart) ) } diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/Fir2IrResultsConverter.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/Fir2IrResultsConverter.kt index 2c82f999c12..d6c5b69a5ae 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/Fir2IrResultsConverter.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/Fir2IrResultsConverter.kt @@ -91,7 +91,8 @@ class Fir2IrResultsConverter( phaseConfig, irProviders, extensions, - FirJvmBackendExtension(inputArtifact.session, components) + FirJvmBackendExtension(inputArtifact.session, components), + {}, ) ) } diff --git a/compiler/tests-compiler-utils/tests/org/jetbrains/kotlin/codegen/GenerationUtils.kt b/compiler/tests-compiler-utils/tests/org/jetbrains/kotlin/codegen/GenerationUtils.kt index 23e10301bca..26c8fc7a309 100644 --- a/compiler/tests-compiler-utils/tests/org/jetbrains/kotlin/codegen/GenerationUtils.kt +++ b/compiler/tests-compiler-utils/tests/org/jetbrains/kotlin/codegen/GenerationUtils.kt @@ -131,7 +131,7 @@ object GenerationUtils { generationState.beforeCompile() codegenFactory.generateModuleInFrontendIRMode( - generationState, moduleFragment, symbolTable, sourceManager, extensions, FirJvmBackendExtension(session, components), + generationState, moduleFragment, symbolTable, sourceManager, extensions, FirJvmBackendExtension(session, components), {}, ) generationState.factory.done()