diff options
Diffstat (limited to 'content/browser/resources/media/stats_table.js')
-rw-r--r-- | content/browser/resources/media/stats_table.js | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/content/browser/resources/media/stats_table.js b/content/browser/resources/media/stats_table.js new file mode 100644 index 0000000..d31c73a --- /dev/null +++ b/content/browser/resources/media/stats_table.js @@ -0,0 +1,139 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + + +/** + * Maintains the stats table. + * @param {SsrcInfoManager} ssrcInfoManager The source of the ssrc info. + */ +var StatsTable = (function(ssrcInfoManager) { + 'use strict'; + + /** + * @param {SsrcInfoManager} ssrcInfoManager The source of the ssrc info. + * @constructor + */ + function StatsTable(ssrcInfoManager) { + /** + * @type {SsrcInfoManager} + * @private + */ + this.ssrcInfoManager_ = ssrcInfoManager; + } + + StatsTable.prototype = { + /** + * Adds |report| to the stats table of |peerConnectionElement|. + * + * @param {!Element} peerConnectionElement The root element. + * @param {!Object} report The object containing stats, which is the object + * containing timestamp and values, which is an array of strings, whose + * even index entry is the name of the stat, and the odd index entry is + * the value. + */ + addStatsReport: function(peerConnectionElement, report) { + var statsTable = this.ensureStatsTable_(peerConnectionElement, report); + + if (report.stats) { + this.addStatsToTable_(statsTable, + report.stats.timestamp, report.stats.values); + } + }, + + /** + * Ensure the DIV container for the stats tables is created as a child of + * |peerConnectionElement|. + * + * @param {!Element} peerConnectionElement The root element. + * @return {!Element} The stats table container. + * @private + */ + ensureStatsTableContainer_: function(peerConnectionElement) { + var containerId = peerConnectionElement.id + '-table-container'; + var container = $(containerId); + if (!container) { + container = document.createElement('div'); + container.id = containerId; + container.className = 'stats-table-container'; + peerConnectionElement.appendChild(container); + } + return container; + }, + + /** + * Ensure the stats table for track specified by |report| of PeerConnection + * |peerConnectionElement| is created. + * + * @param {!Element} peerConnectionElement The root element. + * @param {!Object} report The object containing stats, which is the object + * containing timestamp and values, which is an array of strings, whose + * even index entry is the name of the stat, and the odd index entry is + * the value. + * @return {!Element} The stats table element. + * @private + */ + ensureStatsTable_: function(peerConnectionElement, report) { + var tableId = peerConnectionElement.id + '-table-' + + report.type + '-' + report.id; + var table = $(tableId); + if (!table) { + var container = this.ensureStatsTableContainer_(peerConnectionElement); + table = document.createElement('table'); + container.appendChild(table); + table.id = tableId; + table.border = 1; + + table.innerHTML = '<tr><th colspan=2></th></tr>'; + table.rows[0].cells[0].textContent = + 'Statistics ' + report.type + '-' + report.id; + if (report.type == 'ssrc') { + table.insertRow(1); + table.rows[1].innerHTML = '<td colspan=2></td>'; + this.ssrcInfoManager_.populateSsrcInfo( + table.rows[1].cells[0], report.id); + } + } + return table; + }, + + /** + * Update |statsTable| with |time| and |statsData|. + * + * @param {!Element} statsTable Which table to update. + * @param {number} time The number of miliseconds since epoch. + * @param {Array.<string>} statsData An array of stats name and value pairs. + * @private + */ + addStatsToTable_: function(statsTable, time, statsData) { + var date = Date(time); + this.updateStatsTableRow_(statsTable, 'timestamp', date.toLocaleString()); + for (var i = 0; i < statsData.length - 1; i = i + 2) { + this.updateStatsTableRow_(statsTable, statsData[i], statsData[i + 1]); + } + }, + + /** + * Update the value column of the stats row of |rowName| to |value|. + * A new row is created is this is the first report of this stats. + * + * @param {!Element} statsTable Which table to update. + * @param {string} rowName The name of the row to update. + * @param {string} value The new value to set. + * @private + */ + updateStatsTableRow_: function(statsTable, rowName, value) { + var trId = statsTable.id + '-' + rowName; + var trElement = $(trId); + if (!trElement) { + trElement = document.createElement('tr'); + trElement.id = trId; + statsTable.firstChild.appendChild(trElement); + trElement.innerHTML = '<td>' + rowName + '</td><td></td>'; + } + trElement.cells[1].textContent = value; + } + }; + + return StatsTable; +})(); |