adding performance logger with chaining

This commit is contained in:
Adam Brown 2022-03-18 22:28:33 +00:00
parent 7cdd8e2b96
commit 9c6ba3d352

View File

@ -21,7 +21,30 @@ fun MatrixLogger.matrixLog(message: Any) {
matrixLog(tag = MatrixLogTag.MATRIX, message = message)
}
suspend fun <T> MatrixLogger.logP(area: String, block: suspend () -> T): T {
fun MatrixLogger.logP(area: String): PerfTracker {
val start = System.currentTimeMillis()
var lastCheckpoint = start
return object : PerfTracker {
override fun checkpoint(label: String) {
val now = System.currentTimeMillis()
val timeTaken = (now - lastCheckpoint)
lastCheckpoint = now
matrixLog(MatrixLogTag.PERF, "$area - $label: took $timeTaken ms")
}
override fun stop() {
val timeTaken = System.currentTimeMillis() - start
matrixLog(MatrixLogTag.PERF, "$area: took $timeTaken ms")
}
}
}
interface PerfTracker {
fun checkpoint(label: String)
fun stop()
}
inline fun <T> MatrixLogger.logP(area: String, block: () -> T): T {
val start = System.currentTimeMillis()
return block().also {
val timeTaken = System.currentTimeMillis() - start