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) {
|
||||
val statisticsReporter = KotlinBuildStatsService.getOrCreateInstance(project.gradle)
|
||||
statisticsReporter?.report(StringMetrics.KOTLIN_COMPILER_VERSION, kotlinPluginVersion)
|
||||
|
||||
checkGradleCompatibility()
|
||||
|
||||
|
||||
+8
@@ -13,8 +13,11 @@ import org.jetbrains.kotlin.config.ApiVersion
|
||||
import org.jetbrains.kotlin.config.LanguageFeature
|
||||
import org.jetbrains.kotlin.config.LanguageVersion
|
||||
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.AbstractKotlinNativeCompile
|
||||
import org.jetbrains.kotlin.statistics.metrics.BooleanMetrics
|
||||
import org.jetbrains.kotlin.statistics.metrics.StringMetrics
|
||||
|
||||
internal class DefaultLanguageSettingsBuilder : LanguageSettingsBuilder {
|
||||
private var languageVersionImpl: LanguageVersion? = null
|
||||
@@ -105,6 +108,11 @@ internal fun applyLanguageSettingsToKotlinTask(
|
||||
languageSettingsBuilder.experimentalAnnotationsInUse.forEach { 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) }
|
||||
|
||||
+60
-2
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.gradle.plugin.statistics
|
||||
|
||||
import org.gradle.BuildAdapter
|
||||
import org.gradle.BuildResult
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.artifacts.DependencySet
|
||||
import org.gradle.api.invocation.Gradle
|
||||
import org.gradle.api.logging.Logging
|
||||
@@ -206,6 +207,26 @@ internal class DefaultKotlinBuildStatsService internal constructor(
|
||||
StringMetrics.LIBRARY_HIBERNATE_VERSION,
|
||||
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(StringMetrics.GRADLE_VERSION, gradle.gradleVersion)
|
||||
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 {
|
||||
gradle.allprojects { project ->
|
||||
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)
|
||||
@@ -264,7 +318,6 @@ internal class DefaultKotlinBuildStatsService internal constructor(
|
||||
DaemonReuseCounter.incrementAndGetOrdinal(),
|
||||
gradleBuildStartTime(gradle)
|
||||
)
|
||||
reportGlobalMetrics(gradle)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -273,7 +326,12 @@ internal class DefaultKotlinBuildStatsService internal constructor(
|
||||
override fun buildFinished(result: BuildResult) {
|
||||
runSafe("${DefaultKotlinBuildStatsService::class.java}.buildFinished") {
|
||||
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 {
|
||||
val mbs: MBeanServer = ManagementFactory.getPlatformMBeanServer()
|
||||
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.mpp.*
|
||||
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.registerTask
|
||||
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.setArchiveAppendixCompatible
|
||||
import org.jetbrains.kotlin.gradle.utils.setArchiveClassifierCompatible
|
||||
import org.jetbrains.kotlin.statistics.metrics.BooleanMetrics
|
||||
import java.io.File
|
||||
import java.util.concurrent.Callable
|
||||
|
||||
@@ -64,6 +66,7 @@ class KotlinMetadataTargetConfigurator(kotlinPluginVersion: String) :
|
||||
super.configureTarget(target)
|
||||
|
||||
if (target.project.isKotlinGranularMetadataEnabled) {
|
||||
KotlinBuildStatsService.getInstance()?.report(BooleanMetrics.ENABLED_HMPP, true)
|
||||
target as KotlinMetadataTarget
|
||||
|
||||
createMergedAllSourceSetsConfigurations(target)
|
||||
|
||||
+2
@@ -129,6 +129,8 @@ class BuildSessionLogger(
|
||||
report(NumericalMetrics.GRADLE_BUILD_DURATION, finishTime - it.buildStartedTime)
|
||||
}
|
||||
report(NumericalMetrics.GRADLE_EXECUTION_DURATION, finishTime - it.projectEvaluatedTime)
|
||||
report(NumericalMetrics.BUILD_FINISH_TIME, finishTime)
|
||||
report(BooleanMetrics.BUILD_FAILED, failure != null)
|
||||
}
|
||||
buildSession = null
|
||||
} finally {
|
||||
|
||||
+1
-2
@@ -35,7 +35,7 @@ enum class BooleanMetrics(val type: BooleanOverridePolicy, val anonymization: Bo
|
||||
|
||||
KOTLIN_OFFICIAL_CODESTYLE(OVERRIDE, SAFE),
|
||||
KOTLIN_PROGRESSIVE_MODE(OVERRIDE, SAFE),
|
||||
KOTLIN_KTS_USED(OVERRIDE, SAFE),
|
||||
KOTLIN_KTS_USED(OR, SAFE),
|
||||
|
||||
// User scenarios
|
||||
DEBUGGER_ENABLED(OVERRIDE, SAFE),
|
||||
@@ -43,5 +43,4 @@ enum class BooleanMetrics(val type: BooleanOverridePolicy, val anonymization: Bo
|
||||
TESTS_EXECUTED(OVERRIDE, SAFE),
|
||||
MAVEN_PUBLISH_EXECUTED(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
|
||||
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),
|
||||
|
||||
|
||||
Reference in New Issue
Block a user