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

Unified Diff: content/browser/media/media_internals.cc

Issue 1171503003: Not for submission. Keeping media log events (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Compiles now Created 5 years, 6 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
« no previous file with comments | « content/browser/media/media_internals.h ('k') | content/browser/media/media_internals_proxy.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/media/media_internals.cc
diff --git a/content/browser/media/media_internals.cc b/content/browser/media/media_internals.cc
index f0b071a4e12fb3dda001b9506df53f42b98dec13..af0d3ab659d7f069a0694b9644ac251b409e694d 100644
--- a/content/browser/media/media_internals.cc
+++ b/content/browser/media/media_internals.cc
@@ -264,8 +264,11 @@ class MediaInternals::MediaInternalsUMAHandler : public NotificationObserver {
// Helper function to save the event payload to RendererPlayerMap.
void SavePlayerState(const media::MediaLogEvent& event,
+ const base::string16& event_serialized,
int render_process_id);
+ std::vector<base::string16> GetHistoricalEvents();
+
private:
struct PipelineInfo {
media::PipelineStatus last_pipeline_status;
@@ -276,6 +279,9 @@ class MediaInternals::MediaInternalsUMAHandler : public NotificationObserver {
std::string audio_codec_name;
std::string video_codec_name;
std::string video_decoder;
+ // Remember media log events so that when a new media internals page is
+ // opened they can be replayed.
+ std::vector<base::string16> media_log_event_history;
PipelineInfo()
: last_pipeline_status(media::PIPELINE_OK),
has_audio(false),
@@ -321,7 +327,7 @@ void MediaInternals::MediaInternalsUMAHandler::Observe(
// by both SavePlayerState & LogAndClearPlayersInRenderer from different
// threads.
// Using base::Unretained() on MediaInternalsUMAHandler is safe since
- // it is owned by MediaInternals and share the same lifetime
+ // it is owned by MediaInternals and shares the same lifetime.
BrowserThread::PostTask(
BrowserThread::IO, FROM_HERE,
base::Bind(&MediaInternalsUMAHandler::LogAndClearPlayersInRenderer,
@@ -330,9 +336,12 @@ void MediaInternals::MediaInternalsUMAHandler::Observe(
void MediaInternals::MediaInternalsUMAHandler::SavePlayerState(
const media::MediaLogEvent& event,
+ const base::string16& event_serialized,
int render_process_id) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
PlayerInfoMap& player_info = renderer_info_[render_process_id];
+ // This can grow unbounded..
+ player_info[event.id].media_log_event_history.push_back(event_serialized);
switch (event.type) {
case media::MediaLogEvent::PIPELINE_ERROR: {
int status;
@@ -450,6 +459,23 @@ void MediaInternals::MediaInternalsUMAHandler::LogAndClearPlayersInRenderer(
ReportUMAForPipelineStatus(it->second);
players_it->second.erase(it++);
}
+ renderer_info_.erase(players_it);
+}
+
+std::vector<base::string16>
+MediaInternals::MediaInternalsUMAHandler::GetHistoricalEvents() {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+
+ std::vector<base::string16> all_events;
+ for (const auto& renderer_info_it : renderer_info_) {
+ for (const auto& player_info_it : renderer_info_it.second) {
+ const auto& player_events = player_info_it.second.media_log_event_history;
+ all_events.insert(all_events.end(), player_events.begin(),
+ player_events.end());
+ }
+ }
+
+ return all_events;
}
MediaInternals* MediaInternals::GetInstance() {
@@ -493,8 +519,9 @@ void MediaInternals::OnMediaEvents(
dict.Set("params", event->params.DeepCopy());
}
- SendUpdate(SerializeUpdate("media.onMediaEvent", &dict));
- uma_handler_->SavePlayerState(*event, render_process_id);
+ const base::string16 update(SerializeUpdate("media.onMediaEvent", &dict));
+ SendUpdate(update);
+ uma_handler_->SavePlayerState(*event, update, render_process_id);
}
}
@@ -514,6 +541,12 @@ void MediaInternals::RemoveUpdateCallback(const UpdateCallback& callback) {
NOTREACHED();
}
+void MediaInternals::SendHistoricalMediaEvents() {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ for (const auto& event : uma_handler_->GetHistoricalEvents())
+ SendUpdate(event);
+}
+
void MediaInternals::SendAudioStreamData() {
base::string16 audio_stream_update;
{
« no previous file with comments | « content/browser/media/media_internals.h ('k') | content/browser/media/media_internals_proxy.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698