Chromium Code Reviews| Index: chrome/browser/resources/media_internals/media_internals.js |
| diff --git a/chrome/browser/resources/media_internals/media_internals.js b/chrome/browser/resources/media_internals/media_internals.js |
| index 5d80b289547ec1aa2cc44a2d2848ee461ea0ddb4..b0b5c8bea7c31c871f6beb3edd4cf09a7c23906f 100644 |
| --- a/chrome/browser/resources/media_internals/media_internals.js |
| +++ b/chrome/browser/resources/media_internals/media_internals.js |
| @@ -3,14 +3,22 @@ |
| // found in the LICENSE file. |
| <include src="cache_entry.js"/> |
| -<include src="item_store.js"/> |
| <include src="disjoint_range_set.js"/> |
| +<include src="event_list.js"/> |
| +<include src="item_store.js"/> |
| +<include src="media_player.js"/> |
| +<include src="metrics.js"/> |
| +<include src="util.js"/> |
| cr.define('media', function() { |
| + 'use strict'; |
| // Stores information on open audio streams, referenced by id. |
| var audioStreams = new media.ItemStore; |
| + // Active media players, indexed by 'render_id:player_id'. |
| + var mediaPlayers = {}; |
| + |
| // Cached files indexed by key and source id. |
| var cacheEntriesByKey = {}; |
| var cacheEntries = {}; |
| @@ -26,12 +34,16 @@ cr.define('media', function() { |
| var audioStreamDiv; |
| var cacheDiv; |
| + // A timer used to limit the rate of redrawing the Media Players section. |
| + var redrawTimer = null; |
| + |
| /** |
| * Initialize variables and ask MediaInternals for all its data. |
| */ |
| - initialize = function() { |
| + var initialize = function() { |
|
arv (Not doing code reviews)
2011/09/22 19:26:04
Please use function statement whenever valid (top
scherkus (not reviewing)
2011/09/23 06:52:41
Done.
|
| audioStreamDiv = document.getElementById('audio-streams'); |
| cacheDiv = document.getElementById('cache-entries'); |
| + |
| // Get information about all currently active media. |
| chrome.send('getEverything'); |
| }; |
| @@ -39,14 +51,14 @@ cr.define('media', function() { |
| /** |
| * Write the set of audio streams to the DOM. |
| */ |
| - printAudioStreams = function() { |
| + var printAudioStreams = function() { |
| /** |
| * Render a single stream as a <li>. |
| * @param {Object} stream The stream to render. |
| * @return {HTMLElement} A <li> containing the stream information. |
| */ |
| - printStream = function(stream) { |
| + var printStream = function(stream) { |
| var out = document.createElement('li'); |
| out.id = stream.id; |
| out.className = 'audio-stream'; |
| @@ -68,9 +80,19 @@ cr.define('media', function() { |
| }; |
| /** |
| + * Redraw each MediaPlayer. |
| + */ |
| + var printMediaPlayers = function() { |
| + for (var id in mediaPlayers) { |
| + mediaPlayers[id].redraw(); |
| + } |
| + redrawTimer = null; |
| + }; |
| + |
| + /** |
| * Write the set of sparse CacheEntries to the DOM. |
| */ |
| - printSparseCacheEntries = function() { |
| + var printSparseCacheEntries = function() { |
| var out = document.createElement('ul'); |
| for (var key in cacheEntriesByKey) { |
| if (cacheEntriesByKey[key].sparse) |
| @@ -86,7 +108,7 @@ cr.define('media', function() { |
| * Add it to audioStreams and update the page. |
| * @param {Object} stream JSON representation of an audio stream. |
| */ |
| - addAudioStream = function(stream) { |
| + var addAudioStream = function(stream) { |
| audioStreams.addItem(stream); |
| printAudioStreams(); |
| }; |
| @@ -97,7 +119,7 @@ cr.define('media', function() { |
| * @param {Object} stuff JSON containing lists of data. |
| * @param {Object} stuff.audio_streams A dictionary of audio streams. |
| */ |
| - onReceiveEverything = function(stuff) { |
| + var onReceiveEverything = function(stuff) { |
| audioStreams.addItems(stuff.audio_streams); |
| printAudioStreams(); |
| }; |
| @@ -107,22 +129,36 @@ cr.define('media', function() { |
| * @param {string} id The id of the item to be removed, in the format |
| * "item_type.identifying_info". |
| */ |
| - onItemDeleted = function(id) { |
| + var onItemDeleted = function(id) { |
| var type = id.split('.')[0]; |
| switch (type) { |
| - case 'audio_streams': |
| - audioStreams.removeItem(id); |
| - printAudioStreams(); |
| - break; |
| + case 'audio_streams': |
| + audioStreams.removeItem(id); |
| + printAudioStreams(); |
| + break; |
| } |
| }; |
| /** |
| + * A render process has ended, delete any media players associated with it. |
| + * @param {int} renderer The id of the render process. |
| + */ |
| + var onRendererTerminated = function(renderer) { |
| + for (var key in mediaPlayers) { |
| + if (mediaPlayers[key].renderer == renderer) { |
| + document.getElementById('media-players').removeChild(mediaPlayers[key]); |
| + delete mediaPlayers[key]; |
| + } |
| + } |
| + printMediaPlayers(); |
| + }; |
| + |
| + /** |
| * Receiving net events. |
| * Update cache information and update that section of the page. |
| * @param {Array} updates A list of net events that have occurred. |
| */ |
| - onNetUpdate = function(updates) { |
| + var onNetUpdate = function(updates) { |
| updates.forEach(function(update) { |
| var id = update.source.id; |
| if (!cacheEntries[id]) |
| @@ -166,7 +202,7 @@ cr.define('media', function() { |
| delete requestURLs[update.source.id]; |
| if (range && key) { |
| if (!cacheEntriesByKey[key]) { |
| - cacheEntriesByKey[key] = new CacheEntry; |
| + cacheEntriesByKey[key] = new media.CacheEntry; |
| cacheEntriesByKey[key].key = key; |
| } |
| cacheEntriesByKey[key].size = range[1]; |
| @@ -184,23 +220,55 @@ cr.define('media', function() { |
| * @param {Object} constants.eventTypes A dictionary of event name -> int. |
| * @param {Object} constants.eventPhases A dictionary of event phase -> int. |
| */ |
| - onReceiveConstants = function(constants) { |
| + var onReceiveConstants = function(constants) { |
| var events = constants.eventTypes; |
| - for (var e in events) |
| + for (var e in events) { |
| eventTypes[events[e]] = e; |
| + } |
| var phases = constants.eventPhases; |
| - for (var p in phases) |
| + for (var p in phases) { |
| eventPhases[phases[p]] = p; |
| + } |
| + }; |
| + |
| + /** |
| + * Receiving notification of a media event. |
| + * @param {Object} event The json representation of a MediaLogEvent. |
| + */ |
| + var onMediaEvent = function(event) { |
| + // List everything in miliseconds. |
| + event.time *= 1000; |
| + |
| + var source = event.renderer + ':' + event.player; |
| + var item = mediaPlayers[source] || |
| + new media.MediaPlayer({'id': source, 'renderer': event.renderer}); |
|
arv (Not doing code reviews)
2011/09/22 19:26:04
{id: ..., event: ...}
scherkus (not reviewing)
2011/09/23 06:52:41
Done.
|
| + mediaPlayers[source] = item; |
| + item.addEvent(event); |
| + |
| + // Both media and net events could provide the size of the file. |
| + // Media takes priority, but keep the size in both places synchronized. |
| + if (cacheEntriesByKey[item.properties.url]) { |
| + item.properties.total_bytes = item.properties.total_bytes || |
| + cacheEntriesByKey[item.properties.url].size; |
| + cacheEntriesByKey[item.properties.url].size = item.properties.total_bytes; |
| + } |
| + |
| + // Events tend to arrive in groups; don't redraw the page too often. |
| + if (!redrawTimer) |
| + redrawTimer = setTimeout(printMediaPlayers, 50); |
| }; |
| return { |
| initialize: initialize, |
| addAudioStream: addAudioStream, |
| + cacheEntriesByKey: cacheEntriesByKey, |
| onReceiveEverything: onReceiveEverything, |
| onItemDeleted: onItemDeleted, |
| + onRendererTerminated: onRendererTerminated, |
| onNetUpdate: onNetUpdate, |
| onReceiveConstants: onReceiveConstants, |
| + onMediaEvent: onMediaEvent |
| }; |
| }); |