Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(40)

Side by Side Diff: content/browser/resources/media/new/client_renderer.js

Issue 23536020: Adds cache and buffer graphs to the properties pane. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: cleaned up code Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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 })();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698