OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 var ClientRenderer = (function() { | 5 var ClientRenderer = (function() { |
6 var ClientRenderer = function() { | 6 var ClientRenderer = function() { |
7 this.playerListElement = document.getElementById('player-list'); | 7 this.playerListElement = document.getElementById('player-list'); |
8 this.audioStreamListElement = document.getElementById('audio-stream-list'); | 8 this.audioStreamListElement = document.getElementById('audio-stream-list'); |
9 this.propertiesTable = document.getElementById('property-table'); | 9 this.propertiesTable = document.getElementById('property-table'); |
10 this.logTable = document.getElementById('log'); | 10 this.logTable = document.getElementById('log'); |
11 this.graphElement = document.getElementById('graphs'); | |
11 | 12 |
12 this.selectedPlayer = null; | 13 this.selectedPlayer = null; |
13 this.selectedStream = null; | 14 this.selectedStream = null; |
14 | 15 |
15 this.selectedPlayerLogIndex = 0; | 16 this.selectedPlayerLogIndex = 0; |
17 | |
18 this.bufferCanvas = document.createElement('canvas'); | |
19 this.bufferCanvas.width = media.BAR_WIDTH; | |
20 this.bufferCanvas.height = media.BAR_HEIGHT; | |
16 }; | 21 }; |
17 | 22 |
18 function removeChildren(element) { | 23 function removeChildren(element) { |
19 while (element.hasChildNodes()) { | 24 while (element.hasChildNodes()) { |
20 element.removeChild(element.lastChild); | 25 element.removeChild(element.lastChild); |
21 } | 26 } |
22 }; | 27 }; |
23 | 28 |
24 function createButton(text, select_cb) { | 29 function createButton(text, select_cb) { |
25 var button = document.createElement('button'); | 30 var button = document.createElement('button'); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
69 * Called when a property on a player is changed. | 74 * Called when a property on a player is changed. |
70 * @param players The entire map of id -> player. | 75 * @param players The entire map of id -> player. |
71 * @param player The player that had its property changed. | 76 * @param player The player that had its property changed. |
72 * @param key The name of the property that was changed. | 77 * @param key The name of the property that was changed. |
73 * @param value The new value of the property. | 78 * @param value The new value of the property. |
74 */ | 79 */ |
75 playerUpdated: function(players, player, key, value) { | 80 playerUpdated: function(players, player, key, value) { |
76 if (player === this.selectedPlayer) { | 81 if (player === this.selectedPlayer) { |
77 this.drawProperties_(player.properties); | 82 this.drawProperties_(player.properties); |
78 this.drawLog_(); | 83 this.drawLog_(); |
84 this.drawGraphs_(); | |
79 } | 85 } |
80 if (key === 'name' || key === 'url') { | 86 if (key === 'name' || key === 'url') { |
81 this.redrawPlayerList_(players); | 87 this.redrawPlayerList_(players); |
82 } | 88 } |
83 }, | 89 }, |
84 | 90 |
85 redrawAudioStreamList_: function(streams) { | 91 redrawAudioStreamList_: function(streams) { |
86 removeChildren(this.audioStreamListElement); | 92 removeChildren(this.audioStreamListElement); |
87 | 93 |
88 for (id in streams) { | 94 for (id in streams) { |
89 var li = document.createElement('li'); | 95 var li = document.createElement('li'); |
90 li.appendChild(createButton( | 96 li.appendChild(createButton( |
91 id, this.selectAudioStream_.bind(this, streams[id]))); | 97 id, this.selectAudioStream_.bind(this, streams[id]))); |
92 this.audioStreamListElement.appendChild(li); | 98 this.audioStreamListElement.appendChild(li); |
93 } | 99 } |
94 }, | 100 }, |
95 | 101 |
96 selectAudioStream_: function(audioStream) { | 102 selectAudioStream_: function(audioStream) { |
97 this.selectedStream = audioStream; | 103 this.selectedStream = audioStream; |
98 this.selectedPlayer = null; | 104 this.selectedPlayer = null; |
99 this.drawProperties_(audioStream); | 105 this.drawProperties_(audioStream); |
100 removeChildren(this.logTable.querySelector('tbody')); | 106 removeChildren(this.logTable.querySelector('tbody')); |
107 removeChildren(this.graphElement); | |
101 }, | 108 }, |
102 | 109 |
103 redrawPlayerList_: function(players) { | 110 redrawPlayerList_: function(players) { |
104 removeChildren(this.playerListElement); | 111 removeChildren(this.playerListElement); |
105 | 112 |
106 for (id in players) { | 113 for (id in players) { |
107 var li = document.createElement('li'); | 114 var li = document.createElement('li'); |
108 var player = players[id]; | 115 var player = players[id]; |
109 var usableName = player.properties.name || | 116 var usableName = player.properties.name || |
110 player.properties.url || | 117 player.properties.url || |
111 'player ' + player.id; | 118 'player ' + player.id; |
112 | 119 |
113 li.appendChild(createButton( | 120 li.appendChild(createButton( |
114 usableName, this.selectPlayer_.bind(this, player))); | 121 usableName, this.selectPlayer_.bind(this, player))); |
115 this.playerListElement.appendChild(li); | 122 this.playerListElement.appendChild(li); |
116 } | 123 } |
117 }, | 124 }, |
118 | 125 |
119 selectPlayer_: function(player) { | 126 selectPlayer_: function(player) { |
120 this.selectedPlayer = player; | 127 this.selectedPlayer = player; |
121 this.selectedPlayerLogIndex = 0; | 128 this.selectedPlayerLogIndex = 0; |
122 this.selectedStream = null; | 129 this.selectedStream = null; |
123 this.drawProperties_(player.properties); | 130 this.drawProperties_(player.properties); |
124 | 131 |
125 removeChildren(this.logTable.querySelector('tbody')); | 132 removeChildren(this.logTable.querySelector('tbody')); |
133 removeChildren(this.graphElement); | |
126 this.drawLog_(); | 134 this.drawLog_(); |
135 this.drawGraphs_(); | |
127 }, | 136 }, |
128 | 137 |
129 drawProperties_: function(propertyMap) { | 138 drawProperties_: function(propertyMap) { |
130 removeChildren(this.propertiesTable); | 139 removeChildren(this.propertiesTable); |
131 | 140 |
132 for (key in propertyMap) { | 141 for (key in propertyMap) { |
133 var value = propertyMap[key]; | 142 var value = propertyMap[key]; |
143 | |
134 var row = this.propertiesTable.insertRow(-1); | 144 var row = this.propertiesTable.insertRow(-1); |
135 var keyCell = row.insertCell(-1); | 145 var keyCell = row.insertCell(-1); |
136 var valueCell = row.insertCell(-1); | 146 var valueCell = row.insertCell(-1); |
137 | 147 |
138 keyCell.appendChild(document.createTextNode(key)); | 148 keyCell.appendChild(document.createTextNode(key)); |
139 valueCell.appendChild(document.createTextNode(value)); | 149 valueCell.appendChild(document.createTextNode(value)); |
140 } | 150 } |
141 }, | 151 }, |
142 | 152 |
143 appendEventToLog_: function(event) { | 153 appendEventToLog_: function(event) { |
144 var row = this.logTable.querySelector('tbody').insertRow(-1); | 154 var row = this.logTable.querySelector('tbody').insertRow(-1); |
145 | 155 |
146 row.insertCell(-1).appendChild(document.createTextNode( | 156 row.insertCell(-1).appendChild(document.createTextNode( |
147 util.millisecondsToString(event.time))); | 157 util.millisecondsToString(event.time))); |
148 row.insertCell(-1).appendChild(document.createTextNode(event.key)); | 158 row.insertCell(-1).appendChild(document.createTextNode(event.key)); |
149 row.insertCell(-1).appendChild(document.createTextNode(event.value)); | 159 row.insertCell(-1).appendChild(document.createTextNode(event.value)); |
150 }, | 160 }, |
151 | 161 |
152 drawLog_: function() { | 162 drawLog_: function() { |
153 var toDraw = this.selectedPlayer.allEvents.slice( | 163 var toDraw = this.selectedPlayer.allEvents.slice( |
154 this.selectedPlayerLogIndex); | 164 this.selectedPlayerLogIndex); |
155 toDraw.forEach(this.appendEventToLog_.bind(this)); | 165 toDraw.forEach(this.appendEventToLog_.bind(this)); |
156 this.selectedPlayerLogIndex = this.selectedPlayer.allEvents.length; | 166 this.selectedPlayerLogIndex = this.selectedPlayer.allEvents.length; |
167 }, | |
168 | |
169 drawGraphs_: function() { | |
170 function addToGraphs (name, graph, graphElement) { | |
171 var li = document.createElement('li'); | |
172 li.appendChild(graph); | |
173 li.appendChild(document.createTextNode(name)); | |
174 graphElement.appendChild(li); | |
175 }; | |
arv (Not doing code reviews)
2013/09/09 18:02:19
no semicolon after FunctionDeclaration
Ty Overby
2013/09/09 18:28:13
Done.
| |
176 | |
177 var url = this.selectedPlayer.properties.url; | |
178 if (!url) { | |
179 return; | |
180 } | |
181 | |
182 var cache = media.cacheForUrl(url); | |
183 | |
184 var player = this.selectedPlayer; | |
185 var props = player.properties; | |
186 | |
187 var cacheExists = false; | |
188 var bufferExists = false; | |
189 | |
190 if (props['buffer_start'] !== undefined && | |
191 props['buffer_current'] !== undefined && | |
192 props['buffer_end'] !== undefined && | |
193 props['total_bytes'] !== undefined) { | |
194 this.drawBufferGraph_(props['buffer_start'], | |
195 props['buffer_current'], | |
196 props['buffer_end'], | |
197 props['total_bytes']); | |
198 bufferExists = true; | |
199 } | |
200 | |
201 if (cache) { | |
202 if(player.properties['total_bytes']) { | |
203 cache.size = Number(player.properties['total_bytes']); | |
204 } | |
205 cache.generateDetails(); | |
206 cacheExists = true; | |
207 | |
208 } | |
209 | |
210 if (!this.graphElement.hasChildNodes()) { | |
211 if (bufferExists) { | |
212 addToGraphs('buffer', this.bufferCanvas, this.graphElement); | |
213 } | |
214 if (cacheExists) { | |
215 addToGraphs('cache read', cache.readCanvas, this.graphElement); | |
216 addToGraphs('cache write', cache.writeCanvas, this.graphElement); | |
217 } | |
218 } | |
219 }, | |
220 | |
221 drawBufferGraph_: function(start, current, end, size) { | |
222 var ctx = this.bufferCanvas.getContext('2d'); | |
223 var width = this.bufferCanvas.width; | |
224 var height = this.bufferCanvas.height; | |
225 ctx.fillStyle = '#aaa'; | |
226 ctx.fillRect(0, 0, width, height); | |
227 | |
228 var scale_factor = width / size; | |
229 var left = start * scale_factor; | |
230 var middle = current * scale_factor; | |
231 var right = end * scale_factor; | |
232 | |
233 ctx.fillStyle = '#a0a'; | |
234 ctx.fillRect(left, 0, middle - left, height); | |
235 ctx.fillStyle = '#aa0'; | |
236 ctx.fillRect(middle, 0, right - middle, height); | |
157 } | 237 } |
158 }; | 238 }; |
159 | 239 |
160 return ClientRenderer; | 240 return ClientRenderer; |
161 })(); | 241 })(); |
OLD | NEW |