From 3b626ea97ce99a5408a656da6d96d861c89a9b21 Mon Sep 17 00:00:00 2001 From: Dmitriy Dolovov Date: Mon, 7 Aug 2023 23:12:42 +0200 Subject: [PATCH] [Commonizer] Replace ResettableClockMark by TimeSource.Monotonic --- .../kotlin/commonizer/utils/ProgressLogger.kt | 23 ++++++-- .../commonizer/utils/ResettableClockMark.kt | 55 ------------------- 2 files changed, 19 insertions(+), 59 deletions(-) delete mode 100644 native/commonizer/src/org/jetbrains/kotlin/commonizer/utils/ResettableClockMark.kt diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/utils/ProgressLogger.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/utils/ProgressLogger.kt index 998a12ba835..770d2645c57 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/utils/ProgressLogger.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/utils/ProgressLogger.kt @@ -7,23 +7,38 @@ package org.jetbrains.kotlin.commonizer.utils import org.jetbrains.kotlin.commonizer.CommonizerTarget import org.jetbrains.kotlin.util.Logger +import kotlin.time.Duration +import kotlin.time.TimeSource private const val ansiReset = "\u001B[0m" private const val ansiTimeColor = "\u001B[36m" private const val ansiTargetColor = "\u001B[32m" internal inline fun Logger?.progress(message: String, action: () -> T): T { - val clock = ResettableClockMark() - clock.reset() + if (this == null) + return action() + + val timeMark = TimeSource.Monotonic.markNow() try { return action() } finally { - this?.log("$message ${ansiTimeColor}in ${clock.elapsedSinceLast()}$ansiReset") + val duration = timeMark.elapsedNow().toPrettyString() + log("$message ${ansiTimeColor}in $duration$ansiReset") } } internal inline fun Logger?.progress( - target: CommonizerTarget, message: String, action: () -> T + target: CommonizerTarget, message: String, action: () -> T, ): T { return progress("[$ansiTargetColor$target$ansiReset]: $message", action) } + +private fun Duration.toPrettyString() = buildString { + toComponents { hours, minutes, seconds, nanos -> + // human-friendly formatted duration + if (hours > 0) append(hours).append("h ") + if (minutes > 0 || isNotEmpty()) append(minutes).append("m ") + if (seconds > 0 || isNotEmpty()) append(seconds).append("s ") + append(nanos / 1000_000).append("ms") + } +} diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/utils/ResettableClockMark.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/utils/ResettableClockMark.kt deleted file mode 100644 index d9686d11fbe..00000000000 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/utils/ResettableClockMark.kt +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. - * 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.commonizer.utils - -import java.lang.System.currentTimeMillis - -internal class ResettableClockMark { - internal class Period(val start: Long, val end: Long) { - override fun toString(): String { - var remainder = end - start - - val millis = remainder % 1000 - remainder /= 1000 - - val seconds = remainder % 60 - remainder /= 60 - - val minutes = remainder % 60 - - val hours = remainder / 60 - - // human-friendly formatted duration - return buildString { - if (hours > 0) append(hours).append("h ") - if (minutes > 0 || isNotEmpty()) append(minutes).append("m ") - if (seconds > 0 || isNotEmpty()) append(seconds).append("s ") - append(millis).append("ms") - } - } - } - - private var startMark: Long = 0 - private var lastMark: Long = 0 - - fun elapsedSinceLast(): Period = Period(lastMark, currentTimeMillis()).also { lastMark = it.end } - fun elapsedSinceStart(): Period = Period(startMark, currentTimeMillis()) - - fun reset() { - startMark = currentTimeMillis() - lastMark = startMark - } -} - -// TODO: this is how it should be when Kotlin Time will become non-experimental -//@ExperimentalTime -//internal class ResettableClockMark { -// private val startMark = MonoClock.markNow() -// private var lastMark = startMark -// -// fun elapsedSinceLast(): Duration = lastMark.elapsedNow().also { lastMark = lastMark.plus(it) } -// fun elapsedSinceStart(): Duration = startMark.elapsedNow() -//}