| Index: webrtc/api/androidtests/src/org/webrtc/SurfaceTextureHelperTest.java
|
| diff --git a/webrtc/api/androidtests/src/org/webrtc/SurfaceTextureHelperTest.java b/webrtc/api/androidtests/src/org/webrtc/SurfaceTextureHelperTest.java
|
| index 8343772c1c98d0c75debe70226dae6fb43408517..84d4571f88fb157b62404accd806a29068ac2b61 100644
|
| --- a/webrtc/api/androidtests/src/org/webrtc/SurfaceTextureHelperTest.java
|
| +++ b/webrtc/api/androidtests/src/org/webrtc/SurfaceTextureHelperTest.java
|
| @@ -273,15 +273,12 @@ public final class SurfaceTextureHelperTest extends ActivityTestCase {
|
| // Helper method to call stopListening() on correct thread.
|
| private static void stopListeningOnHandlerThread(final SurfaceTextureHelper surfaceTextureHelper)
|
| throws InterruptedException {
|
| - final CountDownLatch barrier = new CountDownLatch(1);
|
| - surfaceTextureHelper.getHandler().post(new Runnable() {
|
| + ThreadUtils.invokeUninterruptibly(surfaceTextureHelper.getHandler(), new Runnable() {
|
| @Override
|
| public void run() {
|
| surfaceTextureHelper.stopListening();
|
| - barrier.countDown();
|
| }
|
| });
|
| - barrier.await();
|
| }
|
|
|
| /**
|
| @@ -336,6 +333,45 @@ public final class SurfaceTextureHelperTest extends ActivityTestCase {
|
| }
|
|
|
| /**
|
| + * Test stopListening() immediately after the SurfaceTextureHelper has been setup on the handler
|
| + * thread.
|
| + */
|
| + @SmallTest
|
| + public static void testStopListeningImmediatelyOnHandlerThread() throws InterruptedException {
|
| + final SurfaceTextureHelper surfaceTextureHelper =
|
| + SurfaceTextureHelper.create(null);
|
| + final MockTextureListener listener = new MockTextureListener();
|
| +
|
| + final CountDownLatch stopListeningBarrier = new CountDownLatch(1);
|
| + final CountDownLatch stopListeningBarrierDone = new CountDownLatch(1);
|
| + // Start by posting to the handler thread to keep it occupied.
|
| + surfaceTextureHelper.getHandler().post(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + ThreadUtils.awaitUninterruptibly(stopListeningBarrier);
|
| + surfaceTextureHelper.stopListening();
|
| + stopListeningBarrierDone.countDown();
|
| + }
|
| + });
|
| +
|
| + // startListening() is asynchronous and will post to the occupied handler thread.
|
| + surfaceTextureHelper.startListening(listener);
|
| + // Wait for stopListening() to be called on the handler thread.
|
| + stopListeningBarrier.countDown();
|
| + stopListeningBarrierDone.await();
|
| + // Wait until handler thread is idle to try to catch late startListening() call.
|
| + ThreadUtils.invokeUninterruptibly(surfaceTextureHelper.getHandler(), new Runnable() {
|
| + @Override
|
| + public void run() {}
|
| + });
|
| + // Previous startListening() call should never have taken place and it should be ok to call it
|
| + // again.
|
| + surfaceTextureHelper.startListening(listener);
|
| +
|
| + surfaceTextureHelper.dispose();
|
| + }
|
| +
|
| + /**
|
| * Test calling startListening() with a new listener after stopListening() has been called.
|
| */
|
| @MediumTest
|
|
|