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( data class FileReportSettings(
val buildReportDir: File, val buildReportDir: File,
val changedFileListPerLimit: Int? = null,
val includeMetricsInReport: Boolean = false, val includeMetricsInReport: Boolean = false,
) : Serializable { ) : Serializable {
companion object { 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.build.report.statistics.file.FileReportService
import org.jetbrains.kotlin.compilerRunner.JpsKotlinLogger import org.jetbrains.kotlin.compilerRunner.JpsKotlinLogger
import java.io.File import java.io.File
import kotlin.math.min
internal class JpsFileReportService( internal class JpsFileReportService(
buildReportDir: File, buildReportDir: File,
projectName: String, projectName: String,
printMetrics: Boolean, printMetrics: Boolean,
logger: JpsKotlinLogger, logger: JpsKotlinLogger,
private val changedFileListPerLimit: Int?
) : FileReportService<JpsBuildTime, JpsBuildPerformanceMetric>(buildReportDir, projectName, printMetrics, logger) { ) : FileReportService<JpsBuildTime, JpsBuildPerformanceMetric>(buildReportDir, projectName, printMetrics, logger) {
override fun printCustomTaskMetrics(statisticsData: CompileStatisticsData<JpsBuildTime, JpsBuildPerformanceMetric>) { override fun printCustomTaskMetrics(statisticsData: CompileStatisticsData<JpsBuildTime, JpsBuildPerformanceMetric>) {
p.print("Changed files: ${statisticsData.getChanges().sorted()}") val changedFiles = statisticsData.getChanges().let { changes ->
p.print("Execution result: ${statisticsData.getTaskResult()}") 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.build.report.statistics.*
import org.jetbrains.kotlin.compilerRunner.JpsKotlinLogger import org.jetbrains.kotlin.compilerRunner.JpsKotlinLogger
import org.jetbrains.kotlin.jps.build.KotlinChunk import org.jetbrains.kotlin.jps.build.KotlinChunk
import org.jetbrains.kotlin.jps.build.KotlinCompileContext
import org.jetbrains.kotlin.jps.build.KotlinDirtySourceFilesHolder import org.jetbrains.kotlin.jps.build.KotlinDirtySourceFilesHolder
import java.io.File import java.io.File
import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.ConcurrentHashMap
@@ -30,6 +29,8 @@ internal val statisticsReportServiceKey = GlobalContextKey<JpsStatisticsReportSe
sealed class JpsStatisticsReportService { sealed class JpsStatisticsReportService {
companion object { companion object {
private const val DEFAULT_CHANGED_FILE_LIST_LIMIT = 20
internal fun create(): JpsStatisticsReportService { internal fun create(): JpsStatisticsReportService {
val fileReportSettings = initFileReportSettings() val fileReportSettings = initFileReportSettings()
val httpReportSettings = initHttpReportSettings() val httpReportSettings = initHttpReportSettings()
@@ -45,7 +46,9 @@ sealed class JpsStatisticsReportService {
context.getUserData(statisticsReportServiceKey) ?: DummyJpsStatisticsReportService context.getUserData(statisticsReportServiceKey) ?: DummyJpsStatisticsReportService
private fun initFileReportSettings(): FileReportSettings? { 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? { private fun initHttpReportSettings(): HttpReportSettings? {
@@ -140,7 +143,7 @@ class JpsStatisticsReportServiceImpl(
httpService?.sendData(compileStatisticsData, loggerAdapter) httpService?.sendData(compileStatisticsData, loggerAdapter)
fileReportSettings?.also { fileReportSettings?.also {
JpsFileReportService( JpsFileReportService(
it.buildReportDir, context.projectDescriptor.project.name, true, loggerAdapter it.buildReportDir, context.projectDescriptor.project.name, true, loggerAdapter, it.changedFileListPerLimit
).process( ).process(
compileStatisticsData, compileStatisticsData,
BuildStartParameters(tasks = listOf(jpsBuildTaskName)), emptyList(), BuildStartParameters(tasks = listOf(jpsBuildTaskName)), emptyList(),
@@ -42,7 +42,10 @@ internal fun reportingSettings(project: Project): ReportingSettings {
project.rootProject.buildDir project.rootProject.buildDir
}).resolve("reports/kotlin-build") }).resolve("reports/kotlin-build")
val includeMetricsInReport = properties.buildReportMetrics || buildReportMode == BuildReportMode.VERBOSE val includeMetricsInReport = properties.buildReportMetrics || buildReportMode == BuildReportMode.VERBOSE
FileReportSettings(buildReportDir = buildReportDir, includeMetricsInReport = includeMetricsInReport) FileReportSettings(
buildReportDir = buildReportDir,
includeMetricsInReport = includeMetricsInReport
)
} else { } else {
null null
} }