fun repeatInTime()

in remote-robot/src/main/kotlin/com/intellij/remoterobot/utils/RepeatUtils.kt [88:110]


fun repeatInTime(
    duration: Duration,
    interval: Duration = Duration.ofMillis(500),
    isLogEnabled: Boolean = false,
    condition: () -> Boolean
): Boolean {
    val endTime = System.currentTimeMillis() + duration.toMillis()
    var now = System.currentTimeMillis()
    while (now < endTime) {
        val isHappen = if (isLogEnabled) {
            step("waiting(${endTime - now}ms left)") { return@step condition() }
        } else {
            condition()
        }
        if (isHappen)
            return true
        else {
            Thread.sleep(interval.toMillis())
        }
        now = System.currentTimeMillis()
    }
    return false
}