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; |
16 }; | 17 }; |
17 | 18 |
18 function removeChildren(element) { | 19 function removeChildren(element) { |
19 while (element.hasChildNodes()) { | 20 while (element.hasChildNodes()) { |
20 element.removeChild(element.lastChild); | 21 element.removeChild(element.lastChild); |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
69 * Called when a property on a player is changed. | 70 * Called when a property on a player is changed. |
70 * @param players The entire map of id -> player. | 71 * @param players The entire map of id -> player. |
71 * @param player The player that had its property changed. | 72 * @param player The player that had its property changed. |
72 * @param key The name of the property that was changed. | 73 * @param key The name of the property that was changed. |
73 * @param value The new value of the property. | 74 * @param value The new value of the property. |
74 */ | 75 */ |
75 playerUpdated: function(players, player, key, value) { | 76 playerUpdated: function(players, player, key, value) { |
76 if (player === this.selectedPlayer) { | 77 if (player === this.selectedPlayer) { |
77 this.drawProperties_(player.properties); | 78 this.drawProperties_(player.properties); |
78 this.drawLog_(); | 79 this.drawLog_(); |
80 this.drawGraphs_(); | |
scherkus (not reviewing)
2013/09/04 23:20:53
I noticed you don't call anything on ClientRendere
Ty Overby
2013/09/05 21:01:02
Yeah, buffer_start, buffer_end, buffer_current get
| |
79 } | 81 } |
80 if (key === 'name' || key === 'url') { | 82 if (key === 'name' || key === 'url') { |
81 this.redrawPlayerList_(players); | 83 this.redrawPlayerList_(players); |
82 } | 84 } |
83 }, | 85 }, |
84 | 86 |
85 redrawAudioStreamList_: function(streams) { | 87 redrawAudioStreamList_: function(streams) { |
86 removeChildren(this.audioStreamListElement); | 88 removeChildren(this.audioStreamListElement); |
87 | 89 |
88 for (id in streams) { | 90 for (id in streams) { |
89 var li = document.createElement('li'); | 91 var li = document.createElement('li'); |
90 li.appendChild(createButton( | 92 li.appendChild(createButton( |
91 id, this.selectAudioStream_.bind(this, streams[id]))); | 93 id, this.selectAudioStream_.bind(this, streams[id]))); |
92 this.audioStreamListElement.appendChild(li); | 94 this.audioStreamListElement.appendChild(li); |
93 } | 95 } |
94 }, | 96 }, |
95 | 97 |
96 selectAudioStream_: function(audioStream) { | 98 selectAudioStream_: function(audioStream) { |
97 this.selectedStream = audioStream; | 99 this.selectedStream = audioStream; |
98 this.selectedPlayer = null; | 100 this.selectedPlayer = null; |
99 this.drawProperties_(audioStream); | 101 this.drawProperties_(audioStream); |
100 removeChildren(this.logTable.querySelector('tbody')); | 102 removeChildren(this.logTable.querySelector('tbody')); |
103 removeChildren(this.graphElement); | |
101 }, | 104 }, |
102 | 105 |
103 redrawPlayerList_: function(players) { | 106 redrawPlayerList_: function(players) { |
104 removeChildren(this.playerListElement); | 107 removeChildren(this.playerListElement); |
105 | 108 |
106 for (id in players) { | 109 for (id in players) { |
107 var li = document.createElement('li'); | 110 var li = document.createElement('li'); |
108 var player = players[id]; | 111 var player = players[id]; |
109 var usableName = player.properties.name || | 112 var usableName = player.properties.name || |
110 player.properties.url || | 113 player.properties.url || |
111 'player ' + player.id; | 114 'player ' + player.id; |
112 | 115 |
113 li.appendChild(createButton( | 116 li.appendChild(createButton( |
114 usableName, this.selectPlayer_.bind(this, player))); | 117 usableName, this.selectPlayer_.bind(this, player))); |
115 this.playerListElement.appendChild(li); | 118 this.playerListElement.appendChild(li); |
116 } | 119 } |
117 }, | 120 }, |
118 | 121 |
119 selectPlayer_: function(player) { | 122 selectPlayer_: function(player) { |
120 this.selectedPlayer = player; | 123 this.selectedPlayer = player; |
121 this.selectedPlayerLogIndex = 0; | 124 this.selectedPlayerLogIndex = 0; |
122 this.selectedStream = null; | 125 this.selectedStream = null; |
123 this.drawProperties_(player.properties); | 126 this.drawProperties_(player.properties); |
124 | 127 |
125 removeChildren(this.logTable.querySelector('tbody')); | 128 removeChildren(this.logTable.querySelector('tbody')); |
129 removeChildren(this.graphElement); | |
126 this.drawLog_(); | 130 this.drawLog_(); |
131 this.drawGraphs_(); | |
127 }, | 132 }, |
128 | 133 |
129 drawProperties_: function(propertyMap) { | 134 drawProperties_: function(propertyMap) { |
130 removeChildren(this.propertiesTable); | 135 removeChildren(this.propertiesTable); |
131 | 136 |
132 for (key in propertyMap) { | 137 for (key in propertyMap) { |
133 var value = propertyMap[key]; | 138 var value = propertyMap[key]; |
139 | |
134 var row = this.propertiesTable.insertRow(-1); | 140 var row = this.propertiesTable.insertRow(-1); |
135 var keyCell = row.insertCell(-1); | 141 var keyCell = row.insertCell(-1); |
136 var valueCell = row.insertCell(-1); | 142 var valueCell = row.insertCell(-1); |
137 | 143 |
138 keyCell.appendChild(document.createTextNode(key)); | 144 keyCell.appendChild(document.createTextNode(key)); |
139 valueCell.appendChild(document.createTextNode(value)); | 145 valueCell.appendChild(document.createTextNode(value)); |
140 } | 146 } |
141 }, | 147 }, |
142 | 148 |
143 appendEventToLog_: function(event) { | 149 appendEventToLog_: function(event) { |
144 var row = this.logTable.querySelector('tbody').insertRow(-1); | 150 var row = this.logTable.querySelector('tbody').insertRow(-1); |
145 | 151 |
146 row.insertCell(-1).appendChild(document.createTextNode( | 152 row.insertCell(-1).appendChild(document.createTextNode( |
147 util.millisecondsToString(event.time))); | 153 util.millisecondsToString(event.time))); |
148 row.insertCell(-1).appendChild(document.createTextNode(event.key)); | 154 row.insertCell(-1).appendChild(document.createTextNode(event.key)); |
149 row.insertCell(-1).appendChild(document.createTextNode(event.value)); | 155 row.insertCell(-1).appendChild(document.createTextNode(event.value)); |
150 }, | 156 }, |
151 | 157 |
152 drawLog_: function() { | 158 drawLog_: function() { |
153 var toDraw = this.selectedPlayer.allEvents.slice( | 159 var toDraw = this.selectedPlayer.allEvents.slice( |
154 this.selectedPlayerLogIndex); | 160 this.selectedPlayerLogIndex); |
155 toDraw.forEach(this.appendEventToLog_.bind(this)); | 161 toDraw.forEach(this.appendEventToLog_.bind(this)); |
156 this.selectedPlayerLogIndex = this.selectedPlayer.allEvents.length; | 162 this.selectedPlayerLogIndex = this.selectedPlayer.allEvents.length; |
157 } | 163 }, |
scherkus (not reviewing)
2013/09/04 23:20:53
nit: add blank line after this
Ty Overby
2013/09/05 21:01:02
Done.
| |
164 drawGraphs_: function() { | |
165 removeChildren(this.graphElement); | |
scherkus (not reviewing)
2013/09/04 23:20:53
think we can get away with recreating the graphs D
Ty Overby
2013/09/05 21:01:02
I did it a tad differently, but to the same effect
| |
166 | |
167 var addToGraphs = (function(name, graph) { | |
168 var li = document.createElement('li'); | |
169 li.appendChild(graph); | |
170 li.appendChild(document.createTextNode(name)); | |
171 this.graphElement.appendChild(li); | |
172 }).bind(this); | |
173 | |
174 if (this.selectedPlayer && this.selectedPlayer.properties.url) { | |
scherkus (not reviewing)
2013/09/04 23:20:53
it looks like this.selectedPlayer should always be
Ty Overby
2013/09/05 21:01:02
Yep, check can be removed.
Done.
| |
175 var url = this.selectedPlayer.properties.url; | |
176 var cache = media.cacheForUrl(url); | |
177 | |
178 var player = this.selectedPlayer; | |
179 var props = player.properties; | |
180 | |
181 if (props['buffer_start'] !== undefined && | |
182 props['buffer_current'] !== undefined && | |
183 props['buffer_end'] !== undefined && | |
184 props['total_bytes'] !== undefined) { | |
185 addToGraphs('buffer', | |
186 this.drawBufferGraph_(props['buffer_start'], | |
187 props['buffer_current'], | |
188 props['buffer_end'], | |
189 props['total_bytes'])); | |
190 } | |
191 | |
192 if (cache) { | |
193 addToGraphs('cache read', cache.readCanvas); | |
194 addToGraphs('cache write', cache.writeCanvas); | |
195 | |
196 cache.size = cache.size || +player.properties['total_bytes']; | |
197 cache.generateDetails(); | |
198 } | |
199 } | |
200 }, | |
scherkus (not reviewing)
2013/09/04 23:20:53
add blank line after
Ty Overby
2013/09/05 21:01:02
Done.
| |
201 drawBufferGraph_: (function() { | |
202 // Make a single canvas element for every buffer-graph to be drawn on | |
203 // and close over it with a module. | |
scherkus (not reviewing)
2013/09/04 23:20:53
any reason not to use a member variable canvas ver
Ty Overby
2013/09/05 21:01:02
Yeah, I agree, I thought it was going to be cleane
| |
204 var canvas = document.createElement('canvas'); | |
205 canvas.width = media.BAR_WIDTH; | |
206 canvas.height = media.BAR_HEIGHT; | |
207 | |
208 var ctx = canvas.getContext('2d'); | |
209 return function(start, current, end, size) { | |
210 | |
211 ctx.fillStyle = '#aaa'; | |
212 ctx.fillRect(0, 0, canvas.width, canvas.height); | |
213 | |
214 var scale_factor = canvas.width / size; | |
215 var left = start * scale_factor; | |
216 var middle = current * scale_factor; | |
217 var right = end * scale_factor; | |
218 | |
219 ctx.fillStyle = '#a0a'; | |
220 ctx.fillRect(left, 0, middle - left, canvas.height); | |
221 ctx.fillStyle = '#aa0'; | |
222 ctx.fillRect(middle, 0, right - middle, canvas.height); | |
223 | |
224 return canvas; | |
225 } | |
226 })() | |
158 }; | 227 }; |
159 | 228 |
160 return ClientRenderer; | 229 return ClientRenderer; |
161 })(); | 230 })(); |
OLD | NEW |