Drop jmh benchmarks for light-tree2fir
These benchmarks are not used and interfere with FIR IDE plugin.
This commit is contained in:
@@ -6,8 +6,6 @@ plugins {
|
|||||||
}
|
}
|
||||||
|
|
||||||
group = "org.jetbrains.kotlin.fir"
|
group = "org.jetbrains.kotlin.fir"
|
||||||
val jmhVersion = "1.21"
|
|
||||||
val testDataPath = "$rootDir/compiler/fir/lightTree/testData/coroutines"
|
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
@@ -35,10 +33,6 @@ dependencies {
|
|||||||
testRuntimeOnly(project(":kotlin-reflect"))
|
testRuntimeOnly(project(":kotlin-reflect"))
|
||||||
testRuntimeOnly(project(":core:descriptors.runtime"))
|
testRuntimeOnly(project(":core:descriptors.runtime"))
|
||||||
|
|
||||||
implementation("org.openjdk.jmh", "jmh-core", jmhVersion)
|
|
||||||
implementation("org.openjdk.jmh", "jmh-generator-bytecode", jmhVersion)
|
|
||||||
implementation("org.openjdk.jmh", "jmh-generator-annprocess", jmhVersion)
|
|
||||||
|
|
||||||
testCompileOnly(intellijCore())
|
testCompileOnly(intellijCore())
|
||||||
testRuntimeOnly(intellijCore())
|
testRuntimeOnly(intellijCore())
|
||||||
}
|
}
|
||||||
@@ -62,68 +56,6 @@ if (kotlinBuildProperties.isInJpsBuildIdeaSync) {
|
|||||||
|
|
||||||
projectTest {
|
projectTest {
|
||||||
workingDir = rootDir
|
workingDir = rootDir
|
||||||
exclude("**/benchmark/**")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
testsJar()
|
testsJar()
|
||||||
|
|
||||||
val compactClasspath by tasks.registering(Jar::class) {
|
|
||||||
archiveAppendix.set("classpath")
|
|
||||||
inputs.files(sourceSets["main"].runtimeClasspath + sourceSets["test"].runtimeClasspath)
|
|
||||||
doFirst {
|
|
||||||
manifest {
|
|
||||||
attributes["Class-Path"] = (sourceSets["main"].runtimeClasspath + sourceSets["test"].runtimeClasspath).files
|
|
||||||
.joinToString(separator = " ", transform = { it.toURI().toURL().toString() })
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val jmhBytecode by tasks.registering(JavaExec::class) {
|
|
||||||
tasks["classes"].mustRunAfter(tasks["clean"])
|
|
||||||
tasks["compactClasspath"].mustRunAfter(tasks["classes"])
|
|
||||||
dependsOn(tasks["clean"])
|
|
||||||
dependsOn(tasks["classes"])
|
|
||||||
dependsOn(tasks["compactClasspath"])
|
|
||||||
|
|
||||||
classpath = files(tasks["compactClasspath"].outputs.files.singleFile.absolutePath)
|
|
||||||
main = "org.openjdk.jmh.generators.bytecode.JmhBytecodeGenerator"
|
|
||||||
args(
|
|
||||||
"${project.buildDir}/classes/kotlin/test", "${project.buildDir}/generated-sources/jmh/",
|
|
||||||
"${project.buildDir}/classes/kotlin/test", "default"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
//tasks {
|
|
||||||
// compileTestJava {
|
|
||||||
// source(fileTree("${project.buildDir}/generated-sources/jmh/"))
|
|
||||||
// destinationDir = file("${project.buildDir}/generated-classes/jmh/")
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
val jmhCompile by tasks.registering(JavaCompile::class) {
|
|
||||||
/*classpath = sourceSets["test"].runtimeClasspath + files("${project.buildDir}/generated-sources/jmh/")
|
|
||||||
|
|
||||||
source(fileTree("${project.buildDir}/generated-sources/jmh/"))
|
|
||||||
destinationDir = file("${project.buildDir}/generated-classes/jmh/")*/
|
|
||||||
}
|
|
||||||
|
|
||||||
val jmhExec by tasks.registering(JavaExec::class) {
|
|
||||||
dependsOn(":createIdeaHomeForTests")
|
|
||||||
dependsOn(tasks["compileTestJava"])
|
|
||||||
|
|
||||||
doFirst {
|
|
||||||
classpath = files(
|
|
||||||
tasks["compactClasspath"].outputs.files.singleFile.absolutePath,
|
|
||||||
"${project.buildDir}/generated-classes/jmh/",
|
|
||||||
"${project.buildDir}/classes/kotlin/test"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
main = "org.openjdk.jmh.Main"
|
|
||||||
|
|
||||||
workingDir = rootDir
|
|
||||||
systemProperty("idea.home.path", project.ideaHomePathForTests().absolutePath)
|
|
||||||
systemProperty("idea.use.native.fs.for.win", false)
|
|
||||||
systemProperty("idea.max.intellisense.filesize", 5000 * 1024)
|
|
||||||
configurations.plusAssign(project.configurations["api"])
|
|
||||||
}
|
|
||||||
|
|||||||
-56
@@ -1,56 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
|
||||||
* that can be found in the license/LICENSE.txt file.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.fir.lightTree.benchmark
|
|
||||||
|
|
||||||
import com.intellij.openapi.util.io.FileUtil
|
|
||||||
import com.intellij.openapi.vfs.CharsetToolkit
|
|
||||||
import org.jetbrains.kotlin.fir.lightTree.benchmark.generators.TreeGenerator
|
|
||||||
import org.jetbrains.kotlin.fir.lightTree.walkTopDown
|
|
||||||
import org.jetbrains.kotlin.fir.lightTree.walkTopDownWithTestData
|
|
||||||
import org.openjdk.jmh.annotations.*
|
|
||||||
import java.io.File
|
|
||||||
import java.util.concurrent.TimeUnit
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This class is base for all benchmarks.
|
|
||||||
*
|
|
||||||
* To run benchmarks use gradle and consistently run next tasks:
|
|
||||||
* 1. jmhBytecode
|
|
||||||
* 2. jmhExec
|
|
||||||
*/
|
|
||||||
@BenchmarkMode(Mode.SingleShotTime)
|
|
||||||
@Warmup(iterations = 10, batchSize = 1)
|
|
||||||
@Measurement(iterations = 10, batchSize = 1)
|
|
||||||
@OutputTimeUnit(TimeUnit.MILLISECONDS)
|
|
||||||
@Fork(1)
|
|
||||||
@State(Scope.Benchmark)
|
|
||||||
abstract class AbstractBenchmark {
|
|
||||||
private val files = mutableMapOf<File, String>()
|
|
||||||
abstract val generator: TreeGenerator
|
|
||||||
|
|
||||||
protected fun readFiles(ignoreTestData: Boolean, path: String) {
|
|
||||||
println("BASE PATH: $path")
|
|
||||||
val saveText: (File) -> Unit = { file ->
|
|
||||||
val text = FileUtil.loadFile(file, CharsetToolkit.UTF8, true).trim()
|
|
||||||
files[file] = text
|
|
||||||
}
|
|
||||||
if (ignoreTestData) {
|
|
||||||
path.walkTopDown(saveText)
|
|
||||||
} else {
|
|
||||||
path.walkTopDownWithTestData(saveText)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected fun forEachFile(f: (String, File) -> Unit) {
|
|
||||||
for ((file, text) in files) {
|
|
||||||
f(text, file)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected fun getFilesCount(): Int {
|
|
||||||
return files.size
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-35
@@ -1,35 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
|
||||||
* that can be found in the license/LICENSE.txt file.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.fir.lightTree.benchmark
|
|
||||||
|
|
||||||
import org.openjdk.jmh.annotations.*
|
|
||||||
|
|
||||||
abstract class AbstractBenchmarkForGivenPath(
|
|
||||||
private val path: String,
|
|
||||||
private val ignoreTestData: Boolean = true
|
|
||||||
) : AbstractBenchmark() {
|
|
||||||
@Setup
|
|
||||||
fun setUp() {
|
|
||||||
generator.setUp()
|
|
||||||
readFiles(ignoreTestData, path)
|
|
||||||
println("FILES COUNT: ${getFilesCount()}")
|
|
||||||
}
|
|
||||||
|
|
||||||
@TearDown
|
|
||||||
fun tearDown() {
|
|
||||||
generator.tearDown()
|
|
||||||
}
|
|
||||||
|
|
||||||
@Benchmark
|
|
||||||
fun testBuildOnlyBaseTreeForGivenPath() {
|
|
||||||
forEachFile { text, file -> generator.generateBaseTree(text, file) }
|
|
||||||
}
|
|
||||||
|
|
||||||
@Benchmark
|
|
||||||
fun testBuildFirForGivenPath() {
|
|
||||||
forEachFile { text, file -> generator.generateFir(text, file) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-64
@@ -1,64 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
|
||||||
* that can be found in the license/LICENSE.txt file.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.fir.lightTree.benchmark.createdFiles
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.lightTree.benchmark.*
|
|
||||||
import org.jetbrains.kotlin.fir.lightTree.benchmark.generators.LightTree2FirGenerator
|
|
||||||
import org.jetbrains.kotlin.fir.lightTree.benchmark.generators.Psi2FirGenerator
|
|
||||||
import org.jetbrains.kotlin.fir.lightTree.benchmark.generators.TreeGenerator
|
|
||||||
import org.openjdk.jmh.annotations.*
|
|
||||||
import java.io.File
|
|
||||||
import java.util.concurrent.TimeUnit
|
|
||||||
|
|
||||||
abstract class AbstractKotlinBenchmark : AbstractBenchmark() {
|
|
||||||
@Param(
|
|
||||||
/* CLASSES */
|
|
||||||
"1Class", "10Classes", "100Classes", "1000Classes", "10_000Classes", "100_000Classes",
|
|
||||||
"1Cin1C", "10Cin1C", "100Cin1C", "1000Cin1C", "10_000Cin1C", "100_000Cin1C",
|
|
||||||
"1Cin10C", "10Cin10C", "100Cin10C", "1000Cin10C", "10_000Cin10C",
|
|
||||||
"1Cin100C", "10Cin100C", "100Cin100C", "1000Cin100C",
|
|
||||||
"1Cin1000C", "10Cin1000C", "100Cin1000C",
|
|
||||||
"1Cin10_000C", "10Cin10_000C", "1Cin100_000C",
|
|
||||||
/* FUNCTIONS */
|
|
||||||
"1Fun", "10Fun", "100Fun", "1000Fun", "10_000Fun", "100_000Fun",
|
|
||||||
"1Fin1C", "1Fin10C", "1Fin100C", "1Fin1000C", "1Fin10_000C", "1Fin100_000C",
|
|
||||||
"10Fin1C", "10Fin10C", "10Fin100C", "10Fin1000C", "10Fin10_000C",
|
|
||||||
"100Fin1C", "100Fin10C", "100Fin100C", "100Fin1000C",
|
|
||||||
/* PROPERTIES */
|
|
||||||
"1Var", "10Var", "100Var", "1000Var", "10_000Var", "100_000Var",
|
|
||||||
"1Vin1C", "1Vin10C", "1Vin100C", "1Vin1000C", "1Vin10_000C", "1Vin100_000C",
|
|
||||||
"10Vin1C", "10Vin10C", "10Vin100C", "10Vin1000C", "10Vin10_000C",
|
|
||||||
"100Vin1C", "100Vin10C", "100Vin100C", "100Vin1000C"
|
|
||||||
)
|
|
||||||
var methodName: String = ""
|
|
||||||
|
|
||||||
private var text: String = ""
|
|
||||||
private var file: File = File("$methodName.kt")
|
|
||||||
|
|
||||||
@Setup
|
|
||||||
fun setUp() {
|
|
||||||
generator.setUp()
|
|
||||||
|
|
||||||
val testMethod = TestCases::class.java.getMethod(methodName)
|
|
||||||
text = testMethod.invoke(TestCases()) as String
|
|
||||||
}
|
|
||||||
|
|
||||||
@TearDown
|
|
||||||
fun tearDown() {
|
|
||||||
generator.tearDown()
|
|
||||||
}
|
|
||||||
|
|
||||||
@Benchmark
|
|
||||||
fun testCreatedFiles() {
|
|
||||||
generator.generateFir(text, file)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
open class LightTree2FirKotlinBenchmark(override val generator: TreeGenerator = LightTree2FirGenerator()) :
|
|
||||||
AbstractKotlinBenchmark()
|
|
||||||
|
|
||||||
open class Psi2FirKotlinBenchmark(override val generator: TreeGenerator = Psi2FirGenerator()) :
|
|
||||||
AbstractKotlinBenchmark()
|
|
||||||
-542
@@ -1,542 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
|
||||||
* that can be found in the license/LICENSE.txt file.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.fir.lightTree.benchmark.createdFiles
|
|
||||||
|
|
||||||
class TestCases {
|
|
||||||
/* CLASSES */
|
|
||||||
fun `1Class`(): String {
|
|
||||||
return TestCasesGenerator().generateData({ createClass(1) }).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `10Classes`(): String {
|
|
||||||
return TestCasesGenerator().generateData({ createClass(10) }).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `100Classes`(): String {
|
|
||||||
return TestCasesGenerator().generateData({ createClass(100) }).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `1000Classes`(): String {
|
|
||||||
return TestCasesGenerator().generateData({ createClass(1000) }).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `10_000Classes`(): String {
|
|
||||||
return TestCasesGenerator().generateData({ createClass(10000) }).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `100_000Classes`(): String {
|
|
||||||
return TestCasesGenerator().generateData({ createClass(100000) }).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `1Cin1C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(1, {
|
|
||||||
createClass(1)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `10Cin1C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(1, {
|
|
||||||
createClass(10)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `100Cin1C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(1, {
|
|
||||||
createClass(100)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `1000Cin1C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(1, {
|
|
||||||
createClass(1000)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `10_000Cin1C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(1, {
|
|
||||||
createClass(10_000)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `100_000Cin1C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(1, {
|
|
||||||
createClass(100_000)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `1Cin10C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(10, {
|
|
||||||
createClass(1)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `10Cin10C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(10, {
|
|
||||||
createClass(10)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `100Cin10C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(10, {
|
|
||||||
createClass(100)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `1000Cin10C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(10, {
|
|
||||||
createClass(1000)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `10_000Cin10C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(10, {
|
|
||||||
createClass(10_000)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `1Cin100C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(100, {
|
|
||||||
createClass(1)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `10Cin100C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(100, {
|
|
||||||
createClass(10)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `100Cin100C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(100, {
|
|
||||||
createClass(100)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `1000Cin100C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(100, {
|
|
||||||
createClass(1000)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `1Cin1000C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(1000, {
|
|
||||||
createClass(1)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `10Cin1000C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(1000, {
|
|
||||||
createClass(10)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `100Cin1000C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(1000, {
|
|
||||||
createClass(100)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `1Cin10_000C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(10_000, {
|
|
||||||
createClass(1)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `10Cin10_000C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(10_000, {
|
|
||||||
createClass(10)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `1Cin100_000C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(100_000, {
|
|
||||||
createClass(1)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
/* FUNCTIONS */
|
|
||||||
fun `1Fun`(): String {
|
|
||||||
return TestCasesGenerator().generateData({ createFun(1) }).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `10Fun`(): String {
|
|
||||||
return TestCasesGenerator().generateData({ createFun(10) }).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `100Fun`(): String {
|
|
||||||
return TestCasesGenerator().generateData({ createFun(100) }).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `1000Fun`(): String {
|
|
||||||
return TestCasesGenerator().generateData({ createFun(1000) }).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `10_000Fun`(): String {
|
|
||||||
return TestCasesGenerator().generateData({ createFun(10000) }).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `100_000Fun`(): String {
|
|
||||||
return TestCasesGenerator().generateData({ createFun(100000) }).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `1Fin1C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(1, {
|
|
||||||
createFun(1)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `1Fin10C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(10, {
|
|
||||||
createFun(1)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `1Fin100C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(100, {
|
|
||||||
createFun(1)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `1Fin1000C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(1000, {
|
|
||||||
createFun(1)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `1Fin10_000C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(10_000, {
|
|
||||||
createFun(1)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `1Fin100_000C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(100_000, {
|
|
||||||
createFun(1)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `10Fin1C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(1, {
|
|
||||||
createFun(10)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `10Fin10C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(10, {
|
|
||||||
createFun(10)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `10Fin100C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(100, {
|
|
||||||
createFun(10)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `10Fin1000C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(1000, {
|
|
||||||
createFun(10)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `10Fin10_000C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(10_000, {
|
|
||||||
createFun(10)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `100Fin1C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(1, {
|
|
||||||
createFun(100)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `100Fin10C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(10, {
|
|
||||||
createFun(100)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `100Fin100C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(100, {
|
|
||||||
createFun(100)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `100Fin1000C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(1000, {
|
|
||||||
createFun(100)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
/* PROPERTIES */
|
|
||||||
fun `1Var`(): String {
|
|
||||||
return TestCasesGenerator().generateData({ createProperty(1) }).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `10Var`(): String {
|
|
||||||
return TestCasesGenerator().generateData({ createProperty(10) }).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `100Var`(): String {
|
|
||||||
return TestCasesGenerator().generateData({ createProperty(100) }).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `1000Var`(): String {
|
|
||||||
return TestCasesGenerator().generateData({ createProperty(1000) }).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `10_000Var`(): String {
|
|
||||||
return TestCasesGenerator().generateData({ createProperty(10000) }).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `100_000Var`(): String {
|
|
||||||
return TestCasesGenerator().generateData({ createProperty(100000) }).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `1Vin1C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(1, {
|
|
||||||
createProperty(1)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `1Vin10C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(10, {
|
|
||||||
createProperty(1)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `1Vin100C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(100, {
|
|
||||||
createProperty(1)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `1Vin1000C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(1000, {
|
|
||||||
createProperty(1)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `1Vin10_000C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(10_000, {
|
|
||||||
createProperty(1)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `1Vin100_000C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(100_000, {
|
|
||||||
createProperty(1)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `10Vin1C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(1, {
|
|
||||||
createProperty(10)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `10Vin10C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(10, {
|
|
||||||
createProperty(10)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `10Vin100C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(100, {
|
|
||||||
createProperty(10)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `10Vin1000C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(1000, {
|
|
||||||
createProperty(10)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `10Vin10_000C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(10_000, {
|
|
||||||
createProperty(10)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `100Vin1C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(1, {
|
|
||||||
createProperty(100)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `100Vin10C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(10, {
|
|
||||||
createProperty(100)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `100Vin100C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(100, {
|
|
||||||
createProperty(100)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun `100Vin1000C`(): String {
|
|
||||||
return TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(1000, {
|
|
||||||
createProperty(100)
|
|
||||||
})
|
|
||||||
}).getText()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-99
@@ -1,99 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
|
||||||
* that can be found in the license/LICENSE.txt file.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.fir.lightTree.benchmark.createdFiles
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.utils.Printer
|
|
||||||
import kotlin.random.Random
|
|
||||||
|
|
||||||
class TestCasesGenerator {
|
|
||||||
private val charPool: List<Char> = ('a'..'z') + ('A'..'Z')
|
|
||||||
private val types = listOf("Int", "Double", "Boolean", "String")
|
|
||||||
|
|
||||||
private val builder = StringBuilder()
|
|
||||||
private val printer: Printer
|
|
||||||
|
|
||||||
init {
|
|
||||||
printer = Printer(builder, " ")
|
|
||||||
}
|
|
||||||
|
|
||||||
fun generateData(vararg pipeline: TestCasesGenerator.() -> Unit): TestCasesGenerator {
|
|
||||||
printer.apply {
|
|
||||||
pipeline.forEach { it() }
|
|
||||||
}
|
|
||||||
return this
|
|
||||||
}
|
|
||||||
|
|
||||||
fun createClass(count: Int, vararg pipeline: TestCasesGenerator.() -> Unit) {
|
|
||||||
for (i in 1..count) {
|
|
||||||
printer.println("class ${randomString(Random.nextLong(5, 15))} {")
|
|
||||||
printer.pushIndent()
|
|
||||||
printer.apply {
|
|
||||||
pipeline.forEach { it() }
|
|
||||||
}
|
|
||||||
printer.popIndent()
|
|
||||||
printer.println("}")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun createFun(count: Int, vararg pipeline: TestCasesGenerator.() -> Unit) {
|
|
||||||
for (i in 1..count) {
|
|
||||||
printer.println("fun ${randomString(Random.nextLong(5, 15))}() {")
|
|
||||||
printer.pushIndent()
|
|
||||||
printer.apply {
|
|
||||||
pipeline.forEach { it() }
|
|
||||||
}
|
|
||||||
printer.popIndent()
|
|
||||||
printer.println("}")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun createProperty(count: Int) {
|
|
||||||
for (i in 1..count) {
|
|
||||||
val typeAndValue = getRandomTypeAndValue()
|
|
||||||
printer.println(
|
|
||||||
"val ${randomString(Random.nextLong(5, 15))}: " +
|
|
||||||
"${typeAndValue.first} = ${typeAndValue.second} \n"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun randomString(length: Long): String {
|
|
||||||
return (1..length)
|
|
||||||
.map { Random.nextInt(0, charPool.size) }
|
|
||||||
.map(charPool::get)
|
|
||||||
.joinToString("")
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun getRandomTypeAndValue(): Pair<String, String> {
|
|
||||||
val type = types[Random.nextInt(0, types.size)]
|
|
||||||
return when (type) {
|
|
||||||
"Int" -> Pair(type, Random.nextInt().toString())
|
|
||||||
"Double" -> Pair(type, Random.nextDouble().toString())
|
|
||||||
"Boolean" -> Pair(type, Random.nextBoolean().toString())
|
|
||||||
"String" -> Pair(type, randomString(Random.nextLong(5, 15)))
|
|
||||||
else -> throw UnsupportedOperationException("Unsupported type")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getText(): String {
|
|
||||||
return builder.toString()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun main() {
|
|
||||||
TestCasesGenerator().generateData(
|
|
||||||
{
|
|
||||||
createClass(10,
|
|
||||||
{
|
|
||||||
createClass(100,
|
|
||||||
{
|
|
||||||
createClass(100)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
-23
@@ -1,23 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
|
||||||
* that can be found in the license/LICENSE.txt file.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.fir.lightTree.benchmark.firModule
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.lightTree.benchmark.*
|
|
||||||
import org.jetbrains.kotlin.fir.lightTree.benchmark.generators.LightTree2FirGenerator
|
|
||||||
import org.jetbrains.kotlin.fir.lightTree.benchmark.generators.Psi2FirGenerator
|
|
||||||
import org.jetbrains.kotlin.fir.lightTree.benchmark.generators.TreeGenerator
|
|
||||||
|
|
||||||
abstract class AbstractFirModuleBenchmark :
|
|
||||||
AbstractBenchmarkForGivenPath(
|
|
||||||
System.getProperty("user.dir") + "/compiler/fir",
|
|
||||||
true
|
|
||||||
)
|
|
||||||
|
|
||||||
open class LightTree2FirBenchmarkFirModule(override val generator: TreeGenerator = LightTree2FirGenerator()) :
|
|
||||||
AbstractFirModuleBenchmark()
|
|
||||||
|
|
||||||
open class Psi2FirBenchmarkFirModule(override val generator: TreeGenerator = Psi2FirGenerator()) :
|
|
||||||
AbstractFirModuleBenchmark()
|
|
||||||
-45
@@ -1,45 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
|
||||||
* that can be found in the license/LICENSE.txt file.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.fir.lightTree.benchmark.generators
|
|
||||||
|
|
||||||
import com.intellij.psi.impl.DebugUtil
|
|
||||||
import org.jetbrains.kotlin.fir.FirRenderer
|
|
||||||
import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderTestCase
|
|
||||||
import org.jetbrains.kotlin.fir.builder.StubFirScopeProvider
|
|
||||||
import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir
|
|
||||||
import org.jetbrains.kotlin.fir.session.FirSessionFactory
|
|
||||||
import org.openjdk.jmh.annotations.Scope
|
|
||||||
import org.openjdk.jmh.annotations.State
|
|
||||||
import java.io.File
|
|
||||||
|
|
||||||
@State(Scope.Benchmark)
|
|
||||||
open class LightTree2FirGenerator : TreeGenerator, AbstractRawFirBuilderTestCase() {
|
|
||||||
override fun generateBaseTree(text: String, file: File) {
|
|
||||||
val lightTreeConverter = LightTree2Fir(
|
|
||||||
session = FirSessionFactory.createEmptySession(),
|
|
||||||
scopeProvider = StubFirScopeProvider
|
|
||||||
)
|
|
||||||
val lightTree = lightTreeConverter.buildLightTree(text)
|
|
||||||
DebugUtil.lightTreeToString(lightTree, false)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun generateFir(text: String, file: File) {
|
|
||||||
val lightTreeConverter = LightTree2Fir(
|
|
||||||
session = FirSessionFactory.createEmptySession(),
|
|
||||||
scopeProvider = StubFirScopeProvider
|
|
||||||
)
|
|
||||||
val firFile = lightTreeConverter.buildFirFile(text, file.name, file.path)
|
|
||||||
StringBuilder().also { FirRenderer(it).visitFile(firFile) }.toString()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun setUp() {
|
|
||||||
super.setUp()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun tearDown() {
|
|
||||||
super.tearDown()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-38
@@ -1,38 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
|
||||||
* that can be found in the license/LICENSE.txt file.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.fir.lightTree.benchmark.generators
|
|
||||||
|
|
||||||
import com.intellij.openapi.util.io.FileUtil
|
|
||||||
import com.intellij.psi.impl.DebugUtil
|
|
||||||
import com.intellij.util.PathUtil
|
|
||||||
import org.jetbrains.kotlin.fir.FirRenderer
|
|
||||||
import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderTestCase
|
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
|
||||||
import org.openjdk.jmh.annotations.Scope
|
|
||||||
import org.openjdk.jmh.annotations.State
|
|
||||||
import java.io.File
|
|
||||||
|
|
||||||
@State(Scope.Benchmark)
|
|
||||||
open class Psi2FirGenerator : TreeGenerator, AbstractRawFirBuilderTestCase() {
|
|
||||||
override fun generateBaseTree(text: String, file: File) {
|
|
||||||
val ktFile = createPsiFile(FileUtil.getNameWithoutExtension(PathUtil.getFileName(file.path)), text) as KtFile
|
|
||||||
DebugUtil.psiTreeToString(ktFile, false)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun generateFir(text: String, file: File) {
|
|
||||||
val ktFile = createPsiFile(FileUtil.getNameWithoutExtension(PathUtil.getFileName(file.path)), text) as KtFile
|
|
||||||
val firFile = ktFile.toFirFile()
|
|
||||||
StringBuilder().also { FirRenderer(it).visitFile(firFile) }.toString()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun setUp() {
|
|
||||||
super.setUp()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun tearDown() {
|
|
||||||
super.tearDown()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-15
@@ -1,15 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
|
||||||
* that can be found in the license/LICENSE.txt file.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.fir.lightTree.benchmark.generators
|
|
||||||
|
|
||||||
import java.io.File
|
|
||||||
|
|
||||||
interface TreeGenerator {
|
|
||||||
fun generateBaseTree(text: String, file: File)
|
|
||||||
fun generateFir(text: String, file: File)
|
|
||||||
fun setUp()
|
|
||||||
fun tearDown()
|
|
||||||
}
|
|
||||||
-21
@@ -1,21 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
|
||||||
* that can be found in the license/LICENSE.txt file.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.fir.lightTree.benchmark.totalKotlin
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.lightTree.benchmark.*
|
|
||||||
import org.jetbrains.kotlin.fir.lightTree.benchmark.generators.LightTree2FirGenerator
|
|
||||||
import org.jetbrains.kotlin.fir.lightTree.benchmark.generators.Psi2FirGenerator
|
|
||||||
import org.jetbrains.kotlin.fir.lightTree.benchmark.generators.TreeGenerator
|
|
||||||
import org.openjdk.jmh.annotations.*
|
|
||||||
|
|
||||||
abstract class AbstractTotalKotlinBenchmark :
|
|
||||||
AbstractBenchmarkForGivenPath(System.getProperty("user.dir"))
|
|
||||||
|
|
||||||
open class LightTree2FirTotalKotlinBenchmark(override val generator: TreeGenerator = LightTree2FirGenerator()) :
|
|
||||||
AbstractTotalKotlinBenchmark()
|
|
||||||
|
|
||||||
open class Psi2FirTotalKotlinBenchmark(override val generator: TreeGenerator = Psi2FirGenerator()) :
|
|
||||||
AbstractTotalKotlinBenchmark()
|
|
||||||
Reference in New Issue
Block a user