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..8daceca8406dcd6047c5bbefd18312919510dc41 100644 |
| --- a/chrome/browser/resources/media_internals/media_internals.js |
| +++ b/chrome/browser/resources/media_internals/media_internals.js |
| @@ -3,14 +3,21 @@ |
| // 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() { |
| // 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 = {}; |
| @@ -25,6 +32,10 @@ cr.define('media', function() { |
| // The <div>s on the page in which to display information. |
| var audioStreamDiv; |
| var cacheDiv; |
| + var mediaPlayerDiv; |
| + |
| + // 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. |
| @@ -32,6 +43,8 @@ cr.define('media', function() { |
| initialize = function() { |
| audioStreamDiv = document.getElementById('audio-streams'); |
| cacheDiv = document.getElementById('cache-entries'); |
| + mediaPlayerDiv = document.getElementById('media-players'); |
| + |
| // Get information about all currently active media. |
| chrome.send('getEverything'); |
| }; |
| @@ -68,6 +81,20 @@ cr.define('media', function() { |
| }; |
| /** |
| + * Write the set of media players to the DOM. |
| + */ |
| + printMediaPlayers = function() { |
|
arv (Not doing code reviews)
2011/08/16 19:29:03
missing var here and in other places
Scott Franklin
2011/08/16 23:33:52
Done.
|
| + var out = document.createElement('ul'); |
| + for (id in mediaPlayers) |
|
arv (Not doing code reviews)
2011/08/16 19:29:03
missing var
Maybe you should swith to strict mode
Scott Franklin
2011/08/16 23:33:52
Done.
|
| + out.appendChild(mediaPlayers[id].toListItem()); |
| + |
| + mediaPlayerDiv.textContent = ''; |
| + mediaPlayerDiv.appendChild(out); |
| + |
| + redrawTimer = null; |
| + }; |
| + |
| + /** |
| * Write the set of sparse CacheEntries to the DOM. |
| */ |
| printSparseCacheEntries = function() { |
| @@ -118,6 +145,18 @@ cr.define('media', function() { |
| }; |
| /** |
| + * A render process has ended, delete any media players associated with it. |
| + * @param {int} renderer The id of the render process. |
| + */ |
| + onRendererTerminated = function(renderer) { |
| + for (var key in mediaPlayers) { |
| + if (mediaPlayers[key].renderer == renderer) |
| + 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. |
| @@ -166,7 +205,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]; |
| @@ -194,13 +233,43 @@ cr.define('media', function() { |
| eventPhases[phases[p]] = p; |
| }; |
| + /** |
| + * Receiving notification of a media event. |
| + * @param {Object} event The json representation of a MediaLog::Event. |
| + */ |
| + onMediaEvent = function(event) { |
| + // List everything in miliseconds. |
| + event.time *= 1000; |
| + |
| + var source = event.renderer + ':' + event.player; |
| + var item = mediaPlayers[source] || |
| + new media.MediaPlayer(source, event.renderer); |
| + 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); |
|
arv (Not doing code reviews)
2011/08/16 19:29:03
Don't use string based setTimout since it is a glo
Scott Franklin
2011/08/16 23:33:52
Done.
|
| + }; |
| + |
| return { |
| initialize: initialize, |
| addAudioStream: addAudioStream, |
| + cacheEntriesByKey: cacheEntriesByKey, |
| onReceiveEverything: onReceiveEverything, |
| onItemDeleted: onItemDeleted, |
| + onRendererTerminated: onRendererTerminated, |
| onNetUpdate: onNetUpdate, |
| onReceiveConstants: onReceiveConstants, |
| + onMediaEvent: onMediaEvent, |
| }; |
| }); |