6574989: TEST_BUG: javax/sound/sampled/Clip/bug5070081.java fails sometimes

Reviewed-by: prr
This commit is contained in:
Sergey Bylokhov 2017-03-23 17:50:10 +03:00
parent 72a1479c9b
commit abcdf3cc68

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -21,6 +21,8 @@
* questions.
*/
import java.util.concurrent.TimeUnit;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
@ -56,18 +58,22 @@ public class bug5070081 {
clip.start(); // start playing
Thread.sleep(1000); // wait a sec
long time1 = System.currentTimeMillis();
long time1 = currentTimeMillis();
long pos1 = clip.getFramePosition(); // store the position
System.out.println(" Position before stop: " + pos1);
clip.stop(); // and then stop
long pos2 = clip.getFramePosition(); // 2nd try
long time2 = System.currentTimeMillis();
long time2 = currentTimeMillis();
System.out.println(" Position before stop: " + pos1);
System.out.println(" Position after stop: " + pos2);
System.out.println(" d(time): " + Math.abs(time2-time1) + " ms;"
+ "d(clip pos): " + Math.abs(pos2 - pos1) + " ms.");
long timeDiff = Math.abs(time2 - time1);
// sample rate is 22050 per second, so 22.05 per ms
long posDiff = (long) (Math.abs(pos2 - pos1) / 22.05);
System.out.println(" d(time): " + timeDiff + " ms;"
+ "d(clip pos time): " + posDiff + " ms.");
long nDerivation = Math.abs(pos2 - pos1) - Math.abs(time2-time1);
long nDerivation = posDiff - timeDiff;
// add 50 ms for deviation (delay for stopping and errors due timer precision)
if (nDerivation > 50) {
System.out.println(" ERROR(1): The deviation is too much: " + nDerivation + " ms");
@ -104,4 +110,8 @@ public class bug5070081 {
System.out.println("Test passed sucessfully");
}
private static long currentTimeMillis() {
return TimeUnit.NANOSECONDS.toMillis(System.nanoTime());
}
}