Index: content/browser/media/media_internals.cc |
diff --git a/content/browser/media/media_internals.cc b/content/browser/media/media_internals.cc |
index 7f4d62ec96203080e2d9dc8065a1a2ff204c0560..ae4e67b82c0fe930f07a9099057bb8ef0f9a96df 100644 |
--- a/content/browser/media/media_internals.cc |
+++ b/content/browser/media/media_internals.cc |
@@ -321,7 +321,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, |
@@ -450,6 +450,7 @@ void MediaInternals::MediaInternalsUMAHandler::LogAndClearPlayersInRenderer( |
ReportUMAForPipelineStatus(it->second); |
players_it->second.erase(it++); |
} |
+ renderer_info_.erase(players_it); |
} |
MediaInternals* MediaInternals::GetInstance() { |
@@ -497,6 +498,9 @@ void MediaInternals::OnMediaEvents( |
if (CanUpdate()) |
SendUpdate(SerializeUpdate("media.onMediaEvent", &dict)); |
+ else |
+ SaveUpdate(SerializeUpdate("media.onMediaEvent", &dict)); |
+ |
uma_handler_->SavePlayerState(*event, render_process_id); |
} |
} |
@@ -527,6 +531,14 @@ bool MediaInternals::CanUpdate() { |
return can_update_; |
} |
+void MediaInternals::SendHistoricalMediaEvents() { |
+ DCHECK_CURRENTLY_ON(BrowserThread::UI); |
+ base::AutoLock auto_lock(lock_); |
+ for (const auto& update : pending_updates_) |
+ SendUpdate(update); |
+ pending_updates_.clear(); |
+} |
+ |
void MediaInternals::SendAudioStreamData() { |
base::string16 audio_stream_update; |
{ |
@@ -601,6 +613,17 @@ void MediaInternals::SendUpdate(const base::string16& update) { |
update_callbacks_[i].Run(update); |
} |
+void MediaInternals::SaveUpdate(const base::string16& update) { |
+ DCHECK_CURRENTLY_ON(BrowserThread::IO); |
+ |
+ static const size_t kMaxNumUpdates = 2048; |
DaleCurtis
2015/06/09 16:41:32
Usually just const at function scope.
xhwang
2015/06/09 20:37:57
Done.
|
+ |
+ base::AutoLock auto_lock(lock_); |
+ if (pending_updates_.size() >= kMaxNumUpdates) |
+ pending_updates_.pop_front(); |
+ pending_updates_.push_back(update); |
+} |
+ |
void MediaInternals::SendAudioLogUpdate(AudioLogUpdateType type, |
const std::string& cache_key, |
const std::string& function, |