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

Unified Diff: chrome/browser/resources/media_internals/media_internals.js

Issue 7653001: Display active media players on chrome://media-internals. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 4 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 side-by-side diff with in-line comments
Download patch
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,
};
});

Powered by Google App Engine
This is Rietveld 408576698