Add limitation for changed files list for JPS build report

#KT-63549
This commit is contained in:
Nataliya.Valtman
2023-12-04 12:22:05 +01:00
committed by Space Team
parent 6eeb459076
commit 4294c7bab7
4 changed files with 19 additions and 7 deletions
@@ -10,10 +10,11 @@ import java.io.Serializable
data class FileReportSettings(
val buildReportDir: File,
val changedFileListPerLimit: Int? = null,
val includeMetricsInReport: Boolean = false,
) : Serializable {
companion object {
const val serialVersionUID: Long = 0
const val serialVersionUID: Long = 1
}
}
@@ -11,15 +11,20 @@ import org.jetbrains.kotlin.build.report.statistics.CompileStatisticsData
import org.jetbrains.kotlin.build.report.statistics.file.FileReportService
import org.jetbrains.kotlin.compilerRunner.JpsKotlinLogger
import java.io.File
import kotlin.math.min
internal class JpsFileReportService(
buildReportDir: File,
projectName: String,
printMetrics: Boolean,
logger: JpsKotlinLogger,
private val changedFileListPerLimit: Int?
) : FileReportService<JpsBuildTime, JpsBuildPerformanceMetric>(buildReportDir, projectName, printMetrics, logger) {
override fun printCustomTaskMetrics(statisticsData: CompileStatisticsData<JpsBuildTime, JpsBuildPerformanceMetric>) {
p.print("Changed files: ${statisticsData.getChanges().sorted()}")
p.print("Execution result: ${statisticsData.getTaskResult()}")
val changedFiles = statisticsData.getChanges().let { changes ->
changedFileListPerLimit?.let { changes.subList(0, min(it, changes.size)) } ?: changes
}
p.println("Changed files: ${changedFiles.sorted()}")
p.println("Execution result: ${statisticsData.getTaskResult()}")
}
}
@@ -17,7 +17,6 @@ import org.jetbrains.kotlin.build.report.metrics.*
import org.jetbrains.kotlin.build.report.statistics.*
import org.jetbrains.kotlin.compilerRunner.JpsKotlinLogger
import org.jetbrains.kotlin.jps.build.KotlinChunk
import org.jetbrains.kotlin.jps.build.KotlinCompileContext
import org.jetbrains.kotlin.jps.build.KotlinDirtySourceFilesHolder
import java.io.File
import java.util.concurrent.ConcurrentHashMap
@@ -30,6 +29,8 @@ internal val statisticsReportServiceKey = GlobalContextKey<JpsStatisticsReportSe
sealed class JpsStatisticsReportService {
companion object {
private const val DEFAULT_CHANGED_FILE_LIST_LIMIT = 20
internal fun create(): JpsStatisticsReportService {
val fileReportSettings = initFileReportSettings()
val httpReportSettings = initHttpReportSettings()
@@ -45,7 +46,9 @@ sealed class JpsStatisticsReportService {
context.getUserData(statisticsReportServiceKey) ?: DummyJpsStatisticsReportService
private fun initFileReportSettings(): FileReportSettings? {
return System.getProperty("kotlin.build.report.file.output_dir")?.let { FileReportSettings(File(it)) }
return System.getProperty("kotlin.build.report.file.output_dir")?.let {
FileReportSettings(File(it), System.getProperty("kotlin.build.report.file.change_file_limit")?.toInt() ?: DEFAULT_CHANGED_FILE_LIST_LIMIT)
}
}
private fun initHttpReportSettings(): HttpReportSettings? {
@@ -140,7 +143,7 @@ class JpsStatisticsReportServiceImpl(
httpService?.sendData(compileStatisticsData, loggerAdapter)
fileReportSettings?.also {
JpsFileReportService(
it.buildReportDir, context.projectDescriptor.project.name, true, loggerAdapter
it.buildReportDir, context.projectDescriptor.project.name, true, loggerAdapter, it.changedFileListPerLimit
).process(
compileStatisticsData,
BuildStartParameters(tasks = listOf(jpsBuildTaskName)), emptyList(),
@@ -42,7 +42,10 @@ internal fun reportingSettings(project: Project): ReportingSettings {
project.rootProject.buildDir
}).resolve("reports/kotlin-build")
val includeMetricsInReport = properties.buildReportMetrics || buildReportMode == BuildReportMode.VERBOSE
FileReportSettings(buildReportDir = buildReportDir, includeMetricsInReport = includeMetricsInReport)
FileReportSettings(
buildReportDir = buildReportDir,
includeMetricsInReport = includeMetricsInReport
)
} else {
null
}