[Gradle, JS] Add statistics for Kotlin/JS
- source map usages (legacy, ir) - incremental klib - incremental JS IR - property lazy initialization ^KT-47435 fixed
This commit is contained in:
@@ -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(
|
||||
|
||||
+22
-7
@@ -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())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+5
@@ -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<KotlinCompilation<*>>()
|
||||
val allCacheDirectories = mutableSetOf<File>()
|
||||
|
||||
+10
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+17
-3
@@ -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
|
||||
}
|
||||
|
||||
|
||||
+5
@@ -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),
|
||||
|
||||
+2
-1
@@ -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),
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user