Fix for testPlayVideo timeout (thanks to Jason Bayer for CountDownLatch).
Change-Id: I5ac61daf583f7a087c4b28b04c6167a1a7b98ea4
diff --git a/tests/tests/media/src/android/media/cts/MediaPlayerTest.java b/tests/tests/media/src/android/media/cts/MediaPlayerTest.java
index d18d684..5ab9b6d 100644
--- a/tests/tests/media/src/android/media/cts/MediaPlayerTest.java
+++ b/tests/tests/media/src/android/media/cts/MediaPlayerTest.java
@@ -45,6 +45,8 @@
import java.io.File;
import java.io.FileDescriptor;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
@TestTargetClass(MediaPlayer.class)
public class MediaPlayerTest extends ActivityInstrumentationTestCase2<MediaStubActivity> {
@@ -63,8 +65,8 @@
private Context mContext;
private Resources mResources;
private CtsTestServer mServer;
- private static Object sVideoSizeChanged;
- private static Object sLock;
+ private CountDownLatch mVideoSizeChanged = new CountDownLatch(1);
+ private CountDownLatch mLock = new CountDownLatch(1);
private static Looper sLooper = null;
private static final int WAIT_FOR_COMMAND_TO_COMPLETE = 60000; //1 min max.
@@ -77,16 +79,6 @@
*/
private MediaPlayer mMediaPlayer = new MediaPlayer();
- static MediaPlayer.OnVideoSizeChangedListener mOnVideoSizeChangedListener =
- new MediaPlayer.OnVideoSizeChangedListener() {
- public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
- synchronized (sVideoSizeChanged) {
- Log.v(TAG, "sizechanged notification received ...");
- sVideoSizeChanged.notify();
- }
- }
- };
-
private static class Monitor {
private boolean signalled;
@@ -310,7 +302,7 @@
* Initializes the message looper so that the mediaPlayer object can
* receive the callback messages.
*/
- private static void initializeMessageLooper() {
+ private void initializeMessageLooper() {
new Thread() {
@Override
public void run() {
@@ -319,9 +311,7 @@
// Save the looper so that we can terminate this thread
// after we are done with it.
sLooper = Looper.myLooper();
- synchronized (sLock) {
- sLock.notify();
- }
+ mLock.countDown();
Looper.loop(); // Blocks forever until Looper.quit() is called.
Log.v(TAG, "initializeMessageLooper: quit.");
}
@@ -342,38 +332,36 @@
final float rightVolume = 0.5f;
final int resid = R.raw.testvideo;
- sLock = new Object();
- sVideoSizeChanged = new Object();
- MediaPlayer mp = new MediaPlayer();
+ mMediaPlayer.setOnVideoSizeChangedListener(new MediaPlayer.OnVideoSizeChangedListener() {
+ public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
+ mVideoSizeChanged.countDown();
+ }
+ });
AssetFileDescriptor afd = mResources.openRawResourceFd(resid);
- mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
+ mMediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
afd.close();
- mp.setDisplay(getActivity().getSurfaceHolder());
- mp.setScreenOnWhilePlaying(true);
- mp.prepare();
+ mMediaPlayer.setDisplay(getActivity().getSurfaceHolder());
+ mMediaPlayer.setScreenOnWhilePlaying(true);
+ mMediaPlayer.prepare();
int videoWidth = 0;
int videoHeight = 0;
- synchronized (sLock) {
- initializeMessageLooper();
- try {
- sLock.wait(WAIT_FOR_COMMAND_TO_COMPLETE);
- } catch(Exception e) {
- Log.v(TAG, "looper was interrupted.");
- return;
- }
- }
+ initializeMessageLooper();
try {
- mp.setOnVideoSizeChangedListener(mOnVideoSizeChangedListener);
- synchronized (sVideoSizeChanged) {
- try {
- sVideoSizeChanged.wait(WAIT_FOR_COMMAND_TO_COMPLETE);
- } catch (Exception e) {
- Log.v(TAG, "wait was interrupted");
- }
+ mLock.await(WAIT_FOR_COMMAND_TO_COMPLETE, TimeUnit.MILLISECONDS);
+ } catch(Exception e) {
+ Log.v(TAG, "looper was interrupted.");
+ return;
+ }
+
+ try {
+ try {
+ mVideoSizeChanged.await(WAIT_FOR_COMMAND_TO_COMPLETE, TimeUnit.MILLISECONDS);
+ } catch (InterruptedException e) {
+ Log.v(TAG, "wait was interrupted");
}
- videoWidth = mp.getVideoWidth();
- videoHeight = mp.getVideoHeight();
+ videoWidth = mMediaPlayer.getVideoWidth();
+ videoHeight = mMediaPlayer.getVideoHeight();
terminateMessageLooper();
} catch (Exception e) {
Log.e(TAG, e.getMessage());
@@ -381,15 +369,15 @@
assertEquals(expectedVideoWidth, videoWidth);
assertEquals(expectedVideoHeight, videoHeight);
- mp.start();
- mp.setVolume(leftVolume, rightVolume);
+ mMediaPlayer.start();
+ mMediaPlayer.setVolume(leftVolume, rightVolume);
// waiting to complete
- while (mp.isPlaying()) {
+ while (mMediaPlayer.isPlaying()) {
Thread.sleep(SLEEP_TIME);
}
- mp.release();
+ mMediaPlayer.release();
}
@TestTargets({