Timing bugs

Gary Adams gary.adams at oracle.com
Wed Nov 9 19:21:33 UTC 2011


  Here's an update diff for the elapsed time check.
    - added current CR# to @bug tag
    - moved capture of start time to after creation of the latches
       so only the schedule*() and the await() calls are included
       in the elapsed time check.

jdk/test/java/util/Timer/Args.java

  /*
   * @test
- * @bug 6571655 6571881 6574585 6571297
+ * @bug 6571655 6571881 6574585 6571297 6731620
   * @summary Test various args to task scheduling methods
   */

@@ -92,19 +92,21 @@
                 new F(){void f(){ t.scheduleAtFixedRate(x, (Date)null, 42); }}
                 );

-        final long start = System.currentTimeMillis();
-        final Date past = new Date(start - 10500);
          final CountDownLatch y1 = new CountDownLatch(1);
          final CountDownLatch y2 = new CountDownLatch(1);
          final CountDownLatch y3 = new CountDownLatch(11);
+        final long start = System.currentTimeMillis();
+        final Date past = new Date(start - 10500);
+    final long elapsed;
          schedule(           t, counter(y1), past);
          schedule(           t, counter(y2), past, 1000);
          scheduleAtFixedRate(t, counter(y3), past, 1000);
          y3.await();
          y1.await();
          y2.await();
-        System.out.printf("elapsed=%d%n", System.currentTimeMillis() - start);
-        check(System.currentTimeMillis() - start < 500);
+    elapsed = System.currentTimeMillis() - start;
+        System.out.printf("elapsed=%d%n", elapsed);
+        check(elapsed < 500);

          t.cancel();




On 11/ 4/11 09:36 AM, Gary Adams wrote:
>  I've started to look at timing related bugs that have been open
> for a while, but have not had sufficient priority to make it to the
> top of the list of bugs to be fixed. Thought I'd start with some
> low hanging fruit with simple bug fixes.
>
> 6731620: TEST_BUG: java/util/Timer/Args.java is too optimistic about the 
> execution time of System.out.printf
>
> This seems like a simply problem to avoid two calls to get the current time
> and to eliminated the time to process the print statement
> from the evaluation of the test elapsed time.
>
> Replacing this sequence ;
>
>         System.out.printf("elapsed=%d%n", System.currentTimeMillis() - start);
>         check(System.currentTimeMillis() - start < 500);
>
> with
>
>         elapsed = System.currentTimeMillis() - start;
>         System.out.printf("elapsed=%d%n", elapsed);
>         check(elapsed < 500);
>
> I plan to test the fix on a 300MHz linux/arm device.
> I'll provide a proper webrev as soon as I have author rights
> confirmed. I'm looking for reviewer and a committer,
> once I get the fix tested locally.
>
> Thanks
>   Gary Adams
>




More information about the core-libs-dev mailing list