FIR CLI: count lines/files and report events to perfman

This commit is contained in:
Ilya Chernikov
2022-01-31 18:57:06 +01:00
committed by teamcity
parent 090a451902
commit 973273c6c6
5 changed files with 98 additions and 34 deletions
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.cli.common.computeKotlinPaths
import org.jetbrains.kotlin.cli.common.config.addKotlinSourceRoot
import org.jetbrains.kotlin.cli.common.config.kotlinSourceRoots
import org.jetbrains.kotlin.cli.common.environment.setIdeaIoUseFallback
import org.jetbrains.kotlin.cli.common.fir.FirDiagnosticsCompilerResultsReporter
import org.jetbrains.kotlin.cli.common.fir.reportToMessageCollector
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.GroupingMessageCollector
import org.jetbrains.kotlin.cli.common.messages.IrMessageCollector
@@ -28,7 +28,10 @@ import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.cli.common.modules.ModuleBuilder
import org.jetbrains.kotlin.cli.common.setupCommonArguments
import org.jetbrains.kotlin.cli.jvm.*
import org.jetbrains.kotlin.cli.jvm.compiler.*
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
import org.jetbrains.kotlin.cli.jvm.compiler.VfsBasedProjectEnvironment
import org.jetbrains.kotlin.cli.jvm.compiler.findMainClass
import org.jetbrains.kotlin.cli.jvm.compiler.forAllFiles
import org.jetbrains.kotlin.cli.jvm.compiler.pipeline.*
import org.jetbrains.kotlin.cli.jvm.config.*
import org.jetbrains.kotlin.cli.jvm.plugins.PluginCliParser
@@ -183,11 +186,16 @@ class IncrementalFirJvmCompilerRunner(
}
val diagnosticsReporter = DiagnosticReporterFactory.createReporter()
val performanceManager = configuration[CLIConfigurationKeys.PERF_MANAGER]
val compilerEnvironment = ModuleCompilerEnvironment(projectEnvironment, diagnosticsReporter)
performanceManager?.notifyCompilerInitialized(0, 0, "${targetId.name}-${targetId.type}")
// !! main class - maybe from cache?
var mainClassFqName: FqName? = null
val renderDiagnosticName = configuration.getBoolean(CLIConfigurationKeys.RENDER_DIAGNOSTIC_INTERNAL_NAME)
var incrementalExcludesScope: AbstractProjectFileSearchScope? = null
fun firIncrementalCycle(): ModuleCompilerAnalyzedOutput? {
@@ -200,15 +208,20 @@ class IncrementalFirJvmCompilerRunner(
configuration
)
performanceManager?.notifyAnalysisStarted()
val analysisResults =
compileModuleToAnalyzedFir(
compilerInput,
compilerEnvironment,
emptyList(),
incrementalExcludesScope,
diagnosticsReporter
diagnosticsReporter,
performanceManager
)
performanceManager?.notifyAnalysisFinished()
// TODO: consider what to do if many compilations find a main class
if (mainClassFqName == null && configuration.get(JVMConfigurationKeys.OUTPUT_JAR) != null) {
mainClassFqName = findMainClass(analysisResults.fir)
@@ -217,11 +230,7 @@ class IncrementalFirJvmCompilerRunner(
allCompiledSources.addAll(dirtySources)
if (diagnosticsReporter.hasErrors) {
FirDiagnosticsCompilerResultsReporter.reportToMessageCollector(
diagnosticsReporter,
collector,
configuration.getBoolean(CLIConfigurationKeys.RENDER_DIAGNOSTIC_INTERNAL_NAME)
)
diagnosticsReporter.reportToMessageCollector(messageCollector, renderDiagnosticName)
return null
}
@@ -248,6 +257,9 @@ class IncrementalFirJvmCompilerRunner(
val cycleResult = firIncrementalCycle() ?: return ExitCode.COMPILATION_ERROR to allCompiledSources
performanceManager?.notifyGenerationStarted()
performanceManager?.notifyIRTranslationStarted()
val extensions = JvmGeneratorExtensionsImpl(configuration)
val irGenerationExtensions =
(projectEnvironment as? VfsBasedProjectEnvironment)?.project?.let { IrGenerationExtension.getInstances(it) }.orEmpty()
@@ -267,6 +279,8 @@ class IncrementalFirJvmCompilerRunner(
irGenerationExtensions
)
performanceManager?.notifyIRTranslationFinished()
val irInput = ModuleCompilerIrBackendInput(
targetId,
configuration,
@@ -277,13 +291,12 @@ class IncrementalFirJvmCompilerRunner(
cycleResult.session
)
val codegenOutput = generateCodeFromIr(irInput, compilerEnvironment)
val codegenOutput = generateCodeFromIr(irInput, compilerEnvironment, performanceManager)
FirDiagnosticsCompilerResultsReporter.reportToMessageCollector(
diagnosticsReporter,
collector,
configuration.getBoolean(CLIConfigurationKeys.RENDER_DIAGNOSTIC_INTERNAL_NAME)
)
performanceManager?.notifyIRGenerationFinished()
performanceManager?.notifyGenerationFinished()
diagnosticsReporter.reportToMessageCollector(messageCollector, renderDiagnosticName)
writeOutputs(
projectEnvironment,