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"));
+  }
 }
+