summaryrefslogtreecommitdiffstats
path: root/content/browser/resources/media/stats_table.js
diff options
context:
space:
mode:
Diffstat (limited to 'content/browser/resources/media/stats_table.js')
-rw-r--r--content/browser/resources/media/stats_table.js139
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;
+})();