More stable reporting of compilation in statistics
This commit is contained in:
committed by
TeamCityServer
parent
2fe337f58a
commit
b5456539aa
+3
-8
@@ -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) {
|
||||
|
||||
+11
-3
@@ -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<T : CommonCompilerArguments> : 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
|
||||
}
|
||||
|
||||
+5
-2
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user