diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatHandler.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatHandler.kt index 7c0413c0521..295d6c4f11d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatHandler.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatHandler.kt @@ -70,9 +70,7 @@ class KotlinBuildStatHandler { internal fun reportGlobalMetrics(gradle: Gradle, sessionLogger: BuildSessionLogger) { sessionLogger.report(StringMetrics.PROJECT_PATH, gradle.rootProject.projectDir.absolutePath) - System.getProperty("os.name")?.also { - sessionLogger.report(StringMetrics.OS_TYPE, System.getProperty("os.name")) - } + System.getProperty("os.name")?.also { sessionLogger.report(StringMetrics.OS_TYPE, System.getProperty("os.name")) } sessionLogger.report(NumericalMetrics.CPU_NUMBER_OF_CORES, Runtime.getRuntime().availableProcessors().toLong()) sessionLogger.report(StringMetrics.GRADLE_VERSION, gradle.gradleVersion) sessionLogger.report(BooleanMetrics.EXECUTED_FROM_IDEA, System.getProperty("idea.active") != null) @@ -84,15 +82,12 @@ class KotlinBuildStatHandler { gradle.taskGraph.whenReady() { taskExecutionGraph -> val executedTaskNames = taskExecutionGraph.allTasks.map { it.name }.distinct() - report(sessionLogger, BooleanMetrics.COMPILATION_STARTED, executedTaskNames.contains("compileKotlin"), null) - report(sessionLogger, BooleanMetrics.TESTS_EXECUTED, executedTaskNames.contains("compileTestKotlin"), null) report(sessionLogger, BooleanMetrics.MAVEN_PUBLISH_EXECUTED, executedTaskNames.contains("install"), null) } fun buildSrcExists(project: Project) = File(project.projectDir, "buildSrc").exists() - if (buildSrcExists(gradle.rootProject)) { - sessionLogger.report(BooleanMetrics.BUILD_SRC_EXISTS, true) - } + sessionLogger.report(BooleanMetrics.BUILD_SRC_EXISTS, buildSrcExists(gradle.rootProject)) + val statisticOverhead = measureTimeMillis { gradle.allprojects { project -> for (configuration in project.configurations) { 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 541700ffd19..8f0f7ffc257 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 @@ -56,6 +56,8 @@ import org.jetbrains.kotlin.gradle.utils.* import org.jetbrains.kotlin.incremental.ChangedFiles import org.jetbrains.kotlin.incremental.ClasspathChanges import org.jetbrains.kotlin.incremental.IncrementalCompilerRunner +import org.jetbrains.kotlin.library.impl.isKotlinLibrary +import org.jetbrains.kotlin.statistics.BuildSessionLogger import org.jetbrains.kotlin.statistics.metrics.BooleanMetrics import org.jetbrains.kotlin.utils.JsLibraryUtils import org.jetbrains.kotlin.utils.addToStdlib.cast @@ -330,6 +332,12 @@ abstract class AbstractKotlinCompile : AbstractKotl @TaskAction fun execute(inputChanges: InputChanges) { + KotlinBuildStatsService.applyIfInitialised { + if (name.contains("Test")) + it.report(BooleanMetrics.TESTS_EXECUTED, true) + else + it.report(BooleanMetrics.COMPILATION_STARTED, true) + } val buildMetrics = metrics.get() buildMetrics.measure(BuildTime.GRADLE_TASK_ACTION) { systemPropertiesService.get().startIntercept() @@ -842,7 +850,7 @@ abstract class KotlinCompile @Inject constructor( private fun getClasspathChanges(inputChanges: InputChanges): ClasspathChanges { val fileChanges = inputChanges.getFileChanges(classpathSnapshotProperties.classpathSnapshot).toList() return if (fileChanges.isEmpty()) { - ClasspathChanges.Available(emptySet(), emptySet()) + ClasspathChanges.Available(LinkedHashSet(), LinkedHashSet()) } else { val previousClasspathEntrySnapshotFiles = getPreviousClasspathEntrySnapshotFiles() if (previousClasspathEntrySnapshotFiles.isEmpty()) { @@ -1046,7 +1054,7 @@ abstract class Kotlin2JsCompile @Inject constructor( get() = (kotlinOptions as KotlinJsOptionsImpl).sourceMapBaseDirs private fun isHybridKotlinJsLibrary(file: File): Boolean = - JsLibraryUtils.isKotlinJavascriptLibrary(file) && JsLibraryUtils.isKotlinJavascriptIrLibrary(file) + JsLibraryUtils.isKotlinJavascriptLibrary(file) && isKotlinLibrary(file) private fun KotlinJsOptions.isPreIrBackendDisabled(): Boolean = listOf( @@ -1079,7 +1087,7 @@ abstract class Kotlin2JsCompile @Inject constructor( if (kotlinOptions.isPreIrBackendDisabled()) { //::isKotlinLibrary // Workaround for KT-47797 - { JsLibraryUtils.isKotlinJavascriptIrLibrary(it) } + { isKotlinLibrary(it) } } else { ::isHybridKotlinJsLibrary } diff --git a/libraries/tools/kotlin-gradle-statistics/src/org/jetbrains/kotlin/statistics/fileloggers/MetricsContainer.kt b/libraries/tools/kotlin-gradle-statistics/src/org/jetbrains/kotlin/statistics/fileloggers/MetricsContainer.kt index 27fafda1cb3..f4cb2d426a3 100644 --- a/libraries/tools/kotlin-gradle-statistics/src/org/jetbrains/kotlin/statistics/fileloggers/MetricsContainer.kt +++ b/libraries/tools/kotlin-gradle-statistics/src/org/jetbrains/kotlin/statistics/fileloggers/MetricsContainer.kt @@ -93,15 +93,18 @@ class MetricsContainer : IStatisticsValuesConsumer { private fun processProjectName(subprojectName: String?, perProject: Boolean) = if (perProject && subprojectName != null) sha256(subprojectName) else null + private fun getProjectHash(perProject: Boolean, subprojectName: String?) = + if (subprojectName == null) null else processProjectName(subprojectName, perProject) + override fun report(metric: BooleanMetrics, value: Boolean, subprojectName: String?) { - val projectHash = if (subprojectName == null) null else processProjectName(subprojectName, metric.perProject) + val projectHash = getProjectHash(metric.perProject, subprojectName) val metricContainer = booleanMetrics[MetricDescriptor(metric.name, projectHash)] ?: metric.type.newMetricContainer() .also { booleanMetrics[MetricDescriptor(metric.name, projectHash)] = it } metricContainer.addValue(metric.anonymization.anonymize(value)) } override fun report(metric: NumericalMetrics, value: Long, subprojectName: String?) { - val projectHash = if (subprojectName == null) null else processProjectName(subprojectName, metric.perProject) + val projectHash = getProjectHash(metric.perProject, subprojectName) val metricContainer = numericalMetrics[MetricDescriptor(metric.name, projectHash)] ?: metric.type.newMetricContainer() .also { numericalMetrics[MetricDescriptor(metric.name, projectHash)] = it } metricContainer.addValue(metric.anonymization.anonymize(value))