Fixup reporting statistics from JVM and JS compilations
diff --git a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JSCompiler.java b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JSCompiler.java
index f4663be..9241b27 100644
--- a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JSCompiler.java
+++ b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JSCompiler.java
@@ -568,7 +568,7 @@
 
     @NotNull
     @Override
-    protected CommonCompilerPerformanceManager getDefaultPerformanceManager() {
+    public CommonCompilerPerformanceManager getDefaultPerformanceManager() {
         return performanceManager;
     }
 
diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLICompiler.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLICompiler.kt
index a00b0ad..cadd458 100644
--- a/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLICompiler.kt
+++ b/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLICompiler.kt
@@ -43,7 +43,7 @@
 
 abstract class CLICompiler<A : CommonCompilerArguments> : CLITool<A>() {
 
-    protected abstract val defaultPerformanceManager: CommonCompilerPerformanceManager
+    abstract val defaultPerformanceManager: CommonCompilerPerformanceManager
 
     protected open fun createPerformanceManager(arguments: A, services: Services): CommonCompilerPerformanceManager =
         services[CommonCompilerPerformanceManager::class.java] ?: defaultPerformanceManager
diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt
index 86315b9..8aa2a12 100644
--- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt
+++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt
@@ -273,8 +273,7 @@
 
     }
 
-    override val defaultPerformanceManager: CommonCompilerPerformanceManager
-        get() = error("Unsupported")
+    override val defaultPerformanceManager: CommonCompilerPerformanceManager = K2JVMCompilerPerformanceManager()
 
     override fun createPerformanceManager(arguments: K2JVMCompilerArguments, services: Services): CommonCompilerPerformanceManager {
         return if (arguments.profileCompilerCommand != null)
diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/metadata/K2MetadataCompiler.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/metadata/K2MetadataCompiler.kt
index e2c5160..0768166 100644
--- a/compiler/cli/src/org/jetbrains/kotlin/cli/metadata/K2MetadataCompiler.kt
+++ b/compiler/cli/src/org/jetbrains/kotlin/cli/metadata/K2MetadataCompiler.kt
@@ -39,7 +39,7 @@
 
 class K2MetadataCompiler : CLICompiler<K2MetadataCompilerArguments>() {
 
-    override val defaultPerformanceManager = K2MetadataCompilerPerformanceManager()
+    override val defaultPerformanceManager: CommonCompilerPerformanceManager = K2MetadataCompilerPerformanceManager()
 
     override fun createArguments() = K2MetadataCompilerArguments()
 
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 d002410..abad89a 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
@@ -244,9 +244,20 @@
         args: Args,
         caches: CacheManager,
         services: Services,
-        messageCollector: MessageCollector
+        messageCollector: MessageCollector,
+        reporter: BuildReporter
     ): ExitCode
 
+    fun BuildReporter.reportCompilerPerformance(performanceManager: CommonCompilerPerformanceManager) {
+        val relevantMeasurements = performanceManager.getMeasurementResults().filter {
+            it is CompilerInitializationMeasurement || it is CodeAnalysisMeasurement || it is CodeGenerationMeasurement || it is PerformanceCounterMeasurement
+        }
+
+        report {
+            "Compiler perf stats:\n" + relevantMeasurements.joinToString(separator = "\n") { "  ${it.render()}" }
+        }
+    }
+
     private fun compileIncrementally(
         args: Args,
         caches: CacheManager,
@@ -301,7 +312,7 @@
             val messageCollectorAdapter = MessageCollectorToOutputItemsCollectorAdapter(bufferingMessageCollector, outputItemsCollector)
 
             exitCode = reporter.measure(buildTimeMode) {
-                runCompiler(sourcesToCompile.toSet(), args, caches, services, messageCollectorAdapter)
+                runCompiler(sourcesToCompile.toSet(), args, caches, services, messageCollectorAdapter, reporter)
             }
 
             val generatedFiles = outputItemsCollector.outputs.map(SimpleOutputItem::toGeneratedFile)
@@ -319,16 +330,6 @@
             reporter.reportCompileIteration(compilationMode is CompilationMode.Incremental, sourcesToCompile, exitCode)
             bufferingMessageCollector.flush(originalMessageCollector)
 
-            services[CommonCompilerPerformanceManager::class.java]?.apply {
-                val relevantMeasurements = this.getMeasurementResults().filter {
-                    it is CompilerInitializationMeasurement || it is CodeAnalysisMeasurement || it is CodeGenerationMeasurement
-                }
-
-                reporter.report {
-                    "Compiler perf stats:\n" + relevantMeasurements.joinToString(separator = "\n") { "  ${it.render()}" }
-                }
-            }
-
             if (exitCode != ExitCode.OK) break
 
             dirtySourcesSinceLastTimeFile.delete()
diff --git a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalJsCompilerRunner.kt b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalJsCompilerRunner.kt
index 4838ee9..aebf75d 100644
--- a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalJsCompilerRunner.kt
+++ b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalJsCompilerRunner.kt
@@ -171,15 +171,18 @@
         args: K2JSCompilerArguments,
         caches: IncrementalJsCachesManager,
         services: Services,
-        messageCollector: MessageCollector
+        messageCollector: MessageCollector,
+        reporter: BuildReporter
     ): ExitCode {
         val freeArgsBackup = args.freeArgs
 
+        val compiler = K2JSCompiler()
         return try {
             args.freeArgs += sourcesToCompile.map { it.absolutePath }
-            K2JSCompiler().exec(messageCollector, services, args)
+            compiler.exec(messageCollector, services, args)
         } finally {
             args.freeArgs = freeArgsBackup
+            reporter.reportCompilerPerformance(compiler.defaultPerformanceManager)
         }
     }
 
diff --git a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunner.kt b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunner.kt
index fa06ba5..c621810 100644
--- a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunner.kt
+++ b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunner.kt
@@ -377,15 +377,19 @@
         args: K2JVMCompilerArguments,
         caches: IncrementalJvmCachesManager,
         services: Services,
-        messageCollector: MessageCollector
+        messageCollector: MessageCollector,
+        reporter: BuildReporter
     ): ExitCode {
         val compiler = K2JVMCompiler()
         val freeArgsBackup = args.freeArgs.toList()
-        args.freeArgs += sourcesToCompile.map { it.absolutePath }
-        args.allowNoSourceFiles = true
-        val exitCode = compiler.exec(messageCollector, services, args)
-        args.freeArgs = freeArgsBackup
-        return exitCode
+        try {
+            args.freeArgs += sourcesToCompile.map { it.absolutePath }
+            args.allowNoSourceFiles = true
+            return compiler.exec(messageCollector, services, args)
+        } finally {
+            args.freeArgs = freeArgsBackup
+            reporter.reportCompilerPerformance(compiler.defaultPerformanceManager)
+        }
     }
 }