Added project size and metrics collectors in gradle plugin
This commit is contained in:
+1
@@ -56,6 +56,7 @@ abstract class KotlinBasePluginWrapper(
|
|||||||
|
|
||||||
override fun apply(project: Project) {
|
override fun apply(project: Project) {
|
||||||
val statisticsReporter = KotlinBuildStatsService.getOrCreateInstance(project.gradle)
|
val statisticsReporter = KotlinBuildStatsService.getOrCreateInstance(project.gradle)
|
||||||
|
statisticsReporter?.report(StringMetrics.KOTLIN_COMPILER_VERSION, kotlinPluginVersion)
|
||||||
|
|
||||||
checkGradleCompatibility()
|
checkGradleCompatibility()
|
||||||
|
|
||||||
|
|||||||
+8
@@ -13,8 +13,11 @@ import org.jetbrains.kotlin.config.ApiVersion
|
|||||||
import org.jetbrains.kotlin.config.LanguageFeature
|
import org.jetbrains.kotlin.config.LanguageFeature
|
||||||
import org.jetbrains.kotlin.config.LanguageVersion
|
import org.jetbrains.kotlin.config.LanguageVersion
|
||||||
import org.jetbrains.kotlin.gradle.plugin.LanguageSettingsBuilder
|
import org.jetbrains.kotlin.gradle.plugin.LanguageSettingsBuilder
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService
|
||||||
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile
|
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile
|
||||||
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinNativeCompile
|
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinNativeCompile
|
||||||
|
import org.jetbrains.kotlin.statistics.metrics.BooleanMetrics
|
||||||
|
import org.jetbrains.kotlin.statistics.metrics.StringMetrics
|
||||||
|
|
||||||
internal class DefaultLanguageSettingsBuilder : LanguageSettingsBuilder {
|
internal class DefaultLanguageSettingsBuilder : LanguageSettingsBuilder {
|
||||||
private var languageVersionImpl: LanguageVersion? = null
|
private var languageVersionImpl: LanguageVersion? = null
|
||||||
@@ -105,6 +108,11 @@ internal fun applyLanguageSettingsToKotlinTask(
|
|||||||
languageSettingsBuilder.experimentalAnnotationsInUse.forEach { annotationName ->
|
languageSettingsBuilder.experimentalAnnotationsInUse.forEach { annotationName ->
|
||||||
freeCompilerArgs += "-Xopt-in=$annotationName"
|
freeCompilerArgs += "-Xopt-in=$annotationName"
|
||||||
}
|
}
|
||||||
|
KotlinBuildStatsService.getInstance()?.apply {
|
||||||
|
report(BooleanMetrics.KOTLIN_PROGRESSIVE_MODE, languageSettingsBuilder.progressiveMode)
|
||||||
|
apiVersion?.also { v -> report(StringMetrics.KOTLIN_API_VERSION, v) }
|
||||||
|
languageVersion?.also { v -> report(StringMetrics.KOTLIN_LANGUAGE_VERSION, v) }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val apiVersionValues = ApiVersion.run { listOf(KOTLIN_1_0, KOTLIN_1_1, KOTLIN_1_2, KOTLIN_1_3) }
|
private val apiVersionValues = ApiVersion.run { listOf(KOTLIN_1_0, KOTLIN_1_1, KOTLIN_1_2, KOTLIN_1_3) }
|
||||||
|
|||||||
+60
-2
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.gradle.plugin.statistics
|
|||||||
|
|
||||||
import org.gradle.BuildAdapter
|
import org.gradle.BuildAdapter
|
||||||
import org.gradle.BuildResult
|
import org.gradle.BuildResult
|
||||||
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.artifacts.DependencySet
|
import org.gradle.api.artifacts.DependencySet
|
||||||
import org.gradle.api.invocation.Gradle
|
import org.gradle.api.invocation.Gradle
|
||||||
import org.gradle.api.logging.Logging
|
import org.gradle.api.logging.Logging
|
||||||
@@ -206,6 +207,26 @@ internal class DefaultKotlinBuildStatsService internal constructor(
|
|||||||
StringMetrics.LIBRARY_HIBERNATE_VERSION,
|
StringMetrics.LIBRARY_HIBERNATE_VERSION,
|
||||||
dependency.version ?: "0.0.0"
|
dependency.version ?: "0.0.0"
|
||||||
)
|
)
|
||||||
|
dependency.group == "org.jetbrains.kotlin" && dependency.name.startsWith("kotlin-stdlib") -> sessionLogger.report(
|
||||||
|
StringMetrics.KOTLIN_STDLIB_VERSION,
|
||||||
|
dependency.version ?: "0.0.0"
|
||||||
|
)
|
||||||
|
dependency.group == "org.jetbrains.kotlinx" && dependency.name == "kotlinx-coroutines" -> sessionLogger.report(
|
||||||
|
StringMetrics.KOTLIN_COROUTINES_VERSION,
|
||||||
|
dependency.version ?: "0.0.0"
|
||||||
|
)
|
||||||
|
dependency.group == "org.jetbrains.kotlin" && dependency.name == "kotlin-reflect" -> sessionLogger.report(
|
||||||
|
StringMetrics.KOTLIN_REFLECT_VERSION,
|
||||||
|
dependency.version ?: "0.0.0"
|
||||||
|
)
|
||||||
|
dependency.group == "org.jetbrains.kotlinx" && dependency.name.startsWith("kotlinx-serialization-runtime") -> sessionLogger.report(
|
||||||
|
StringMetrics.KOTLIN_SERIALIZATION_VERSION,
|
||||||
|
dependency.version ?: "0.0.0"
|
||||||
|
)
|
||||||
|
dependency.group == "com.android.tools.build" && dependency.name.startsWith("gradle") -> sessionLogger.report(
|
||||||
|
StringMetrics.ANDROID_GRADLE_PLUGIN_VERSION,
|
||||||
|
dependency.version ?: "0.0.0"
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -217,7 +238,21 @@ internal class DefaultKotlinBuildStatsService internal constructor(
|
|||||||
sessionLogger.report(NumericalMetrics.CPU_NUMBER_OF_CORES, Runtime.getRuntime().availableProcessors().toLong())
|
sessionLogger.report(NumericalMetrics.CPU_NUMBER_OF_CORES, Runtime.getRuntime().availableProcessors().toLong())
|
||||||
sessionLogger.report(StringMetrics.GRADLE_VERSION, gradle.gradleVersion)
|
sessionLogger.report(StringMetrics.GRADLE_VERSION, gradle.gradleVersion)
|
||||||
sessionLogger.report(BooleanMetrics.EXECUTED_FROM_IDEA, System.getProperty("idea.active") != null)
|
sessionLogger.report(BooleanMetrics.EXECUTED_FROM_IDEA, System.getProperty("idea.active") != null)
|
||||||
|
sessionLogger.report(NumericalMetrics.GRADLE_DAEMON_HEAP_SIZE, Runtime.getRuntime().maxMemory())
|
||||||
|
sessionLogger.report(
|
||||||
|
BooleanMetrics.KOTLIN_OFFICIAL_CODESTYLE,
|
||||||
|
gradle.rootProject.properties["kotlin.code.style"] == "official"
|
||||||
|
) // constants are saved in IDEA plugin and could not be accessed directly
|
||||||
|
|
||||||
|
val executedTaskNames = gradle.taskGraph.allTasks.map { it.name }.distinct()
|
||||||
|
report(BooleanMetrics.COMPILATION_STARTED, executedTaskNames.contains("compileKotlin"))
|
||||||
|
report(BooleanMetrics.TESTS_EXECUTED, executedTaskNames.contains("compileTestKotlin"))
|
||||||
|
report(BooleanMetrics.MAVEN_PUBLISH_EXECUTED, executedTaskNames.contains("install"))
|
||||||
|
|
||||||
|
fun buildSrcExists(project: Project) = File(project.projectDir, "buildSrc").exists()
|
||||||
|
if (buildSrcExists(gradle.rootProject)) {
|
||||||
|
sessionLogger.report(BooleanMetrics.BUILD_SRC_EXISTS, true)
|
||||||
|
}
|
||||||
val statisticOverhead = measureTimeMillis {
|
val statisticOverhead = measureTimeMillis {
|
||||||
gradle.allprojects { project ->
|
gradle.allprojects { project ->
|
||||||
for (configuration in project.configurations) {
|
for (configuration in project.configurations) {
|
||||||
@@ -252,6 +287,25 @@ internal class DefaultKotlinBuildStatsService internal constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sessionLogger.report(NumericalMetrics.NUMBER_OF_SUBPROJECTS, 1)
|
||||||
|
sessionLogger.report(BooleanMetrics.KOTLIN_KTS_USED, project.buildscript.sourceFile?.name?.endsWith(".kts") ?: false)
|
||||||
|
sessionLogger.report(NumericalMetrics.GRADLE_NUMBER_OF_TASKS, project.tasks.names.size.toLong())
|
||||||
|
sessionLogger.report(
|
||||||
|
NumericalMetrics.GRADLE_NUMBER_OF_UNCONFIGURED_TASKS,
|
||||||
|
project.tasks.names.count { name ->
|
||||||
|
try {
|
||||||
|
project.tasks.named(name).javaClass.name.contains("TaskCreatingProvider")
|
||||||
|
} catch (_: Exception) {
|
||||||
|
true
|
||||||
|
}
|
||||||
|
}.toLong()
|
||||||
|
)
|
||||||
|
|
||||||
|
if (buildSrcExists(project)) {
|
||||||
|
sessionLogger.report(NumericalMetrics.BUILD_SRC_COUNT, 1)
|
||||||
|
sessionLogger.report(BooleanMetrics.BUILD_SRC_EXISTS, true)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sessionLogger.report(NumericalMetrics.STATISTICS_VISIT_ALL_PROJECTS_OVERHEAD, statisticOverhead)
|
sessionLogger.report(NumericalMetrics.STATISTICS_VISIT_ALL_PROJECTS_OVERHEAD, statisticOverhead)
|
||||||
@@ -264,7 +318,6 @@ internal class DefaultKotlinBuildStatsService internal constructor(
|
|||||||
DaemonReuseCounter.incrementAndGetOrdinal(),
|
DaemonReuseCounter.incrementAndGetOrdinal(),
|
||||||
gradleBuildStartTime(gradle)
|
gradleBuildStartTime(gradle)
|
||||||
)
|
)
|
||||||
reportGlobalMetrics(gradle)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -273,7 +326,12 @@ internal class DefaultKotlinBuildStatsService internal constructor(
|
|||||||
override fun buildFinished(result: BuildResult) {
|
override fun buildFinished(result: BuildResult) {
|
||||||
runSafe("${DefaultKotlinBuildStatsService::class.java}.buildFinished") {
|
runSafe("${DefaultKotlinBuildStatsService::class.java}.buildFinished") {
|
||||||
try {
|
try {
|
||||||
sessionLogger.finishBuildSession(result.action, result.failure)
|
try {
|
||||||
|
val gradle = result.gradle
|
||||||
|
if (gradle != null) reportGlobalMetrics(gradle)
|
||||||
|
} finally {
|
||||||
|
sessionLogger.finishBuildSession(result.action, result.failure)
|
||||||
|
}
|
||||||
} finally {
|
} finally {
|
||||||
val mbs: MBeanServer = ManagementFactory.getPlatformMBeanServer()
|
val mbs: MBeanServer = ManagementFactory.getPlatformMBeanServer()
|
||||||
if (mbs.isRegistered(beanName)) {
|
if (mbs.isRegistered(beanName)) {
|
||||||
|
|||||||
+3
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
|
|||||||
import org.jetbrains.kotlin.gradle.plugin.*
|
import org.jetbrains.kotlin.gradle.plugin.*
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.*
|
import org.jetbrains.kotlin.gradle.plugin.sources.*
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService
|
||||||
import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider
|
import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider
|
||||||
import org.jetbrains.kotlin.gradle.tasks.registerTask
|
import org.jetbrains.kotlin.gradle.tasks.registerTask
|
||||||
import org.jetbrains.kotlin.gradle.tasks.locateTask
|
import org.jetbrains.kotlin.gradle.tasks.locateTask
|
||||||
@@ -26,6 +27,7 @@ import org.jetbrains.kotlin.gradle.utils.addExtendsFromRelation
|
|||||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||||
import org.jetbrains.kotlin.gradle.utils.setArchiveAppendixCompatible
|
import org.jetbrains.kotlin.gradle.utils.setArchiveAppendixCompatible
|
||||||
import org.jetbrains.kotlin.gradle.utils.setArchiveClassifierCompatible
|
import org.jetbrains.kotlin.gradle.utils.setArchiveClassifierCompatible
|
||||||
|
import org.jetbrains.kotlin.statistics.metrics.BooleanMetrics
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.concurrent.Callable
|
import java.util.concurrent.Callable
|
||||||
|
|
||||||
@@ -64,6 +66,7 @@ class KotlinMetadataTargetConfigurator(kotlinPluginVersion: String) :
|
|||||||
super.configureTarget(target)
|
super.configureTarget(target)
|
||||||
|
|
||||||
if (target.project.isKotlinGranularMetadataEnabled) {
|
if (target.project.isKotlinGranularMetadataEnabled) {
|
||||||
|
KotlinBuildStatsService.getInstance()?.report(BooleanMetrics.ENABLED_HMPP, true)
|
||||||
target as KotlinMetadataTarget
|
target as KotlinMetadataTarget
|
||||||
|
|
||||||
createMergedAllSourceSetsConfigurations(target)
|
createMergedAllSourceSetsConfigurations(target)
|
||||||
|
|||||||
+2
@@ -129,6 +129,8 @@ class BuildSessionLogger(
|
|||||||
report(NumericalMetrics.GRADLE_BUILD_DURATION, finishTime - it.buildStartedTime)
|
report(NumericalMetrics.GRADLE_BUILD_DURATION, finishTime - it.buildStartedTime)
|
||||||
}
|
}
|
||||||
report(NumericalMetrics.GRADLE_EXECUTION_DURATION, finishTime - it.projectEvaluatedTime)
|
report(NumericalMetrics.GRADLE_EXECUTION_DURATION, finishTime - it.projectEvaluatedTime)
|
||||||
|
report(NumericalMetrics.BUILD_FINISH_TIME, finishTime)
|
||||||
|
report(BooleanMetrics.BUILD_FAILED, failure != null)
|
||||||
}
|
}
|
||||||
buildSession = null
|
buildSession = null
|
||||||
} finally {
|
} finally {
|
||||||
|
|||||||
+1
-2
@@ -35,7 +35,7 @@ enum class BooleanMetrics(val type: BooleanOverridePolicy, val anonymization: Bo
|
|||||||
|
|
||||||
KOTLIN_OFFICIAL_CODESTYLE(OVERRIDE, SAFE),
|
KOTLIN_OFFICIAL_CODESTYLE(OVERRIDE, SAFE),
|
||||||
KOTLIN_PROGRESSIVE_MODE(OVERRIDE, SAFE),
|
KOTLIN_PROGRESSIVE_MODE(OVERRIDE, SAFE),
|
||||||
KOTLIN_KTS_USED(OVERRIDE, SAFE),
|
KOTLIN_KTS_USED(OR, SAFE),
|
||||||
|
|
||||||
// User scenarios
|
// User scenarios
|
||||||
DEBUGGER_ENABLED(OVERRIDE, SAFE),
|
DEBUGGER_ENABLED(OVERRIDE, SAFE),
|
||||||
@@ -43,5 +43,4 @@ enum class BooleanMetrics(val type: BooleanOverridePolicy, val anonymization: Bo
|
|||||||
TESTS_EXECUTED(OVERRIDE, SAFE),
|
TESTS_EXECUTED(OVERRIDE, SAFE),
|
||||||
MAVEN_PUBLISH_EXECUTED(OVERRIDE, SAFE),
|
MAVEN_PUBLISH_EXECUTED(OVERRIDE, SAFE),
|
||||||
BUILD_FAILED(OVERRIDE, SAFE)
|
BUILD_FAILED(OVERRIDE, SAFE)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -45,7 +45,7 @@ enum class NumericalMetrics(val type: NumberOverridePolicy, val anonymization: N
|
|||||||
//duration of the execution gradle phase
|
//duration of the execution gradle phase
|
||||||
GRADLE_EXECUTION_DURATION(OVERRIDE, SAFE),
|
GRADLE_EXECUTION_DURATION(OVERRIDE, SAFE),
|
||||||
|
|
||||||
NUMBER_OF_SUBPROJECTS(OVERRIDE, RANDOM_10_PERCENT),
|
NUMBER_OF_SUBPROJECTS(SUM, RANDOM_10_PERCENT),
|
||||||
|
|
||||||
STATISTICS_VISIT_ALL_PROJECTS_OVERHEAD(SUM, RANDOM_10_PERCENT),
|
STATISTICS_VISIT_ALL_PROJECTS_OVERHEAD(SUM, RANDOM_10_PERCENT),
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user