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, |
}; |
}); |