[FIR] Add logging to artifact in ModularizedTest for old frontend

This commit is contained in:
Dmitriy Novozhilov
2019-10-18 18:21:00 +03:00
parent f2d01aeabd
commit 4d43c13fb1
3 changed files with 32 additions and 24 deletions
@@ -11,6 +11,8 @@ import org.jetbrains.kotlin.types.AbstractTypeChecker
import org.w3c.dom.Node
import org.w3c.dom.NodeList
import java.io.File
import java.text.SimpleDateFormat
import java.util.*
import javax.xml.parsers.DocumentBuilderFactory
data class ModuleData(
@@ -37,9 +39,23 @@ private fun NodeList.toList(): List<Node> {
private val Node.childNodesList get() = childNodes.toList()
abstract class AbstractModularizedTest : KtUsefulTestCase() {
private val folderDateFormat = SimpleDateFormat("yyyy-MM-dd")
private lateinit var startDate: Date
protected fun reportDir() = File(FIR_LOGS_PATH, folderDateFormat.format(startDate))
.also {
it.mkdirs()
}
protected val reportDateStr by lazy {
val reportDateFormat = SimpleDateFormat("yyyy-MM-dd__HH-mm")
reportDateFormat.format(startDate)
}
override fun setUp() {
super.setUp()
AbstractTypeChecker.RUN_SLOW_ASSERTIONS = false
startDate = Date()
}
override fun tearDown() {
@@ -26,15 +26,13 @@ import org.jetbrains.kotlin.test.TestJdkKind
import java.io.File
import java.io.FileOutputStream
import java.io.PrintStream
import java.text.SimpleDateFormat
import java.util.*
private const val FAIL_FAST = true
private const val FIR_DUMP_PATH = "tmp/firDump"
private const val FIR_HTML_DUMP_PATH = "tmp/firDump-html"
private const val FIR_LOGS_PATH = "tmp/fir-logs"
const val FIR_LOGS_PATH = "tmp/fir-logs"
private val DUMP_FIR = System.getProperty("fir.bench.dump", "true") == "true"
internal val PASSES = System.getProperty("fir.bench.passes")?.toInt() ?: 3
@@ -151,24 +149,6 @@ class FirResolveModularizedTotalKotlinTest : AbstractModularizedTest() {
printErrors(bestStatistics)
}
private val folderDateFormat = SimpleDateFormat("yyyy-MM-dd")
private lateinit var startDate: Date
override fun setUp() {
startDate = Date()
super.setUp()
}
private fun reportDir() = File(FIR_LOGS_PATH, folderDateFormat.format(startDate))
.also {
it.mkdirs()
}
private val reportDateStr by lazy {
val reportDateFormat = SimpleDateFormat("yyyy-MM-dd__HH-mm")
reportDateFormat.format(startDate)
}
private fun saveReport(pass: Int, statistics: FirResolveBench.TotalStatistics) {
if (DUMP_FIR) dump.finish()
printStatistics(statistics, "PASS $pass")
@@ -20,15 +20,17 @@ import org.jetbrains.kotlin.fir.scopes.ProcessorAction
import org.jetbrains.kotlin.test.ConfigurationKind
import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.TestJdkKind
import java.io.FileOutputStream
import java.io.PrintStream
import kotlin.system.measureNanoTime
class NonFirResolveModularizedTotalKotlinTest : AbstractModularizedTest() {
private var totalTime = 0L
private var files = 0
private val times = mutableListOf<Long>()
private fun runAnalysis(moduleData: ModuleData, environment: KotlinCoreEnvironment) {
val project = environment.project
@@ -39,7 +41,12 @@ class NonFirResolveModularizedTotalKotlinTest : AbstractModularizedTest() {
files += environment.getSourceFiles().size
totalTime += time
println("Time is ${time * 1e-6} ms")
}
private fun dumpTime(message: String, time: Long) {
PrintStream(FileOutputStream(reportDir().resolve("report-$reportDateStr.log"), true)).use { stream ->
stream.println("$message: ${time * 1e-6} ms")
}
}
override fun processModule(moduleData: ModuleData): ProcessorAction {
@@ -104,8 +111,13 @@ class NonFirResolveModularizedTotalKotlinTest : AbstractModularizedTest() {
fun testTotalKotlin() {
for (i in 0 until PASSES) {
runTestOnce(i)
println("Total time is ${totalTime * 1e-6} ms")
times += totalTime
dumpTime("Pass $i:", totalTime)
totalTime = 0L
}
val bestTime = times.min()!!
val bestPass = times.indexOf(bestTime)
dumpTime("Best pass: $bestPass", bestTime)
}
}