Added auto-call feature to WebRTCDemo.

This (compile-time switchable) option automatically starts & stops calls in
series to stress-test the setup/teardown codepaths.  When startCPULoad() is
removed (https://webrtc-codereview.appspot.com/972008/) this showed no
hangs/crashes after completing 200 start/stop pairs.

Also fixed a tiny shutdown-order bug (onDestroy() calling super.onDestroy()
before performing self-shutdown) and changed default video frame resolution to
640x480 to more effectively stress the device (and be a more compelling demo).

BUG=1162

Review URL: https://webrtc-codereview.appspot.com/939032

git-svn-id: http://webrtc.googlecode.com/svn/trunk@3238 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
fischman@webrtc.org
2012-12-04 16:53:43 +00:00
parent 2cf22a6abc
commit f4e070eca5

View File

@ -28,6 +28,7 @@ import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import android.util.Log;
@ -94,6 +95,15 @@ public class WebRTCDemo extends TabActivity implements IViEAndroidCallback,
private static final int SEND_CODEC_FRAMERATE = 15;
private static final int INIT_BITRATE = 500;
private static final String LOOPBACK_IP = "127.0.0.1";
// Zero means don't automatically start/stop calls.
private static final long AUTO_CALL_RESTART_DELAY_MS = 0;
private Handler handler = new Handler();
private Runnable startOrStopCallback = new Runnable() {
public void run() {
startOrStop();
}
};
private int volumeLevel = 204;
@ -167,6 +177,7 @@ public class WebRTCDemo extends TabActivity implements IViEAndroidCallback,
private int packetLoss;
private int frameRateO;
private int bitRateO;
private int numCalls = 0;
// Variable for storing variables
private String webrtcName = "/webrtc";
@ -310,15 +321,18 @@ public class WebRTCDemo extends TabActivity implements IViEAndroidCallback,
}
startMain();
return;
if (AUTO_CALL_RESTART_DELAY_MS > 0)
startOrStop();
}
// Called before the activity is destroyed.
@Override
public void onDestroy() {
Log.d(TAG, "onDestroy");
super.onDestroy();
handler.removeCallbacks(startOrStopCallback);
unregisterReceiver(receiver);
super.onDestroy();
}
private class StatsView extends View{
@ -329,16 +343,18 @@ public class WebRTCDemo extends TabActivity implements IViEAndroidCallback,
@Override protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint mLoadPaint = new Paint();
mLoadPaint.setAntiAlias(true);
mLoadPaint.setTextSize(16);
mLoadPaint.setARGB(255, 255, 255, 255);
Paint loadPaint = new Paint();
loadPaint.setAntiAlias(true);
loadPaint.setTextSize(16);
loadPaint.setARGB(255, 255, 255, 255);
String mLoadText;
mLoadText = "> " + frameRateI + " fps/" + bitRateI + "k bps/ " + packetLoss;
canvas.drawText(mLoadText, 4, 172, mLoadPaint);
mLoadText = "< " + frameRateO + " fps/ " + bitRateO + "k bps";
canvas.drawText(mLoadText, 4, 192, mLoadPaint);
canvas.drawText("#calls " + numCalls, 4, 152, loadPaint);
String loadText;
loadText = "> " + frameRateI + " fps/" + bitRateI + "k bps/ " + packetLoss;
canvas.drawText(loadText, 4, 172, loadPaint);
loadText = "< " + frameRateO + " fps/ " + bitRateO + "k bps";
canvas.drawText(loadText, 4, 192, loadPaint);
updateDisplay();
}
@ -484,7 +500,7 @@ public class WebRTCDemo extends TabActivity implements IViEAndroidCallback,
spCodecSize.setAdapter(new SpinnerAdapter(this,
R.layout.row,
mVideoCodecsSizeStrings));
spCodecSize.setSelection(0);
spCodecSize.setSelection(mVideoCodecsSizeStrings.length - 1);
// Voice codec
mVoiceCodecsStrings = vieAndroidAPI.VoE_GetCodecs();
@ -793,6 +809,24 @@ public class WebRTCDemo extends TabActivity implements IViEAndroidCallback,
}
}
private void startOrStop() {
readSettings();
if (viERunning || voERunning) {
stopAll();
startMain();
wakeLock.release(); // release the wake lock
btStartStopCall.setText(R.string.startCall);
} else if (enableVoice || enableVideo){
++numCalls;
startCall();
wakeLock.acquire(); // screen stay on during the call
btStartStopCall.setText(R.string.stopCall);
}
if (AUTO_CALL_RESTART_DELAY_MS > 0) {
handler.postDelayed(startOrStopCallback, AUTO_CALL_RESTART_DELAY_MS);
}
}
public void onClick(View arg0) {
switch (arg0.getId()) {
case R.id.btSwitchCamera:
@ -816,18 +850,8 @@ public class WebRTCDemo extends TabActivity implements IViEAndroidCallback,
}
break;
case R.id.btStartStopCall:
readSettings();
if (viERunning || voERunning) {
stopAll();
startMain();
wakeLock.release(); // release the wake lock
btStartStopCall.setText(R.string.startCall);
} else if (enableVoice || enableVideo){
startCall();
wakeLock.acquire(); // screen stay on during the call
btStartStopCall.setText(R.string.stopCall);
}
break;
startOrStop();
break;
case R.id.btExit:
stopAll();
finish();