Remove unnecessary KotlinBuildStatsService.getInstance method calls
#KT-59363 In progress
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/BuildFlowService.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/BuildFlowService.kt
index 20988ed..c12e958 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/BuildFlowService.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/BuildFlowService.kt
@@ -28,6 +28,7 @@
internal abstract class BuildFlowService : BuildService<BuildFlowService.Parameters>, AutoCloseable, OperationCompletionListener {
private var buildFailed: Boolean = false
+ private val executedTaskMetrics = HashSet<BooleanMetrics>()
interface Parameters : BuildServiceParameters {
val configurationMetrics: Property<MetricContainer>
@@ -74,10 +75,9 @@
spec.parameters.fusStatisticsAvailable.set(fusStatisticsAvailable)
}.also { buildService ->
if (fusStatisticsAvailable) {
- when {
- GradleVersion.current().baseVersion < GradleVersion.version("8.1") ->
- BuildEventsListenerRegistryHolder.getInstance(project).listenerRegistry.onTaskCompletion(buildService)
- else -> StatisticsBuildFlowManager.getInstance(project).subscribeForBuildResult()
+ BuildEventsListenerRegistryHolder.getInstance(project).listenerRegistry.onTaskCompletion(buildService)
+ if (GradleVersion.current().baseVersion >= GradleVersion.version("8.1")) {
+ StatisticsBuildFlowManager.getInstance(project).subscribeForBuildResult()
}
}
if (GradleVersion.current().baseVersion >= GradleVersion.version("8.1")) {
@@ -88,25 +88,45 @@
}
override fun onFinish(event: FinishEvent?) {
- if ((event is TaskFinishEvent) && (event.result is TaskFailureResult)) {
- buildFailed = true
+ if (event is TaskFinishEvent) {
+ getTaskMetric(event.descriptor.name)?.also { executedTaskMetrics.add(it) }
+ if (event.result is TaskFailureResult) {
+ buildFailed = true
+ }
}
}
override fun close() {
- if (parameters.fusStatisticsAvailable.get()) {
- recordBuildFinished(null, buildFailed)
- }
- KotlinBuildStatsService.applyIfInitialised {
- it.close()
+ KotlinBuildStatsService.applyIfInitialised { service ->
+ executedTaskMetrics.forEach { service.report(it, true) }
+ if (parameters.fusStatisticsAvailable.get() && GradleVersion.current().baseVersion < GradleVersion.version("8.1")) {
+ service.recordBuildFinish(null, buildFailed, parameters.configurationMetrics.orElse(MetricContainer()).get())
+ }
+ service.close()
}
}
internal fun recordBuildFinished(action: String?, buildFailed: Boolean) {
- KotlinBuildStatsService.applyIfInitialised {
- it.recordBuildFinish(action, buildFailed, parameters.configurationMetrics.orElse(MetricContainer()).get())
+ KotlinBuildStatsService.applyIfInitialised { service ->
+ executedTaskMetrics.forEach { service.report(it, true) }
+ service.recordBuildFinish(action, buildFailed, parameters.configurationMetrics.orElse(MetricContainer()).get())
}
}
+
+ private fun getTaskMetric(task: String) = when (task.substringAfterLast(":")) {
+ "dokkaHtml" -> BooleanMetrics.ENABLED_DOKKA_HTML
+ "dokkaGfm" -> BooleanMetrics.ENABLED_DOKKA_GFM
+ "dokkaJavadoc" -> BooleanMetrics.ENABLED_DOKKA_JAVADOC
+ "dokkaJekyll" -> BooleanMetrics.ENABLED_DOKKA_JEKYLL
+ "dokkaHtmlMultiModule" -> BooleanMetrics.ENABLED_DOKKA_HTML_MULTI_MODULE
+ "dokkaGfmMultiModule" -> BooleanMetrics.ENABLED_DOKKA_GFM_MULTI_MODULE
+ "dokkaJekyllMultiModule" -> BooleanMetrics.ENABLED_DOKKA_JEKYLL_MULTI_MODULE
+ "dokkaHtmlCollector" -> BooleanMetrics.ENABLED_DOKKA_HTML_COLLECTOR
+ "dokkaGfmCollector" -> BooleanMetrics.ENABLED_DOKKA_GFM_COLLECTOR
+ "dokkaJavadocCollector" -> BooleanMetrics.ENABLED_DOKKA_JAVADOC_COLLECTOR
+ "dokkaJekyllCollector" -> BooleanMetrics.ENABLED_DOKKA_JEKYLL_COLLECTOR
+ else -> null
+ }
}
internal class MetricContainer : Serializable {
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatHandler.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatHandler.kt
index 5b86a1e..aa29520 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatHandler.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatHandler.kt
@@ -8,7 +8,6 @@
import org.gradle.api.Project
import org.gradle.api.artifacts.DependencySet
import org.gradle.api.logging.Logging
-import org.jetbrains.kotlin.gradle.plugin.internal.isProjectIsolationEnabled
import org.jetbrains.kotlin.gradle.utils.*
import org.jetbrains.kotlin.statistics.BuildSessionLogger
import org.jetbrains.kotlin.statistics.metrics.BooleanMetrics
@@ -58,29 +57,30 @@
}
}
- fun reportGlobalMetrics(
+ internal fun reportGlobalMetricsAndBuildFinished(
sessionLogger: BuildSessionLogger,
- ) {
- runSafe("${KotlinBuildStatHandler::class.java}.reportGlobalMetrics") {
- 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(BooleanMetrics.EXECUTED_FROM_IDEA, System.getProperty("idea.active") != null)
- sessionLogger.report(NumericalMetrics.GRADLE_DAEMON_HEAP_SIZE, Runtime.getRuntime().maxMemory())
- }
- }
-
- internal fun reportBuildFinished(
- sessionLogger: BuildSessionLogger,
- action: String?,
+ action: String? = null,
buildFailed: Boolean,
configurationMetrics: MetricContainer,
) {
- runSafe("${KotlinBuildStatHandler::class.java}.reportBuildFinish") {
- configurationMetrics.report(sessionLogger)
- sessionLogger.finishBuildSession(action, buildFailed)
+ runSafe("${KotlinBuildStatHandler::class.java}.reportGlobalMetrics") {
+ try {
+ reportGlobalMetrics(sessionLogger)
+ configurationMetrics.report(sessionLogger)
+ } finally {
+ sessionLogger.finishBuildSession(action, buildFailed)
+ }
}
}
+ private fun reportGlobalMetrics(sessionLogger: BuildSessionLogger) {
+ 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(BooleanMetrics.EXECUTED_FROM_IDEA, System.getProperty("idea.active") != null)
+ sessionLogger.report(NumericalMetrics.GRADLE_DAEMON_HEAP_SIZE, Runtime.getRuntime().maxMemory())
+ }
+
internal fun collectConfigurationTimeMetrics(
project: Project,
sessionLogger: BuildSessionLogger,
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatsService.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatsService.kt
index c9dd68f..2a209ab 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatsService.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/statistics/KotlinBuildStatsService.kt
@@ -128,14 +128,6 @@
registerPre232IdeaStatsBean(mbs, gradle, log)
}
-
- BuildEventsListenerRegistryHolder.getInstance(project).listenerRegistry.onTaskCompletion(project.provider {
- OperationCompletionListener { event ->
- if (event is TaskFinishEvent) {
- reportTaskIfNeed(event.descriptor.name)
- }
- }
- })
}
instance
}
@@ -152,24 +144,6 @@
}
}
- protected fun reportTaskIfNeed(task: String) {
- val metric = when (task.substringAfterLast(":")) {
- "dokkaHtml" -> BooleanMetrics.ENABLED_DOKKA_HTML
- "dokkaGfm" -> BooleanMetrics.ENABLED_DOKKA_GFM
- "dokkaJavadoc" -> BooleanMetrics.ENABLED_DOKKA_JAVADOC
- "dokkaJekyll" -> BooleanMetrics.ENABLED_DOKKA_JEKYLL
- "dokkaHtmlMultiModule" -> BooleanMetrics.ENABLED_DOKKA_HTML_MULTI_MODULE
- "dokkaGfmMultiModule" -> BooleanMetrics.ENABLED_DOKKA_GFM_MULTI_MODULE
- "dokkaJekyllMultiModule" -> BooleanMetrics.ENABLED_DOKKA_JEKYLL_MULTI_MODULE
- "dokkaHtmlCollector" -> BooleanMetrics.ENABLED_DOKKA_HTML_COLLECTOR
- "dokkaGfmCollector" -> BooleanMetrics.ENABLED_DOKKA_GFM_COLLECTOR
- "dokkaJavadocCollector" -> BooleanMetrics.ENABLED_DOKKA_JAVADOC_COLLECTOR
- "dokkaJekyllCollector" -> BooleanMetrics.ENABLED_DOKKA_JEKYLL_COLLECTOR
- else -> null
- }
- metric?.also { getInstance()?.report(it, true) }
- }
-
/**
* Invokes provided collector if the reporting service is initialised.
@@ -334,8 +308,7 @@
//only one jmx bean service should report global metrics
override fun recordBuildFinish(action: String?, buildFailed: Boolean, configurationTimeMetrics: MetricContainer) {
- KotlinBuildStatHandler().reportGlobalMetrics(sessionLogger)
- KotlinBuildStatHandler().reportBuildFinished(sessionLogger, action, buildFailed, configurationTimeMetrics)
+ KotlinBuildStatHandler().reportGlobalMetricsAndBuildFinished(sessionLogger, action, buildFailed, configurationTimeMetrics)
}
override fun collectStartMetrics(project: Project, isProjectIsolationEnabled: Boolean) =