Thread_Interrupt.java (Looper.calibrate): New.
authorAndrew Haley <aph@redhat.com>
Fri, 22 Mar 2002 11:18:03 +0000 (11:18 +0000)
committerAndrew Haley <aph@gcc.gnu.org>
Fri, 22 Mar 2002 11:18:03 +0000 (11:18 +0000)
2002-03-21  Andrew Haley  <aph@redhat.com>

* libjava.lang/Thread_Interrupt.java (Looper.calibrate): New.
(yields): New.

From-SVN: r51169

libjava/testsuite/ChangeLog
libjava/testsuite/libjava.lang/Thread_Interrupt.java

index ab77ce9be1b40a3cb1e8e4923da02af0e9bd0692..67e325ce35cd009d2939d31f58781976e90e3f75 100644 (file)
@@ -1,3 +1,8 @@
+2002-03-21  Andrew Haley  <aph@redhat.com>
+
+       * libjava.lang/Thread_Interrupt.java (Looper.calibrate): New.
+       (yields): New.
+
 2002-03-18  Tom Tromey  <tromey@redhat.com>
 
        * libjava.jni/jni.exp (gcj_jni_test_one): Find libstdc++ in build
index 5412549e713a54b9754f01fd31deb731c8c440de..cb569c827c4aa8be028b19cdced4b9125b7a18fb 100644 (file)
@@ -44,12 +44,33 @@ class Sleeper extends Thread
 
 class Looper extends Thread
 {
+  // Return the number of Thread.yield()s we can do in 500ms.
+  static long calibrate ()
+  {
+    long i = 1;
+
+    for (int tries = 0; tries < 40; tries++)
+      {
+       long t = System.currentTimeMillis();
+       for (long n = 0; n < i; n++)
+         Thread.yield();
+       long t_prime = System.currentTimeMillis();
+       if (t_prime - t > 500)
+         return i;
+       i *= 2;
+      }
+    // We have no system clock.  Give up.
+    throw new RuntimeException ("We have no system clock.");
+  }
+
+  static long yields = calibrate ();
+
   public void run()
   {
     System.out.println ("Busy waiting");
 
     int count = 0;
-    for (int i=0; i < 1000000; i++)
+    for (long i=0; i < yields; i++)
       {
         Thread.yield();
        count += 5;