FIR: Add init time measurement to full pipeline

This commit is contained in:
Simon Ogorodnik
2021-03-16 17:49:09 +03:00
committed by Denis.Zharkov
parent 991e5210ba
commit 0aca68e7c7
2 changed files with 8 additions and 3 deletions
@@ -13,7 +13,7 @@ class JitCompilationMeasurement(private val milliseconds: Long) : PerformanceMea
override fun render(): String = "JIT time is $milliseconds ms" override fun render(): String = "JIT time is $milliseconds ms"
} }
class CompilerInitializationMeasurement(private val milliseconds: Long) : PerformanceMeasurement { class CompilerInitializationMeasurement(val milliseconds: Long) : PerformanceMeasurement {
override fun render(): String = "INIT: Compiler initialized in $milliseconds ms" override fun render(): String = "INIT: Compiler initialized in $milliseconds ms"
} }
@@ -28,6 +28,7 @@ class FullPipelineModularizedTest : AbstractModularizedTest() {
private data class CumulativeTime( private data class CumulativeTime(
val gcInfo: Map<String, GCInfo>, val gcInfo: Map<String, GCInfo>,
val init: Long,
val analysis: Long, val analysis: Long,
val translation: Long, val translation: Long,
val lowering: Long, val lowering: Long,
@@ -35,13 +36,14 @@ class FullPipelineModularizedTest : AbstractModularizedTest() {
val files: Int, val files: Int,
val lines: Int val lines: Int
) { ) {
constructor() : this(emptyMap(), 0, 0, 0, 0, 0, 0) constructor() : this(emptyMap(), 0, 0, 0, 0, 0, 0, 0)
operator fun plus(other: CumulativeTime): CumulativeTime { operator fun plus(other: CumulativeTime): CumulativeTime {
return CumulativeTime( return CumulativeTime(
(gcInfo.values + other.gcInfo.values).groupingBy { it.name }.reduce { key, accumulator, element -> (gcInfo.values + other.gcInfo.values).groupingBy { it.name }.reduce { key, accumulator, element ->
GCInfo(key, accumulator.gcTime + element.gcTime, accumulator.collections + element.collections) GCInfo(key, accumulator.gcTime + element.gcTime, accumulator.collections + element.collections)
}, },
init + other.init,
analysis + other.analysis, analysis + other.analysis,
translation + other.translation, translation + other.translation,
lowering + other.lowering, lowering + other.lowering,
@@ -51,7 +53,7 @@ class FullPipelineModularizedTest : AbstractModularizedTest() {
) )
} }
fun totalTime() = analysis + translation + lowering + generation fun totalTime() = init + analysis + translation + lowering + generation
} }
private lateinit var totalPassResult: CumulativeTime private lateinit var totalPassResult: CumulativeTime
@@ -126,6 +128,7 @@ class FullPipelineModularizedTest : AbstractModularizedTest() {
linePerSecondCell(lines, timeMs, timeUnit = MS) linePerSecondCell(lines, timeMs, timeUnit = MS)
} }
} }
phase("Init", total.init, total.files, total.lines)
phase("Analysis", total.analysis, total.files, total.lines) phase("Analysis", total.analysis, total.files, total.lines)
phase("Translation", total.translation, total.files, total.lines) phase("Translation", total.translation, total.files, total.lines)
phase("Lowering", total.lowering, total.files, total.lines) phase("Lowering", total.lowering, total.files, total.lines)
@@ -262,10 +265,12 @@ class FullPipelineModularizedTest : AbstractModularizedTest() {
.associate { it.garbageCollectionKind to GCInfo(it.garbageCollectionKind, it.milliseconds, it.count) } .associate { it.garbageCollectionKind to GCInfo(it.garbageCollectionKind, it.milliseconds, it.count) }
val analysisMeasurement = measurements.filterIsInstance<CodeAnalysisMeasurement>().firstOrNull() val analysisMeasurement = measurements.filterIsInstance<CodeAnalysisMeasurement>().firstOrNull()
val initMeasurement = measurements.filterIsInstance<CompilerInitializationMeasurement>().firstOrNull()
val irMeasurements = measurements.filterIsInstance<IRMeasurement>() val irMeasurements = measurements.filterIsInstance<IRMeasurement>()
return CumulativeTime( return CumulativeTime(
gcInfo, gcInfo,
initMeasurement?.milliseconds ?: 0,
analysisMeasurement?.milliseconds ?: 0, analysisMeasurement?.milliseconds ?: 0,
irMeasurements.firstOrNull { it.kind == IRMeasurement.Kind.TRANSLATION }?.milliseconds ?: 0, irMeasurements.firstOrNull { it.kind == IRMeasurement.Kind.TRANSLATION }?.milliseconds ?: 0,
irMeasurements.firstOrNull { it.kind == IRMeasurement.Kind.LOWERING }?.milliseconds ?: 0, irMeasurements.firstOrNull { it.kind == IRMeasurement.Kind.LOWERING }?.milliseconds ?: 0,