Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(108)

Unified Diff: webrtc/api/androidtests/src/org/webrtc/SurfaceTextureHelperTest.java

Issue 1806013003: SurfaceTextureHelper: Fix startListening()/stopListening() race (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | webrtc/api/java/android/org/webrtc/SurfaceTextureHelper.java » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « no previous file | webrtc/api/java/android/org/webrtc/SurfaceTextureHelper.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698