From 49a4ec7f926ce7f6954228dc4899cabdda639328 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Mon, 11 Jan 2021 15:53:32 +0100 Subject: [PATCH] FIR IDE: add perf tests for completion --- ...ProjectPerformanceComparisonFirImplTest.kt | 5 +- ...rojectPerformanceComparisonFE10ImplTest.kt | 6 +- ...ctWholeProjectPerformanceComparisonTest.kt | 55 +++++++++++++++++-- 3 files changed, 54 insertions(+), 12 deletions(-) diff --git a/idea/idea-fir-performance-tests/tests/org/jetbrains/kotlin/idea/perf/WholeProjectPerformanceComparisonFirImplTest.kt b/idea/idea-fir-performance-tests/tests/org/jetbrains/kotlin/idea/perf/WholeProjectPerformanceComparisonFirImplTest.kt index 608f152fc3c..b37ff93041e 100644 --- a/idea/idea-fir-performance-tests/tests/org/jetbrains/kotlin/idea/perf/WholeProjectPerformanceComparisonFirImplTest.kt +++ b/idea/idea-fir-performance-tests/tests/org/jetbrains/kotlin/idea/perf/WholeProjectPerformanceComparisonFirImplTest.kt @@ -11,9 +11,8 @@ class WholeProjectPerformanceComparisonFirImplTest : AbstractWholeProjectPerform override val testPrefix: String = "FIR" override fun getWarmUpProject(): WarmUpProject = warmUpProject - fun testRustPlugin() { - doTestRustPlugin() - } + fun testRustPluginHighlighting() = doTestRustPluginHighlighting() + fun testRustPluginCompletion() = doTestRustPluginCompletion() companion object { private val hwStats: Stats = Stats("FIR warmup project") diff --git a/idea/performanceTests/test/org/jetbrains/kotlin/idea/perf/WholeProjectPerformanceComparisonFE10ImplTest.kt b/idea/performanceTests/test/org/jetbrains/kotlin/idea/perf/WholeProjectPerformanceComparisonFE10ImplTest.kt index 1d68f1b4848..9a80594f366 100644 --- a/idea/performanceTests/test/org/jetbrains/kotlin/idea/perf/WholeProjectPerformanceComparisonFE10ImplTest.kt +++ b/idea/performanceTests/test/org/jetbrains/kotlin/idea/perf/WholeProjectPerformanceComparisonFE10ImplTest.kt @@ -11,9 +11,9 @@ class WholeProjectPerformanceComparisonFE10ImplTest : AbstractWholeProjectPerfor override val testPrefix: String = "FE10" override fun getWarmUpProject(): WarmUpProject = warmUpProject - fun testRustPlugin() { - doTestRustPlugin() - } + fun testRustPluginHighlighting() = doTestRustPluginHighlighting() + fun testRustPluginCompletion() = doTestRustPluginCompletion() + companion object { private val hwStats: Stats = Stats("FE10 warmup project") diff --git a/idea/performanceTests/test/org/jetbrains/kotlin/idea/perf/common/AbstractWholeProjectPerformanceComparisonTest.kt b/idea/performanceTests/test/org/jetbrains/kotlin/idea/perf/common/AbstractWholeProjectPerformanceComparisonTest.kt index f74722a447c..d6f9e2780e2 100644 --- a/idea/performanceTests/test/org/jetbrains/kotlin/idea/perf/common/AbstractWholeProjectPerformanceComparisonTest.kt +++ b/idea/performanceTests/test/org/jetbrains/kotlin/idea/perf/common/AbstractWholeProjectPerformanceComparisonTest.kt @@ -19,18 +19,56 @@ abstract class AbstractWholeProjectPerformanceComparisonTest : AbstractPerforman getWarmUpProject().warmUp(this) } - protected fun doTestRustPlugin() { - TeamCity.suite("$testPrefix Rust plugin") { - Stats("$testPrefix Rust plugin").use { - perfOpenRustPluginProject(it) + protected fun doTestRustPluginHighlighting() { + TeamCity.suite("$testPrefix highlighting in Rust plugin") { + Stats("$testPrefix highlighting in Rust plugin").use { stat -> + perfOpenRustPluginProject(stat) val filesToHighlight = arrayOf( "src/main/kotlin/org/rust/ide/inspections/RsExternalLinterInspection.kt", "src/main/kotlin/org/rust/ide/injected/RsDoctestLanguageInjector.kt", - "src/main/kotlin/org/rust/cargo/runconfig/filters/RegexpFileLinkFilter.kt", + FILE_NAMES.REGEXP_FILE_LINK_FILTER, + "src/main/kotlin/org/rust/cargo/util/CargoOptions.kt", + "src/main/kotlin/org/rust/lang/core/macros/MacroExpansionManager.kt", + FILE_NAMES.NAME_RESOLUTION ) - filesToHighlight.forEach { file -> perfHighlightFile(file, stats = it) } + filesToHighlight.forEach { file -> perfHighlightFileEmptyProfile(file, stats = stat) } + } + } + } + + protected fun doTestRustPluginCompletion() { + TeamCity.suite("$testPrefix completion in Rust plugin") { + Stats("$testPrefix completion in Rust plugin").use { stat -> + perfOpenRustPluginProject(stat) + + perfTypeAndAutocomplete( + stat, + fileName = FILE_NAMES.REGEXP_FILE_LINK_FILTER, + marker = "fun applyFilter(line: String, entireLength: Int): Filter.Result? {", + insertString = "val a = l", + lookupElements = listOf("line"), + note = "in-method completion" + ) + + perfTypeAndAutocomplete( + stat, + fileName = FILE_NAMES.NAME_RESOLUTION, + marker = "private data class ImplicitStdlibCrate(val name: String, val crateRoot: RsFile)", + insertString = "\nval a = ", + lookupElements = listOf("processAssocTypeVariants"), + note = "top-level completion" + ) + + perfTypeAndAutocomplete( + stat, + fileName = FILE_NAMES.NAME_RESOLUTION, + marker = "testAssert { cameFrom.context == scope }", + insertString = "\nval a = s", + lookupElements = listOf("scope"), + note = "in big method in big file completion" + ) } } } @@ -45,5 +83,10 @@ abstract class AbstractWholeProjectPerformanceComparisonTest : AbstractPerforman fast = true ) } + + private object FILE_NAMES { + const val NAME_RESOLUTION = "src/main/kotlin/org/rust/lang/core/resolve/NameResolution.kt" + const val REGEXP_FILE_LINK_FILTER = "src/main/kotlin/org/rust/cargo/runconfig/filters/RegexpFileLinkFilter.kt" + } }