diff --git a/plugins/performanceTesting/core/src/com/jetbrains/performancePlugin/commands/WaitForFinishedCodeAnalysis.kt b/plugins/performanceTesting/core/src/com/jetbrains/performancePlugin/commands/WaitForFinishedCodeAnalysis.kt index cca8ead3f262..48098ab5f448 100644 --- a/plugins/performanceTesting/core/src/com/jetbrains/performancePlugin/commands/WaitForFinishedCodeAnalysis.kt +++ b/plugins/performanceTesting/core/src/com/jetbrains/performancePlugin/commands/WaitForFinishedCodeAnalysis.kt @@ -19,9 +19,12 @@ import com.intellij.openapi.project.DumbService import com.intellij.openapi.project.Project import com.intellij.openapi.ui.playback.PlaybackContext import com.intellij.openapi.vfs.VirtualFile +import com.intellij.platform.ide.diagnostic.startUpPerformanceReporter.FUSProjectHotStartUpMeasurerService import com.intellij.util.concurrency.annotations.RequiresReadLock import com.intellij.util.ui.UIUtil import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.delay import kotlinx.coroutines.launch import java.time.Duration import java.util.concurrent.ConcurrentHashMap @@ -34,6 +37,20 @@ class WaitForFinishedCodeAnalysis(text: String, line: Int) : PerformanceCommandC } override suspend fun doExecute(context: PlaybackContext) { + val checkingJob = coroutineScope { + launch { + while (true) { + @Suppress("TestOnlyProblems") + if (!service().isHandlingFinished()) { + delay(500) + } + else { + return@launch + } + } + } + } + checkingJob.join() context.project.service().waitAnalysisToFinish() }