Index: webrtc/tools/loopback_test/loopback_test.html |
diff --git a/webrtc/tools/loopback_test/loopback_test.html b/webrtc/tools/loopback_test/loopback_test.html |
deleted file mode 100644 |
index 676fbe79c403b87089f3dfd966e43bd612996666..0000000000000000000000000000000000000000 |
--- a/webrtc/tools/loopback_test/loopback_test.html |
+++ /dev/null |
@@ -1,227 +0,0 @@ |
-<!DOCTYPE html> |
-<!-- |
- This page was created to help debug and study webrtc issues such as |
- bandwidth estimation problems. It allows one to easily launch a test |
- case that establishs a connection between 2 peer connections |
---> |
-<html> |
-<head> |
-<title>Loopback test</title> |
- |
-<!-- In order to plot graphs, this tools uses google visualization API which is |
- loaded via goog.load provided by google api. --> |
-<script src="//www.google.com/jsapi"></script> |
- |
-<!-- This file is included to allow loopback_test.js instantiate a |
- RTCPeerConnection on a browser and version agnostic way. --> |
-<script src="adapter.js"></script> |
- |
-<!-- Provides class StatTracker used by loopback_test.js to keep track of |
- RTCPeerConnection stats --> |
-<script src="stat_tracker.js"></script> |
- |
-<!-- Provides LoopbackTest class which has the core logic for the test itself. |
- Such as: create 2 peer connections, establish a call, filter turn |
- candidates, constraint video bitrate etc. |
- --> |
-<script src="loopback_test.js"></script> |
- |
-<style> |
-#chart { |
- height: 400px; |
-} |
- |
-#control-range { |
- height: 100px; |
-} |
-</style> |
-</head> |
-<body> |
-<div id="test-launcher"> |
- <p>Duration (s): <input id="duration" type="text"></p> |
- <p>Max video bitrate (kbps): <input id="max-video-bitrate" type="text"></p> |
- <p>Peer connection constraints: <input id="pc-constraints" type="text"></p> |
- <p>Force TURN: <input id="force-turn" type="checkbox" checked></p> |
- <p><input id="launcher-button" type="button" value="Run test"> |
- <div id="test-status" style="display:none"></div> |
- <div id="dashboard"> |
- <div id="control-category"></div> |
- <div id="chart"></div> |
- <div id="control-range"></div> |
- </div> |
-</div> |
-<script> |
-google.load('visualization', '1.0', {'packages':['controls']}); |
- |
-var durationInput = document.getElementById('duration'); |
-var maxVideoBitrateInput = document.getElementById('max-video-bitrate'); |
-var forceTurnInput = document.getElementById('force-turn'); |
-var launcherButton = document.getElementById('launcher-button'); |
-var autoModeInput = document.createElement('input'); |
-var testStatus = document.getElementById('test-status'); |
-var pcConstraintsInput = document.getElementById('pc-constraints'); |
- |
-launcherButton.onclick = start; |
- |
-// Load parameters from the url if present. This allows one to link to |
-// a specific test configuration and is used to automatically pass parameters |
-// for scripts such as record-test.sh |
-function getURLParameter(name, default_value) { |
- var search = |
- RegExp('(^\\?|&)' + name + '=' + '(.+?)(&|$)').exec(location.search); |
- if (search) |
- return decodeURI(search[2]); |
- else |
- return default_value; |
-} |
- |
-durationInput.value = getURLParameter('duration', 10); |
-maxVideoBitrateInput.value = getURLParameter('max-video-bitrate', 2000); |
-forceTurnInput.checked = (getURLParameter('force-turn', 'true') === 'true'); |
-autoModeInput.checked = (getURLParameter('auto-mode', 'false') === 'true'); |
-pcConstraintsInput.value = getURLParameter('pc-constraints', ''); |
- |
-if (autoModeInput.checked) start(); |
- |
-function start() { |
- var durationMs = parseInt(durationInput.value) * 1000; |
- var maxVideoBitrateKbps = parseInt(maxVideoBitrateInput.value); |
- var forceTurn = forceTurnInput.checked; |
- var autoClose = autoModeInput.checked; |
- var pcConstraints = pcConstraintsInput.value == "" ? |
- null : JSON.parse(pcConstraintsInput.value); |
- |
- var updateStatusInterval; |
- var testFinished = false; |
- function updateStatus() { |
- if (testFinished) { |
- testStatus.innerHTML = 'Test finished'; |
- if (updateStatusInterval) { |
- clearInterval(updateStatusInterval); |
- updateStatusInterval = null; |
- } |
- } else { |
- if (!updateStatusInterval) { |
- updateStatusInterval = setInterval(updateStatus, 1000); |
- testStatus.innerHTML = 'Running'; |
- } |
- testStatus.innerHTML += '.'; |
- } |
- } |
- |
- if (!(isFinite(maxVideoBitrateKbps) && maxVideoBitrateKbps > 0)) { |
- // TODO(andresp): Get a better way to show errors than alert. |
- alert("Invalid max video bitrate"); |
- return; |
- } |
- |
- if (!(isFinite(durationMs) && durationMs > 0)) { |
- alert("Invalid duration"); |
- return; |
- } |
- |
- durationInput.disabled = true; |
- forceTurnInput.disabled = true; |
- maxVideoBitrateInput.disabled = true; |
- launcherButton.style.display = 'none'; |
- testStatus.style.display = 'block'; |
- |
- getUserMedia({audio:true, video:true}, |
- gotStream, function() {}); |
- |
- function gotStream(stream) { |
- updateStatus(); |
- var test = new LoopbackTest(stream, durationMs, |
- forceTurn, |
- pcConstraints, |
- maxVideoBitrateKbps); |
- test.run(onTestFinished.bind(test)); |
- } |
- |
- function onTestFinished() { |
- testFinished = true; |
- updateStatus(); |
- if (autoClose) { |
- window.close(); |
- } else { |
- plotStats(this.getResults()); |
- } |
- } |
-} |
- |
-function plotStats(data) { |
- var dashboard = new google.visualization.Dashboard( |
- document.getElementById('dashboard')); |
- |
- var chart = new google.visualization.ChartWrapper({ |
- 'containerId': 'chart', |
- 'chartType': 'LineChart', |
- 'options': { 'pointSize': 0, 'lineWidth': 1, 'interpolateNulls': true }, |
- }); |
- |
- var rangeFilter = new google.visualization.ControlWrapper({ |
- 'controlType': 'ChartRangeFilter', |
- 'containerId': 'control-range', |
- 'options': { |
- 'filterColumnIndex': 0, |
- 'ui': { |
- 'chartType': 'ScatterChart', |
- 'chartOptions': { |
- 'hAxis': {'baselineColor': 'none'} |
- }, |
- 'chartView': { |
- 'columns': [0, 1] |
- }, |
- 'minRangeSize': 1000 // 1 second |
- } |
- }, |
- }); |
- |
- // Create a table with the columns of the dataset. |
- var columnsTable = new google.visualization.DataTable(); |
- columnsTable.addColumn('number', 'columnIndex'); |
- columnsTable.addColumn('string', 'columnLabel'); |
- var initState = {selectedValues: []}; |
- for (var i = 1; i < data.getNumberOfColumns(); i++) { |
- columnsTable.addRow([i, data.getColumnLabel(i)]); |
- initState.selectedValues.push(data.getColumnLabel(i)); |
- } |
- |
- var columnFilter = new google.visualization.ControlWrapper({ |
- controlType: 'CategoryFilter', |
- containerId: 'control-category', |
- dataTable: columnsTable, |
- options: { |
- filterColumnLabel: 'columnLabel', |
- ui: { |
- label: '', |
- allowNone: false, |
- selectedValuesLayout: 'aside' |
- } |
- }, |
- state: initState |
- }); |
- google.visualization.events.addListener(columnFilter, 'statechange', |
- function () { |
- var state = columnFilter.getState(); |
- var row; |
- var columnIndices = [0]; |
- for (var i = 0; i < state.selectedValues.length; i++) { |
- row = columnsTable.getFilteredRows([{ |
- column: 1, |
- value: state.selectedValues[i]}])[0]; |
- columnIndices.push(columnsTable.getValue(row, 0)); |
- } |
- // Sort the indices into their original order |
- columnIndices.sort(function (a, b) { return (a - b); }); |
- chart.setView({columns: columnIndices}); |
- chart.draw(); |
- }); |
- |
- columnFilter.draw(); |
- dashboard.bind([rangeFilter], [chart]); |
- dashboard.draw(data); |
-} |
-</script> |
-</body> |
-</html> |