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) {
|
internal fun reportGlobalMetrics(gradle: Gradle, sessionLogger: BuildSessionLogger) {
|
||||||
sessionLogger.report(StringMetrics.PROJECT_PATH, gradle.rootProject.projectDir.absolutePath)
|
sessionLogger.report(StringMetrics.PROJECT_PATH, gradle.rootProject.projectDir.absolutePath)
|
||||||
System.getProperty("os.name")?.also {
|
System.getProperty("os.name")?.also { sessionLogger.report(StringMetrics.OS_TYPE, System.getProperty("os.name")) }
|
||||||
sessionLogger.report(StringMetrics.OS_TYPE, System.getProperty("os.name"))
|
|
||||||
}
|
|
||||||
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)
|
||||||
@@ -84,15 +82,12 @@ class KotlinBuildStatHandler {
|
|||||||
|
|
||||||
gradle.taskGraph.whenReady() { taskExecutionGraph ->
|
gradle.taskGraph.whenReady() { taskExecutionGraph ->
|
||||||
val executedTaskNames = taskExecutionGraph.allTasks.map { it.name }.distinct()
|
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)
|
report(sessionLogger, BooleanMetrics.MAVEN_PUBLISH_EXECUTED, executedTaskNames.contains("install"), null)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun buildSrcExists(project: Project) = File(project.projectDir, "buildSrc").exists()
|
fun buildSrcExists(project: Project) = File(project.projectDir, "buildSrc").exists()
|
||||||
if (buildSrcExists(gradle.rootProject)) {
|
sessionLogger.report(BooleanMetrics.BUILD_SRC_EXISTS, 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) {
|
||||||
|
|||||||
+11
-3
@@ -56,6 +56,8 @@ import org.jetbrains.kotlin.gradle.utils.*
|
|||||||
import org.jetbrains.kotlin.incremental.ChangedFiles
|
import org.jetbrains.kotlin.incremental.ChangedFiles
|
||||||
import org.jetbrains.kotlin.incremental.ClasspathChanges
|
import org.jetbrains.kotlin.incremental.ClasspathChanges
|
||||||
import org.jetbrains.kotlin.incremental.IncrementalCompilerRunner
|
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.statistics.metrics.BooleanMetrics
|
||||||
import org.jetbrains.kotlin.utils.JsLibraryUtils
|
import org.jetbrains.kotlin.utils.JsLibraryUtils
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.cast
|
import org.jetbrains.kotlin.utils.addToStdlib.cast
|
||||||
@@ -330,6 +332,12 @@ abstract class AbstractKotlinCompile<T : CommonCompilerArguments> : AbstractKotl
|
|||||||
|
|
||||||
@TaskAction
|
@TaskAction
|
||||||
fun execute(inputChanges: InputChanges) {
|
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()
|
val buildMetrics = metrics.get()
|
||||||
buildMetrics.measure(BuildTime.GRADLE_TASK_ACTION) {
|
buildMetrics.measure(BuildTime.GRADLE_TASK_ACTION) {
|
||||||
systemPropertiesService.get().startIntercept()
|
systemPropertiesService.get().startIntercept()
|
||||||
@@ -842,7 +850,7 @@ abstract class KotlinCompile @Inject constructor(
|
|||||||
private fun getClasspathChanges(inputChanges: InputChanges): ClasspathChanges {
|
private fun getClasspathChanges(inputChanges: InputChanges): ClasspathChanges {
|
||||||
val fileChanges = inputChanges.getFileChanges(classpathSnapshotProperties.classpathSnapshot).toList()
|
val fileChanges = inputChanges.getFileChanges(classpathSnapshotProperties.classpathSnapshot).toList()
|
||||||
return if (fileChanges.isEmpty()) {
|
return if (fileChanges.isEmpty()) {
|
||||||
ClasspathChanges.Available(emptySet(), emptySet())
|
ClasspathChanges.Available(LinkedHashSet(), LinkedHashSet())
|
||||||
} else {
|
} else {
|
||||||
val previousClasspathEntrySnapshotFiles = getPreviousClasspathEntrySnapshotFiles()
|
val previousClasspathEntrySnapshotFiles = getPreviousClasspathEntrySnapshotFiles()
|
||||||
if (previousClasspathEntrySnapshotFiles.isEmpty()) {
|
if (previousClasspathEntrySnapshotFiles.isEmpty()) {
|
||||||
@@ -1046,7 +1054,7 @@ abstract class Kotlin2JsCompile @Inject constructor(
|
|||||||
get() = (kotlinOptions as KotlinJsOptionsImpl).sourceMapBaseDirs
|
get() = (kotlinOptions as KotlinJsOptionsImpl).sourceMapBaseDirs
|
||||||
|
|
||||||
private fun isHybridKotlinJsLibrary(file: File): Boolean =
|
private fun isHybridKotlinJsLibrary(file: File): Boolean =
|
||||||
JsLibraryUtils.isKotlinJavascriptLibrary(file) && JsLibraryUtils.isKotlinJavascriptIrLibrary(file)
|
JsLibraryUtils.isKotlinJavascriptLibrary(file) && isKotlinLibrary(file)
|
||||||
|
|
||||||
private fun KotlinJsOptions.isPreIrBackendDisabled(): Boolean =
|
private fun KotlinJsOptions.isPreIrBackendDisabled(): Boolean =
|
||||||
listOf(
|
listOf(
|
||||||
@@ -1079,7 +1087,7 @@ abstract class Kotlin2JsCompile @Inject constructor(
|
|||||||
if (kotlinOptions.isPreIrBackendDisabled()) {
|
if (kotlinOptions.isPreIrBackendDisabled()) {
|
||||||
//::isKotlinLibrary
|
//::isKotlinLibrary
|
||||||
// Workaround for KT-47797
|
// Workaround for KT-47797
|
||||||
{ JsLibraryUtils.isKotlinJavascriptIrLibrary(it) }
|
{ isKotlinLibrary(it) }
|
||||||
} else {
|
} else {
|
||||||
::isHybridKotlinJsLibrary
|
::isHybridKotlinJsLibrary
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-2
@@ -93,15 +93,18 @@ class MetricsContainer : IStatisticsValuesConsumer {
|
|||||||
private fun processProjectName(subprojectName: String?, perProject: Boolean) =
|
private fun processProjectName(subprojectName: String?, perProject: Boolean) =
|
||||||
if (perProject && subprojectName != null) sha256(subprojectName) else null
|
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?) {
|
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()
|
val metricContainer = booleanMetrics[MetricDescriptor(metric.name, projectHash)] ?: metric.type.newMetricContainer()
|
||||||
.also { booleanMetrics[MetricDescriptor(metric.name, projectHash)] = it }
|
.also { booleanMetrics[MetricDescriptor(metric.name, projectHash)] = it }
|
||||||
metricContainer.addValue(metric.anonymization.anonymize(value))
|
metricContainer.addValue(metric.anonymization.anonymize(value))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun report(metric: NumericalMetrics, value: Long, subprojectName: String?) {
|
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()
|
val metricContainer = numericalMetrics[MetricDescriptor(metric.name, projectHash)] ?: metric.type.newMetricContainer()
|
||||||
.also { numericalMetrics[MetricDescriptor(metric.name, projectHash)] = it }
|
.also { numericalMetrics[MetricDescriptor(metric.name, projectHash)] = it }
|
||||||
metricContainer.addValue(metric.anonymization.anonymize(value))
|
metricContainer.addValue(metric.anonymization.anonymize(value))
|
||||||
|
|||||||
Reference in New Issue
Block a user