diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/LocalMetricsEvent.kt b/app/src/main/java/org/thoughtcrime/securesms/database/model/LocalMetricsEvent.kt index b5d2f2a1cf..e540cabff1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/LocalMetricsEvent.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/LocalMetricsEvent.kt @@ -1,6 +1,9 @@ package org.thoughtcrime.securesms.database.model +import org.signal.core.util.roundedString import java.util.concurrent.TimeUnit +import kotlin.time.Duration.Companion.nanoseconds +import kotlin.time.DurationUnit data class LocalMetricsEvent( val createdAt: Long, @@ -10,6 +13,15 @@ data class LocalMetricsEvent( val timeunit: TimeUnit ) { override fun toString(): String { - return "[$eventName] total: ${splits.sumOf { timeunit.convert(it.duration, TimeUnit.NANOSECONDS) }} | ${splits.map { it.toString() }.joinToString(", ")}" + return "[$eventName] total: ${splits.sumOf { it.duration }.fractionalMillis(timeunit)} | ${splits.map { it.toString() }.joinToString(", ")}" + } + + private fun Long.fractionalMillis(timeunit: TimeUnit): String { + val places = when (timeunit) { + TimeUnit.MICROSECONDS -> 3 + TimeUnit.NANOSECONDS -> 6 + else -> 0 + } + return this.nanoseconds.toDouble(DurationUnit.MILLISECONDS).roundedString(places) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/LocalMetricsSplit.kt b/app/src/main/java/org/thoughtcrime/securesms/database/model/LocalMetricsSplit.kt index f31494510c..3214a7a4b8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/LocalMetricsSplit.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/LocalMetricsSplit.kt @@ -1,6 +1,9 @@ package org.thoughtcrime.securesms.database.model +import org.signal.core.util.roundedString import java.util.concurrent.TimeUnit +import kotlin.time.Duration.Companion.nanoseconds +import kotlin.time.DurationUnit data class LocalMetricsSplit( val name: String, @@ -8,6 +11,15 @@ data class LocalMetricsSplit( val timeunit: TimeUnit = TimeUnit.MILLISECONDS ) { override fun toString(): String { - return "$name: ${timeunit.convert(duration, TimeUnit.NANOSECONDS)}" + return "$name: ${duration.fractionalMillis(timeunit)}" + } + + private fun Long.fractionalMillis(timeunit: TimeUnit): String { + val places = when (timeunit) { + TimeUnit.MICROSECONDS -> 3 + TimeUnit.NANOSECONDS -> 6 + else -> 0 + } + return this.nanoseconds.toDouble(DurationUnit.MILLISECONDS).roundedString(places) } }