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

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: changed how tests and cr.js are loaded and interact 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;
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
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 }
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 })();
OLDNEW
« no previous file with comments | « content/browser/resources/media/cache_entry.js ('k') | content/browser/resources/media/new/main.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698