Skip to content

Commit

Permalink
Fix Time API 馃帀
Browse files Browse the repository at this point in the history
  • Loading branch information
arnaudgiuliani committed Apr 25, 2022
1 parent 5e6ac7c commit 0a10adc
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 10 deletions.
30 changes: 20 additions & 10 deletions core/koin-core/src/commonMain/kotlin/org/koin/core/time/Measure.kt
Original file line number Diff line number Diff line change
Expand Up @@ -15,28 +15,38 @@
*/
package org.koin.core.time

import kotlin.time.DurationUnit
import kotlin.time.ExperimentalTime
import kotlin.time.measureTime
import kotlin.time.measureTimedValue
import org.koin.core.annotation.KoinInternalApi
import org.koin.mp.KoinPlatformTimeTools


/**
* Measure functions
*
* @author Arnaud Giuliani
*/

@OptIn(ExperimentalTime::class)
@OptIn(KoinInternalApi::class)
fun measureDuration(code: () -> Unit): Double {
return measureTime(code).toDouble(DurationUnit.MILLISECONDS)
return measureTime(code)
}

/**
* Measure code execution and get result
*/
@OptIn(ExperimentalTime::class)
@OptIn(KoinInternalApi::class)
fun <T> measureDurationForResult(code: () -> T): Pair<T, Double> {
val result = measureTimedValue(code)
return Pair(result.value, result.duration.toDouble(DurationUnit.MILLISECONDS))
val (value,duration) = measureTimedValue(code)
return Pair(value, duration)
}

@KoinInternalApi
fun measureTime(code: () -> Unit): Double{
return measureTimedValue(code).second
}

@KoinInternalApi
fun <T> measureTimedValue(code: () -> T): Pair<T,Double>{
val start = KoinPlatformTimeTools.getTimeInNanoSeconds()
val value = code()
val end = KoinPlatformTimeTools.getTimeInNanoSeconds()
return Pair(value,(end-start) / 1_000_000.0)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package org.koin.mp

expect object KoinPlatformTimeTools {
fun getTimeInNanoSeconds() : Long
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package org.koin.mp

import kotlin.math.roundToLong

actual object KoinPlatformTimeTools {
actual fun getTimeInNanoSeconds() : Long {
return (js("self.performance.now()") as Double * 1_000_000).roundToLong()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.koin.mp

actual object KoinPlatformTimeTools {
actual fun getTimeInNanoSeconds() : Long {
return System.nanoTime()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package org.koin.mp

import kotlin.system.getTimeNanos

actual object KoinPlatformTimeTools {
actual fun getTimeInNanoSeconds() : Long {
return getTimeNanos()
}
}

0 comments on commit 0a10adc

Please sign in to comment.