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