Remove peer connection and signaling calls from UI thread.
- Add separate looper threads for peer connection and websocket signaling classes. - To improve the connection speed start peer connection factory initialization once EGL context is ready in parallel with the room connection. - Add asynchronious http request class and start using it in webscoket signaling and room parameters extractor. - Add helper looper based executor class. - Port some of henrika changes from https://webrtc-codereview.appspot.com/36629004/ to fix sensor crashes on non L devices - will remove the change if CL will be submitted soon. R=jiayl@webrtc.org, wzh@webrtc.org Review URL: https://webrtc-codereview.appspot.com/41369004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@8006 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
/*
|
||||
* libjingle
|
||||
* Copyright 2015, Google Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
||||
* EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
package org.appspot.apprtc.test;
|
||||
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.appspot.apprtc.util.LooperExecutor;
|
||||
|
||||
import android.test.InstrumentationTestCase;
|
||||
import android.util.Log;
|
||||
|
||||
public class LooperExecutorTest extends InstrumentationTestCase {
|
||||
private static final String TAG = "LooperTest";
|
||||
private static final int WAIT_TIMEOUT = 5000;
|
||||
|
||||
public void testLooperExecutor() throws InterruptedException {
|
||||
Log.d(TAG, "testLooperExecutor");
|
||||
final int counter[] = new int[1];
|
||||
final int expectedCounter = 10;
|
||||
final CountDownLatch looperDone = new CountDownLatch(1);
|
||||
|
||||
Runnable counterIncRunnable = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
counter[0]++;
|
||||
Log.d(TAG, "Run " + counter[0]);
|
||||
}
|
||||
};
|
||||
LooperExecutor executor = new LooperExecutor();
|
||||
|
||||
// Try to execute a counter increment task before starting an executor.
|
||||
executor.execute(counterIncRunnable);
|
||||
|
||||
// Start the executor and run expected amount of counter increment task.
|
||||
executor.requestStart();
|
||||
for (int i = 0; i < expectedCounter; i++) {
|
||||
executor.execute(counterIncRunnable);
|
||||
}
|
||||
executor.execute(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
looperDone.countDown();
|
||||
}
|
||||
});
|
||||
executor.requestStop();
|
||||
|
||||
// Try to execute a task after stopping the executor.
|
||||
executor.execute(counterIncRunnable);
|
||||
|
||||
// Wait for final looper task and make sure the counter increment task
|
||||
// is executed expected amount of times.
|
||||
looperDone.await(WAIT_TIMEOUT, TimeUnit.MILLISECONDS);
|
||||
assertTrue (looperDone.getCount() == 0);
|
||||
assertTrue (counter[0] == expectedCounter);
|
||||
|
||||
Log.d(TAG, "testLooperExecutor done");
|
||||
}
|
||||
}
|
||||
@@ -35,10 +35,10 @@ import java.util.concurrent.TimeUnit;
|
||||
import org.appspot.apprtc.AppRTCClient.SignalingParameters;
|
||||
import org.appspot.apprtc.PeerConnectionClient;
|
||||
import org.appspot.apprtc.PeerConnectionClient.PeerConnectionEvents;
|
||||
import org.appspot.apprtc.util.LooperExecutor;
|
||||
import org.webrtc.IceCandidate;
|
||||
import org.webrtc.MediaConstraints;
|
||||
import org.webrtc.PeerConnection;
|
||||
import org.webrtc.PeerConnectionFactory;
|
||||
import org.webrtc.SessionDescription;
|
||||
import org.webrtc.VideoRenderer;
|
||||
|
||||
@@ -49,7 +49,7 @@ public class PeerConnectionClientTest extends InstrumentationTestCase
|
||||
implements PeerConnectionEvents {
|
||||
private static final String TAG = "RTCClientTest";
|
||||
private static final String STUN_SERVER = "stun:stun.l.google.com:19302";
|
||||
private static final int WAIT_TIMEOUT = 3000;
|
||||
private static final int WAIT_TIMEOUT = 5000;
|
||||
private static final int EXPECTED_VIDEO_FRAMES = 15;
|
||||
|
||||
private volatile PeerConnectionClient pcClient;
|
||||
@@ -222,9 +222,6 @@ public class PeerConnectionClientTest extends InstrumentationTestCase
|
||||
isClosed = false;
|
||||
isIceConnected = false;
|
||||
loopback = false;
|
||||
Log.d(TAG, "initializeAndroidGlobals");
|
||||
assertTrue(PeerConnectionFactory.initializeAndroidGlobals(
|
||||
getInstrumentation().getContext(), true, true, true, null));
|
||||
}
|
||||
|
||||
public void testInitiatorCreation() throws InterruptedException {
|
||||
@@ -233,8 +230,11 @@ public class PeerConnectionClientTest extends InstrumentationTestCase
|
||||
MockRenderer remoteRender = new MockRenderer(EXPECTED_VIDEO_FRAMES);
|
||||
SignalingParameters signalingParameters = getTestSignalingParameters();
|
||||
|
||||
pcClient = new PeerConnectionClient(
|
||||
localRender, remoteRender, signalingParameters, this, 1000);
|
||||
pcClient = new PeerConnectionClient();
|
||||
pcClient.createPeerConnectionFactory(
|
||||
getInstrumentation().getContext(), true, null, this);
|
||||
pcClient.createPeerConnection(
|
||||
localRender, remoteRender, signalingParameters, 1000);
|
||||
pcClient.createOffer();
|
||||
|
||||
// Wait for local SDP and ice candidates set events.
|
||||
@@ -258,8 +258,12 @@ public class PeerConnectionClientTest extends InstrumentationTestCase
|
||||
MockRenderer remoteRender = new MockRenderer(EXPECTED_VIDEO_FRAMES);
|
||||
SignalingParameters signalingParameters = getTestSignalingParameters();
|
||||
loopback = true;
|
||||
pcClient = new PeerConnectionClient(
|
||||
localRender, remoteRender, signalingParameters, this, 1000);
|
||||
|
||||
pcClient = new PeerConnectionClient();
|
||||
pcClient.createPeerConnectionFactory(
|
||||
getInstrumentation().getContext(), true, null, this);
|
||||
pcClient.createPeerConnection(
|
||||
localRender, remoteRender, signalingParameters, 1000);
|
||||
pcClient.createOffer();
|
||||
|
||||
// Wait for local SDP, rename it to answer and set as remote SDP.
|
||||
@@ -284,5 +288,4 @@ public class PeerConnectionClientTest extends InstrumentationTestCase
|
||||
assertTrue(waitForPeerConnectionClosed(WAIT_TIMEOUT));
|
||||
Log.d(TAG, "testLoopback Done.");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user