1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
7 * Maintains the stats table.
8 * @param {SsrcInfoManager} ssrcInfoManager The source of the ssrc info.
10 var StatsTable
= (function(ssrcInfoManager
) {
14 * @param {SsrcInfoManager} ssrcInfoManager The source of the ssrc info.
17 function StatsTable(ssrcInfoManager
) {
19 * @type {SsrcInfoManager}
22 this.ssrcInfoManager_
= ssrcInfoManager
;
25 StatsTable
.prototype = {
27 * Adds |report| to the stats table of |peerConnectionElement|.
29 * @param {!Element} peerConnectionElement The root element.
30 * @param {!Object} report The object containing stats, which is the object
31 * containing timestamp and values, which is an array of strings, whose
32 * even index entry is the name of the stat, and the odd index entry is
35 addStatsReport: function(peerConnectionElement
, report
) {
36 var statsTable
= this.ensureStatsTable_(peerConnectionElement
, report
);
39 this.addStatsToTable_(statsTable
,
40 report
.stats
.timestamp
, report
.stats
.values
);
45 * Ensure the DIV container for the stats tables is created as a child of
46 * |peerConnectionElement|.
48 * @param {!Element} peerConnectionElement The root element.
49 * @return {!Element} The stats table container.
52 ensureStatsTableContainer_: function(peerConnectionElement
) {
53 var containerId
= peerConnectionElement
.id
+ '-table-container';
54 var container
= $(containerId
);
56 container
= document
.createElement('div');
57 container
.id
= containerId
;
58 container
.className
= 'stats-table-container';
59 var head
= document
.createElement('div');
60 head
.textContent
= 'Stats Tables';
61 container
.appendChild(head
);
62 peerConnectionElement
.appendChild(container
);
68 * Ensure the stats table for track specified by |report| of PeerConnection
69 * |peerConnectionElement| is created.
71 * @param {!Element} peerConnectionElement The root element.
72 * @param {!Object} report The object containing stats, which is the object
73 * containing timestamp and values, which is an array of strings, whose
74 * even index entry is the name of the stat, and the odd index entry is
76 * @return {!Element} The stats table element.
79 ensureStatsTable_: function(peerConnectionElement
, report
) {
80 var tableId
= peerConnectionElement
.id
+ '-table-' + report
.id
;
81 var table
= $(tableId
);
83 var container
= this.ensureStatsTableContainer_(peerConnectionElement
);
84 var details
= document
.createElement('details');
85 container
.appendChild(details
);
86 var summary
= document
.createElement('summary');
87 summary
.textContent
= report
.id
;
88 details
.appendChild(summary
);
90 table
= document
.createElement('table');
91 details
.appendChild(table
);
95 table
.innerHTML
= '<tr><th colspan=2></th></tr>';
96 table
.rows
[0].cells
[0].textContent
= 'Statistics ' + report
.id
;
97 if (report
.type
== 'ssrc') {
99 table
.rows
[1].innerHTML
= '<td colspan=2></td>';
100 this.ssrcInfoManager_
.populateSsrcInfo(
101 table
.rows
[1].cells
[0], GetSsrcFromReport(report
));
108 * Update |statsTable| with |time| and |statsData|.
110 * @param {!Element} statsTable Which table to update.
111 * @param {number} time The number of miliseconds since epoch.
112 * @param {Array.<string>} statsData An array of stats name and value pairs.
115 addStatsToTable_: function(statsTable
, time
, statsData
) {
116 var date
= Date(time
);
117 this.updateStatsTableRow_(statsTable
, 'timestamp', date
.toLocaleString());
118 for (var i
= 0; i
< statsData
.length
- 1; i
= i
+ 2) {
119 this.updateStatsTableRow_(statsTable
, statsData
[i
], statsData
[i
+ 1]);
124 * Update the value column of the stats row of |rowName| to |value|.
125 * A new row is created is this is the first report of this stats.
127 * @param {!Element} statsTable Which table to update.
128 * @param {string} rowName The name of the row to update.
129 * @param {string} value The new value to set.
132 updateStatsTableRow_: function(statsTable
, rowName
, value
) {
133 var trId
= statsTable
.id
+ '-' + rowName
;
134 var trElement
= $(trId
);
136 trElement
= document
.createElement('tr');
138 statsTable
.firstChild
.appendChild(trElement
);
139 trElement
.innerHTML
= '<td>' + rowName
+ '</td><td></td>';
141 trElement
.cells
[1].textContent
= value
;