webrtc_internals.js revision effb81e5f8246d0db0270817048dc992db66e9fb
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)var tabView = null; 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)var ssrcInfoManager = null; 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)var peerConnectionUpdateTable = null; 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)var statsTable = null; 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)var dumpCreator = null; 1090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)/** A map from peer connection id to the PeerConnectionRecord. */ 1190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)var peerConnectionDataStore = {}; 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/** A list of getUserMedia requests. */ 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)var userMediaRequests = []; 1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)/** A simple class to store the updates and stats data for a peer connection. */ 1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)var PeerConnectionRecord = (function() { 1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) /** @constructor */ 1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) function PeerConnectionRecord() { 1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) /** @private */ 2090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) this.record_ = { 2190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) constraints: {}, 2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) servers: [], 2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) stats: {}, 2490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) updateLog: [], 2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) url: '', 2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) }; 2790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) }; 2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) PeerConnectionRecord.prototype = { 3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) /** @override */ 3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) toJSON: function() { 3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return this.record_; 3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) }, 3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) /** 3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * Adds the initilization info of the peer connection. 3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * @param {string} url The URL of the web page owning the peer connection. 3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * @param {Array} servers STUN servers used by the peer connection. 3990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * @param {!Object} constraints Media constraints. 4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) */ 4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) initialize: function(url, servers, constraints) { 4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) this.record_.url = url; 4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) this.record_.servers = servers; 4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) this.record_.constraints = constraints; 4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) }, 4690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 4790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) /** 4890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * @param {string} dataSeriesId The TimelineDataSeries identifier. 4990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * @return {!TimelineDataSeries} 5090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) */ 5190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) getDataSeries: function(dataSeriesId) { 5290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return this.record_.stats[dataSeriesId]; 5390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) }, 5490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 5590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) /** 5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * @param {string} dataSeriesId The TimelineDataSeries identifier. 5790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * @param {!TimelineDataSeries} dataSeries The TimelineDataSeries to set to. 5890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) */ 5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) setDataSeries: function(dataSeriesId, dataSeries) { 6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) this.record_.stats[dataSeriesId] = dataSeries; 6190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) }, 6290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 6390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) /** 6490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * @param {string} type The type of the update. 6590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * @param {string} value The value of the update. 6690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) */ 6790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) addUpdate: function(type, value) { 6890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) this.record_.updateLog.push({ 6990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) time: (new Date()).toLocaleString(), 7090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) type: type, 7190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) value: value, 7290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) }); 7390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) }, 7490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) }; 7590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 7690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return PeerConnectionRecord; 7790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)})(); 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 79b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)// The maximum number of data points bufferred for each stats. Old data points 80b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)// will be shifted out when the buffer is full. 81b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)var MAX_STATS_DATA_POINT_BUFFER_SIZE = 1000; 82b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)<include src="tab_view.js"/> 8490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)<include src="data_series.js"/> 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)<include src="ssrc_info_manager.js"/> 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)<include src="stats_graph_helper.js"/> 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)<include src="stats_table.js"/> 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)<include src="peer_connection_update_table.js"/> 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)<include src="dump_creator.js"/> 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)function initialize() { 93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) dumpCreator = new DumpCreator($('content-root')); 94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) tabView = new TabView($('content-root')); 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ssrcInfoManager = new SsrcInfoManager(); 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) peerConnectionUpdateTable = new PeerConnectionUpdateTable(); 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) statsTable = new StatsTable(ssrcInfoManager); 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chrome.send('finishedDOMLoad'); 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Requests stats from all peer connections every second. 102a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) window.setInterval(requestStats, 1000); 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)document.addEventListener('DOMContentLoaded', initialize); 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 107a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)/** Sends a request to the browser to get peer connection statistics. */ 108a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)function requestStats() { 109a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (Object.keys(peerConnectionDataStore).length > 0) 110a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) chrome.send('getAllStats'); 111a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 112a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 113a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * A helper function for getting a peer connection element id. 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {!Object.<string, number>} data The object containing the pid and lid 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * of the peer connection. 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @return {string} The peer connection element id. 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)function getPeerConnectionId(data) { 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return data.pid + '-' + data.lid; 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Extracts ssrc info from a setLocal/setRemoteDescription update. 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {!PeerConnectionUpdateEntry} data The peer connection update data. 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)function extractSsrcInfo(data) { 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (data.type == 'setLocalDescription' || 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) data.type == 'setRemoteDescription') { 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ssrcInfoManager.addSsrcStreamInfo(data.value); 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 14090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * Helper for adding a peer connection update. 14190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * 14290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * @param {Element} peerConnectionElement 14390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * @param {!PeerConnectionUpdateEntry} update The peer connection update data. 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 14590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)function addPeerConnectionUpdate(peerConnectionElement, update) { 14690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) peerConnectionUpdateTable.addPeerConnectionUpdate(peerConnectionElement, 14790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) update); 14890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) extractSsrcInfo(update); 14990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) peerConnectionDataStore[peerConnectionElement.id].addUpdate( 15090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) update.type, update.value); 15190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 15290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 15390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 15490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)/** Browser message handlers. */ 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Removes all information about a peer connection. 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {!Object.<string, number>} data The object containing the pid and lid 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * of a peer connection. 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)function removePeerConnection(data) { 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var element = $(getPeerConnectionId(data)); 16590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (element) { 16690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) delete peerConnectionDataStore[element.id]; 167f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) tabView.removeTab(element.id); 16890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Adds a peer connection. 174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {!Object} data The object containing the pid, lid, url, servers, and 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * constraints of a peer connection. 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)function addPeerConnection(data) { 17990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) var id = getPeerConnectionId(data); 18090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 18190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (!peerConnectionDataStore[id]) { 18290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) peerConnectionDataStore[id] = new PeerConnectionRecord(); 18390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 18490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) peerConnectionDataStore[id].initialize( 18590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) data.url, data.servers, data.constraints); 18690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 18790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) var peerConnectionElement = $(id); 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!peerConnectionElement) { 189f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) peerConnectionElement = tabView.addTab(id, data.url); 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) peerConnectionElement.innerHTML = 192f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) '<p>' + data.url + ' ' + data.servers + ' ' + data.constraints + 193f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) '</p>'; 19490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return peerConnectionElement; 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Adds a peer connection update. 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {!PeerConnectionUpdateEntry} data The peer connection update data. 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)function updatePeerConnection(data) { 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) var peerConnectionElement = $(getPeerConnectionId(data)); 20690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) addPeerConnectionUpdate(peerConnectionElement, data); 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Adds the information of all peer connections created so far. 212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {Array.<!Object>} data An array of the information of all peer 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * connections. Each array item contains pid, lid, url, servers, 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * constraints, and an array of updates as the log. 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)function updateAllPeerConnections(data) { 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (var i = 0; i < data.length; ++i) { 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var peerConnection = addPeerConnection(data[i]); 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var log = data[i].log; 22268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (!log) 22368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) continue; 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (var j = 0; j < log.length; ++j) { 22590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) addPeerConnectionUpdate(peerConnection, log[j]); 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 228a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) requestStats(); 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Handles the report of stats. 234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {!Object} data The object containing pid, lid, and reports, where 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * reports is an array of stats reports. Each report contains id, type, 237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * and stats, where stats is the object containing timestamp and values, 238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * which is an array of strings, whose even index entry is the name of the 239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * stat, and the odd index entry is the value. 240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)function addStats(data) { 242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) var peerConnectionElement = $(getPeerConnectionId(data)); 243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!peerConnectionElement) 244c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (var i = 0; i < data.reports.length; ++i) { 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var report = data.reports[i]; 248c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) statsTable.addStatsReport(peerConnectionElement, report); 249b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) drawSingleReport(peerConnectionElement, report); 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 253c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 254c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 2555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Adds a getUserMedia request. 2565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * 2575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {!Object} data The object containing rid {number}, pid {number}, 2585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * origin {string}, audio {string}, video {string}. 2595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 2605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)function addGetUserMedia(data) { 2615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // TODO(jiayl): add the getUserMedia info to the tabbed UI. 2625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) userMediaRequests.push(data); 2635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/** 2675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Removes the getUserMedia requests from the specified |rid|. 2685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * 2695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {!Object} data The object containing rid {number}, the render id. 2705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 2715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)function removeGetUserMediaForRenderer(data) { 2725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // TODO(jiayl): remove the getUserMedia info from the tabbed UI. 2735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (var i = userMediaRequests.length - 1; i >= 0; --i) { 2745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (userMediaRequests[i].rid == data.rid) 2755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) userMediaRequests.splice(i, 1); 2765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 2775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 279effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 280effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch/** 281effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch * Notification that the AEC recording file selection dialog was cancelled, 282effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch * i.e. AEC has not been enabled. 283effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch */ 284effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochfunction aecRecordingFileSelectionCancelled() { 285effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch dumpCreator.disableAecRecording(); 286effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 287effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 288effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 2895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/** 2905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Set 291c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 2925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)function enableAecRecording() { 2935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) dumpCreator.enableAecRecording(); 294c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 295