From 3e4352b3684b4646a82eef4f2da66038531d821e Mon Sep 17 00:00:00 2001 From: Yang Song Date: Mon, 16 Apr 2018 12:13:59 -0700 Subject: Move toMillis(Duration) to Utils so that it can be reused. (#1114) * Add toMillis() method to TimeUtils. * Reuse toMillis() method in impl and exporters. * Add a note about overflow and precision loss. * Move toMillis() to Duration. --- api/src/main/java/io/opencensus/common/Duration.java | 15 +++++++++++++++ api/src/test/java/io/opencensus/common/DurationTest.java | 11 +++++++++++ 2 files changed, 26 insertions(+) (limited to 'api') diff --git a/api/src/main/java/io/opencensus/common/Duration.java b/api/src/main/java/io/opencensus/common/Duration.java index 1ee97191..57ca87fe 100644 --- a/api/src/main/java/io/opencensus/common/Duration.java +++ b/api/src/main/java/io/opencensus/common/Duration.java @@ -23,6 +23,7 @@ import static io.opencensus.common.TimeUtils.NANOS_PER_MILLI; import com.google.auto.value.AutoValue; import io.opencensus.internal.Utils; +import java.util.concurrent.TimeUnit; import javax.annotation.concurrent.Immutable; /** @@ -78,6 +79,20 @@ public abstract class Duration implements Comparable { return Duration.create(seconds, nanos); } + /** + * Converts a {@link Duration} to milliseconds. + * + *

Note that there could be overflow or loss of precision by making this conversion. See {@link + * TimeUnit#convert(long, TimeUnit)} for details. + * + * @param duration a {@code Duration}. + * @return the milliseconds representation of this {@code Duration}. + */ + public static long toMillis(Duration duration) { + return TimeUnit.SECONDS.toMillis(duration.getSeconds()) + + TimeUnit.NANOSECONDS.toMillis(duration.getNanos()); + } + /** * Returns the number of seconds in the {@code Duration}. * diff --git a/api/src/test/java/io/opencensus/common/DurationTest.java b/api/src/test/java/io/opencensus/common/DurationTest.java index 40682fc4..d46f2f7a 100644 --- a/api/src/test/java/io/opencensus/common/DurationTest.java +++ b/api/src/test/java/io/opencensus/common/DurationTest.java @@ -88,4 +88,15 @@ public class DurationTest { assertThat(Duration.create(-25, -42)).isNotEqualTo(Duration.create(-24, -42)); assertThat(Duration.create(-24, -43)).isNotEqualTo(Duration.create(-24, -42)); } + + @Test + public void toMillis() { + assertThat(Duration.toMillis(Duration.create(10, 0))).isEqualTo(10000L); + assertThat(Duration.toMillis(Duration.create(10, 1000))).isEqualTo(10000L); + assertThat(Duration.toMillis(Duration.create(0, (int) 1e6))).isEqualTo(1L); + assertThat(Duration.toMillis(Duration.create(0, 0))).isEqualTo(0L); + assertThat(Duration.toMillis(Duration.create(-10, 0))).isEqualTo(-10000L); + assertThat(Duration.toMillis(Duration.create(-10, -1000))).isEqualTo(-10000L); + assertThat(Duration.toMillis(Duration.create(0, -(int) 1e6))).isEqualTo(-1L); + } } -- cgit v1.2.3