diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/statistics/KotlinGradleFUSLogger.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/statistics/KotlinGradleFUSLogger.kt index 6b45e16fc10..110ce50d466 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/statistics/KotlinGradleFUSLogger.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/statistics/KotlinGradleFUSLogger.kt @@ -137,7 +137,11 @@ class KotlinGradleFUSLogger : StartupActivity, DumbAware, Runnable { GradleStatisticsEvents.JS, BooleanMetrics.JS_GENERATE_EXTERNALS, StringMetrics.JS_GENERATE_EXECUTABLE_DEFAULT, - StringMetrics.JS_TARGET_MODE + StringMetrics.JS_TARGET_MODE, + BooleanMetrics.JS_SOURCE_MAP, + StringMetrics.JS_PROPERTY_LAZY_INITIALIZATION, + BooleanMetrics.JS_KLIB_INCREMENTAL, + BooleanMetrics.JS_IR_INCREMENTAL, ) container.log( diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt index 75dfe8710f3..d4c3da96d39 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt @@ -4,6 +4,7 @@ */ package org.jetbrains.kotlin.compilerRunner + import org.gradle.api.Project import org.gradle.api.invocation.Gradle import org.gradle.api.logging.Logger @@ -137,13 +138,27 @@ internal open class GradleCompilerRunner( // Here we perform the work which is repeated in compiler in order to obtain correct values. This extra work could be avoided when // compiler would report metrics by itself via JMX KotlinBuildStatsService.applyIfInitialised { - if (compilerArgs is K2JVMCompilerArguments) { - KotlinBuildStatsService.getInstance()?.apply { - val args = K2JVMCompilerArguments() - parseCommandLineArguments(argsArray.toList(), args) - report(BooleanMetrics.JVM_COMPILER_IR_MODE, args.useIR) - report(StringMetrics.JVM_DEFAULTS, args.jvmDefault) - report(StringMetrics.USE_OLD_BACKEND, args.useOldBackend.toString()) + when (compilerArgs) { + is K2JVMCompilerArguments -> { + KotlinBuildStatsService.getInstance()?.apply { + val args = K2JVMCompilerArguments() + parseCommandLineArguments(argsArray.toList(), args) + report(BooleanMetrics.JVM_COMPILER_IR_MODE, args.useIR) + report(StringMetrics.JVM_DEFAULTS, args.jvmDefault) + report(StringMetrics.USE_OLD_BACKEND, args.useOldBackend.toString()) + } + } + is K2JSCompilerArguments -> { + KotlinBuildStatsService.getInstance()?.apply { + val args = K2JSCompilerArguments() + parseCommandLineArguments(argsArray.toList(), args) + if (!args.isPreIrBackendDisabled() || args.irProduceJs) { + report(BooleanMetrics.JS_SOURCE_MAP, args.sourceMap) + } + if (args.irProduceJs) { + report(StringMetrics.JS_PROPERTY_LAZY_INITIALIZATION, args.irPropertyLazyInitialization.toString()) + } + } } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrLink.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrLink.kt index 282665c6f3a..47f1e1e57dd 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrLink.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrLink.kt @@ -25,6 +25,7 @@ import org.jetbrains.kotlin.gradle.logging.GradlePrintingMessageCollector import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinCompilationData +import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService import org.jetbrains.kotlin.gradle.report.ReportingSettings import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode.DEVELOPMENT @@ -35,6 +36,7 @@ import org.jetbrains.kotlin.gradle.utils.getAllDependencies import org.jetbrains.kotlin.gradle.utils.getCacheDirectory import org.jetbrains.kotlin.gradle.utils.getDependenciesCacheDirectories import org.jetbrains.kotlin.incremental.ChangedFiles +import org.jetbrains.kotlin.statistics.metrics.BooleanMetrics import java.io.File import javax.inject.Inject @@ -92,6 +94,9 @@ abstract class KotlinJsIrLink @Inject constructor( } override fun callCompilerAsync(args: K2JSCompilerArguments, sourceRoots: SourceRoots, changedFiles: ChangedFiles) { + KotlinBuildStatsService.applyIfInitialised { + it.report(BooleanMetrics.JS_IR_INCREMENTAL, incrementalJsIr) + } if (incrementalJsIr) { val visitedCompilations = mutableSetOf>() val allCacheDirectories = mutableSetOf() diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTargetPreset.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTargetPreset.kt index 1d9a696e823..b5223ab4291 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTargetPreset.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTargetPreset.kt @@ -10,7 +10,9 @@ import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinCompilationFactory import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTargetPreset +import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName +import org.jetbrains.kotlin.statistics.metrics.StringMetrics open class KotlinJsIrTargetPreset( project: Project @@ -45,6 +47,14 @@ open class KotlinJsIrTargetPreset( """.trimIndent() ) } + val buildStatsService = KotlinBuildStatsService.getInstance() + when { + isBrowserConfigured && isNodejsConfigured -> buildStatsService?.report(StringMetrics.JS_TARGET_MODE, "both") + isBrowserConfigured -> buildStatsService?.report(StringMetrics.JS_TARGET_MODE, "browser") + isNodejsConfigured -> buildStatsService?.report(StringMetrics.JS_TARGET_MODE, "nodejs") + !isBrowserConfigured && !isNodejsConfigured -> buildStatsService?.report(StringMetrics.JS_TARGET_MODE, "none") + } + Unit } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt index d7ad33192a2..9f9cca3cdba 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt @@ -50,6 +50,7 @@ import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.mpp.* import org.jetbrains.kotlin.gradle.plugin.mpp.associateWithTransitiveClosure import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinCompilationData +import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService import org.jetbrains.kotlin.gradle.report.ReportingSettings import org.jetbrains.kotlin.gradle.targets.js.ir.isProduceUnzippedKlib import org.jetbrains.kotlin.gradle.utils.* @@ -58,6 +59,7 @@ import org.jetbrains.kotlin.gradle.utils.pathsAsStringRelativeTo import org.jetbrains.kotlin.incremental.ChangedFiles import org.jetbrains.kotlin.incremental.IncrementalCompilerRunner import org.jetbrains.kotlin.library.impl.isKotlinLibrary +import org.jetbrains.kotlin.statistics.metrics.BooleanMetrics import org.jetbrains.kotlin.utils.JsLibraryUtils import org.jetbrains.kotlin.utils.addToStdlib.cast import java.io.File @@ -742,9 +744,21 @@ abstract class Kotlin2JsCompile @Inject constructor( override fun isIncrementalCompilationEnabled(): Boolean = when { - "-Xir-produce-js" in kotlinOptions.freeCompilerArgs -> false - "-Xir-produce-klib-dir" in kotlinOptions.freeCompilerArgs -> false // TODO: it's not supported yet - "-Xir-produce-klib-file" in kotlinOptions.freeCompilerArgs -> incrementalJsKlib + "-Xir-produce-js" in kotlinOptions.freeCompilerArgs -> { + false + } + "-Xir-produce-klib-dir" in kotlinOptions.freeCompilerArgs -> { + KotlinBuildStatsService.applyIfInitialised { + it.report(BooleanMetrics.JS_KLIB_INCREMENTAL, false) + } + false + } // TODO: it's not supported yet + "-Xir-produce-klib-file" in kotlinOptions.freeCompilerArgs -> { + KotlinBuildStatsService.applyIfInitialised { + it.report(BooleanMetrics.JS_KLIB_INCREMENTAL, incrementalJsKlib) + } + incrementalJsKlib + } else -> incremental } diff --git a/libraries/tools/kotlin-gradle-statistics/src/org/jetbrains/kotlin/statistics/metrics/BooleanMetrics.kt b/libraries/tools/kotlin-gradle-statistics/src/org/jetbrains/kotlin/statistics/metrics/BooleanMetrics.kt index f72aa7b19bb..a069c3b9f21 100644 --- a/libraries/tools/kotlin-gradle-statistics/src/org/jetbrains/kotlin/statistics/metrics/BooleanMetrics.kt +++ b/libraries/tools/kotlin-gradle-statistics/src/org/jetbrains/kotlin/statistics/metrics/BooleanMetrics.kt @@ -40,6 +40,11 @@ enum class BooleanMetrics(val type: BooleanOverridePolicy, val anonymization: Bo JS_GENERATE_EXTERNALS(OR, SAFE), + JS_SOURCE_MAP(OR, SAFE), + + JS_KLIB_INCREMENTAL(OR, SAFE), + JS_IR_INCREMENTAL(OR, SAFE), + // User scenarios DEBUGGER_ENABLED(OVERRIDE, SAFE), COMPILATION_STARTED(OVERRIDE, SAFE), diff --git a/libraries/tools/kotlin-gradle-statistics/src/org/jetbrains/kotlin/statistics/metrics/StringMetrics.kt b/libraries/tools/kotlin-gradle-statistics/src/org/jetbrains/kotlin/statistics/metrics/StringMetrics.kt index 3672d934503..4332ea6361c 100644 --- a/libraries/tools/kotlin-gradle-statistics/src/org/jetbrains/kotlin/statistics/metrics/StringMetrics.kt +++ b/libraries/tools/kotlin-gradle-statistics/src/org/jetbrains/kotlin/statistics/metrics/StringMetrics.kt @@ -46,6 +46,7 @@ enum class StringMetrics(val type: StringOverridePolicy, val anonymization: Stri // Compiler parameters JVM_DEFAULTS(CONCAT, SAFE), - USE_OLD_BACKEND(CONCAT, SAFE) + USE_OLD_BACKEND(CONCAT, SAFE), + JS_PROPERTY_LAZY_INITIALIZATION(CONCAT, SAFE), }