Implements System.nanoTime with performance.now().
Change-Id: I70164d6f1214ab311dd0f94121140943b1c2dc1f
diff --git a/user/super/com/google/gwt/emul/java/lang/System.java b/user/super/com/google/gwt/emul/java/lang/System.java
index 5767122..f1aaa83 100644
--- a/user/super/com/google/gwt/emul/java/lang/System.java
+++ b/user/super/com/google/gwt/emul/java/lang/System.java
@@ -34,6 +34,8 @@
*/
public final class System {
+ private static final int MILLIS_TO_NANOS = 1_000_000;
+
/**
* Does nothing in web mode. To get output in web mode, subclass PrintStream
* and call {@link #setErr(PrintStream)}.
@@ -96,6 +98,10 @@
return (long) JsUtils.getTime();
}
+ public static long nanoTime() {
+ return (long) (JsUtils.performanceNow() * MILLIS_TO_NANOS);
+ }
+
/**
* Has no effect; just here for source compatibility.
*
diff --git a/user/super/com/google/gwt/emul/javaemul/internal/JsUtils.java b/user/super/com/google/gwt/emul/javaemul/internal/JsUtils.java
index 160102c..077e50c 100644
--- a/user/super/com/google/gwt/emul/javaemul/internal/JsUtils.java
+++ b/user/super/com/google/gwt/emul/javaemul/internal/JsUtils.java
@@ -27,6 +27,9 @@
@JsMethod(namespace = "<window>", name = "Date.now")
public static native double getTime();
+ @JsMethod(namespace = "<window>", name = "performance.now")
+ public static native double performanceNow();
+
@JsMethod(namespace = "<window>")
public static native int parseInt(String s, int radix);
diff --git a/user/test/com/google/gwt/emultest/java/lang/SystemTest.java b/user/test/com/google/gwt/emultest/java/lang/SystemTest.java
index 090424d..9e3c33a 100644
--- a/user/test/com/google/gwt/emultest/java/lang/SystemTest.java
+++ b/user/test/com/google/gwt/emultest/java/lang/SystemTest.java
@@ -18,6 +18,7 @@
import com.google.gwt.junit.client.GWTTestCase;
import com.google.gwt.testing.TestUtils;
+import java.sql.Date;
import java.util.Arrays;
/**
@@ -323,4 +324,13 @@
// Note that default is not a String literal.
assertEquals("default", System.getProperty("otherNonExistent", someConf));
}
+
+ public void testNanoTime() {
+ assertTrue(System.nanoTime() > 0);
+ }
+
+ public void testCurrentTimeMillis() {
+ assertTrue(System.currentTimeMillis() > Date.parse("1-1-2021"));
+ }
}
+