Skip to content

Commit 72c8c46

Browse files
ALikhachevSpace Team
authored andcommitted
[BTA] Gather build metrics from the daemon
^KT-78198 In Progress Relates to KT-78199
1 parent 76f452a commit 72c8c46

File tree

3 files changed

+25
-7
lines changed

3 files changed

+25
-7
lines changed

compiler/build-tools/kotlin-build-tools-impl/src/main/kotlin/org/jetbrains/kotlin/buildtools/internal/CompilationServiceImpl.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,8 @@ internal object CompilationServiceImpl : CompilationService {
306306
BasicCompilerServicesWithResultsFacadeServer(loggerAdapter),
307307
DaemonCompilationResults(
308308
loggerAdapter.kotlinLogger,
309-
compilationConfiguration.aggregatedIcConfiguration?.options?.rootProjectDir
309+
compilationConfiguration.aggregatedIcConfiguration?.options?.rootProjectDir,
310+
DoNothingBuildMetricsReporter,
310311
)
311312
).get()
312313

compiler/build-tools/kotlin-build-tools-impl/src/main/kotlin/org/jetbrains/kotlin/buildtools/internal/daemonAdapters.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
package org.jetbrains.kotlin.buildtools.internal
77

88
import org.jetbrains.kotlin.build.report.metrics.BuildMetrics
9+
import org.jetbrains.kotlin.build.report.metrics.BuildMetricsReporter
10+
import org.jetbrains.kotlin.build.report.metrics.GradleBuildPerformanceMetric
11+
import org.jetbrains.kotlin.build.report.metrics.GradleBuildTime
912
import org.jetbrains.kotlin.buildtools.api.KotlinLogger
1013
import org.jetbrains.kotlin.buildtools.api.jvm.ClasspathSnapshotBasedIncrementalCompilationApproachParameters
1114
import org.jetbrains.kotlin.buildtools.api.jvm.ClasspathSnapshotBasedIncrementalJvmCompilationConfiguration
@@ -70,7 +73,11 @@ internal val JvmCompilationConfigurationImpl.asDaemonCompilationOptions: Compila
7073
}
7174
}
7275

73-
internal class DaemonCompilationResults(private val kotlinLogger: KotlinLogger, private val rootProjectDir: File?) : CompilationResults,
76+
internal class DaemonCompilationResults(
77+
private val kotlinLogger: KotlinLogger,
78+
private val rootProjectDir: File?,
79+
private val buildMetricsReporter: BuildMetricsReporter<GradleBuildTime, GradleBuildPerformanceMetric>
80+
) : CompilationResults,
7481
UnicastRemoteObject(
7582
SOCKET_ANY_FREE_PORT,
7683
LoopbackNetworkInterface.clientLoopbackSocketFactory,
@@ -87,6 +94,9 @@ internal class DaemonCompilationResults(private val kotlinLogger: KotlinLogger,
8794
// TODO propagate the values to the caller via callbacks, requires to make metrics a part of the API
8895
when (compilationResultCategory) {
8996
CompilationResultCategory.IC_COMPILE_ITERATION.code -> kotlinLogger.debug(value as? CompileIterationResult, rootProjectDir)
97+
CompilationResultCategory.BUILD_METRICS.code -> @Suppress("UNCHECKED_CAST") (value as? BuildMetrics<GradleBuildTime, GradleBuildPerformanceMetric>)?.let {
98+
buildMetricsReporter.addMetrics(it)
99+
}
90100
else -> kotlinLogger.debug("Result category=$compilationResultCategory value=$value")
91101
}
92102
}

compiler/build-tools/kotlin-build-tools-impl/src/main/kotlin/org/jetbrains/kotlin/buildtools/internal/jvm/operations/JvmCompilationOperationImpl.kt

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -126,9 +126,10 @@ internal class JvmCompilationOperationImpl(
126126
val aggregatedIcConfigurationOptions =
127127
aggregatedIcConfiguration.options as JvmSnapshotBasedIncrementalCompilationOptionsImpl
128128
val sourcesChanges = aggregatedIcConfiguration.sourcesChanges
129-
val requestedCompilationResults = arrayOf(
129+
val requestedCompilationResults = listOfNotNull(
130130
CompilationResultCategory.IC_COMPILE_ITERATION.code,
131-
)
131+
CompilationResultCategory.BUILD_METRICS.code.takeIf { this[XX_KGP_METRICS_COLLECTOR] },
132+
).toTypedArray()
132133
val classpathChanges = aggregatedIcConfiguration.classpathChanges
133134
IncrementalCompilationOptions(
134135
sourcesChanges,
@@ -215,13 +216,14 @@ internal class JvmCompilationOperationImpl(
215216
val aggregatedIcConfigurationOptions = aggregatedIcConfiguration?.options as? JvmSnapshotBasedIncrementalCompilationOptionsImpl
216217
val rootProjectDir = aggregatedIcConfigurationOptions?.get(ROOT_PROJECT_DIR)
217218
logCompilerArguments(loggerAdapter, arguments, get(COMPILER_ARGUMENTS_LOG_LEVEL))
219+
val metricsReporter = getMetricsReporter()
218220
val exitCode = daemon.compile(
219221
sessionId,
220222
arguments.toArgumentStrings().toTypedArray(),
221223
daemonCompileOptions,
222224
BasicCompilerServicesWithResultsFacadeServer(loggerAdapter),
223225
DaemonCompilationResults(
224-
loggerAdapter.kotlinLogger, rootProjectDir?.toFile()
226+
loggerAdapter.kotlinLogger, rootProjectDir?.toFile(), metricsReporter
225227
)
226228
).get()
227229

@@ -235,8 +237,13 @@ internal class JvmCompilationOperationImpl(
235237
ExitCode.OK
236238
} else {
237239
ExitCode.COMPILATION_ERROR
238-
}).asCompilationResult
239-
240+
}).asCompilationResult.also {
241+
if (this@JvmCompilationOperationImpl[XX_KGP_METRICS_COLLECTOR] && metricsReporter is BuildMetricsReporterImpl) {
242+
this@JvmCompilationOperationImpl[XX_KGP_METRICS_COLLECTOR_OUT] = ByteArrayOutputStream().apply {
243+
ObjectOutputStream(this).writeObject(metricsReporter)
244+
}.toByteArray()
245+
}
246+
}
240247
}
241248

242249
private fun getCurrentClasspath() =

0 commit comments

Comments
 (0)