diff --git a/platform/syntax/syntax-api/src/com/intellij/platform/syntax/impl/builder/ParsingTreeBuilder.kt b/platform/syntax/syntax-api/src/com/intellij/platform/syntax/impl/builder/ParsingTreeBuilder.kt index 228d14f8be8e..9f81448595e1 100644 --- a/platform/syntax/syntax-api/src/com/intellij/platform/syntax/impl/builder/ParsingTreeBuilder.kt +++ b/platform/syntax/syntax-api/src/com/intellij/platform/syntax/impl/builder/ParsingTreeBuilder.kt @@ -17,6 +17,7 @@ import org.jetbrains.annotations.Nls import org.jetbrains.annotations.NonNls import kotlin.math.abs import kotlin.math.max +import kotlin.time.measureTimedValue internal class ParsingTreeBuilder( val lexer: Lexer, @@ -534,11 +535,10 @@ private fun performLexing( return LexingResult(cachedLexemes, 0) } // todo do we need to cover a raw TokenList? - - val startTime = System.nanoTime() - val sequence = performLexing(text, lexer, cancellationProvider, logger) as TokenSequence - val endTime = System.nanoTime() - return LexingResult(sequence, endTime - startTime) + val (sequence, duration) = measureTimedValue { + performLexing(text, lexer, cancellationProvider, logger) as TokenSequence + } + return LexingResult(sequence, duration.inWholeNanoseconds) } private data class LexingResult(val tokens: TokenSequence, val lexingTimeNs: Long) diff --git a/platform/syntax/syntax-api/src/com/intellij/platform/syntax/lexer/TokenSequence.kt b/platform/syntax/syntax-api/src/com/intellij/platform/syntax/lexer/TokenSequence.kt index 45a28e082b2a..01b96ef5db35 100644 --- a/platform/syntax/syntax-api/src/com/intellij/platform/syntax/lexer/TokenSequence.kt +++ b/platform/syntax/syntax-api/src/com/intellij/platform/syntax/lexer/TokenSequence.kt @@ -7,6 +7,7 @@ import com.intellij.platform.syntax.Logger import org.jetbrains.annotations.NonNls import kotlin.math.max import kotlin.math.min +import kotlin.time.measureTimedValue internal class TokenSequence( internal val lexStarts: IntArray, @@ -67,9 +68,10 @@ internal class TokenListLexerImpl( return } - val start = System.currentTimeMillis() - start(buffer, startOffset, endOffset, initialState) - val startDuration = System.currentTimeMillis() - start + val (_, duration) = measureTimedValue { + start(buffer, startOffset, endOffset, initialState) + } + val startDuration = duration.inWholeNanoseconds if (startDuration > LEXER_START_THRESHOLD) { logger.debug("Starting lexer took: $startDuration; at $startOffset - $endOffset; state: $initialState; text: ${buffer.shortenTextWithEllipsis(1024, 500)}") }