Index: content/browser/renderer_host/render_process_host_impl.cc |
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc |
index 4a3b2c7ce211d146e0517b63d327e78a2d0cbd5e..286e15c15299b48c04d8dc42ead347c6d6d68654 100644 |
--- a/content/browser/renderer_host/render_process_host_impl.cc |
+++ b/content/browser/renderer_host/render_process_host_impl.cc |
@@ -319,6 +319,11 @@ bool has_done_stun_trials = false; |
#endif |
+// Tracks the maximum number of simultaneous output streams browser-wide. |
+// Accessed on UI thread. |
+base::LazyInstance<media::AudioStreamsTracker> g_audio_streams_tracker = |
+ LAZY_INSTANCE_INITIALIZER; |
+ |
// the global list of all renderer processes |
base::LazyInstance<IDMap<RenderProcessHost*>>::Leaky g_all_hosts = |
LAZY_INSTANCE_INITIALIZER; |
@@ -782,6 +787,19 @@ RenderProcessHostImpl::~RenderProcessHostImpl() { |
BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
base::Bind(&RemoveShaderInfo, GetID())); |
} |
+ |
+ // If we had any streams, report UMA stats for the maximum number of |
+ // simultaneous streams for this render process and for the whole browser |
+ // process since last reported. |
+ if (audio_streams_tracker_.max_stream_count() > 0) { |
+ UMA_HISTOGRAM_CUSTOM_COUNTS("Media.AudioRendererIpcStreams", |
+ audio_streams_tracker_.max_stream_count(), 1, |
+ 50, 51); |
+ UMA_HISTOGRAM_CUSTOM_COUNTS( |
+ "Media.AudioRendererIpcStreamsTotal", |
+ g_audio_streams_tracker.Get().max_stream_count(), 1, 100, 101); |
ncarter (slow)
2017/01/31 18:33:12
This logging used to happen each time a MessageFil
DaleCurtis
2017/01/31 22:08:31
Ah, I didn't know multiple sets of MessageFilter's
Henrik Grunell
2017/02/03 08:52:20
Sorry Dale, I missed that I was supposed to reply
DaleCurtis
2017/02/06 22:19:02
Deleted, thanks!
|
+ g_audio_streams_tracker.Get().ResetMaxStreamCount(); |
+ } |
} |
bool RenderProcessHostImpl::Init() { |
@@ -1555,7 +1573,15 @@ int RenderProcessHostImpl::VisibleWidgetCount() const { |
return visible_widgets_; |
} |
-void RenderProcessHostImpl::AudioStateChanged() { |
+void RenderProcessHostImpl::OnAudioStreamAdded() { |
+ audio_streams_tracker_.IncreaseStreamCount(); |
+ g_audio_streams_tracker.Get().IncreaseStreamCount(); |
+ UpdateProcessPriority(); |
Max Morin
2017/01/30 11:47:07
It probably makes sense to only UpdateProcessPrior
DaleCurtis
2017/02/06 22:19:02
UpdateProcessPriority() takes care of this.
|
+} |
+ |
+void RenderProcessHostImpl::OnAudioStreamRemoved() { |
+ audio_streams_tracker_.DecreaseStreamCount(); |
+ g_audio_streams_tracker.Get().DecreaseStreamCount(); |
UpdateProcessPriority(); |
} |
@@ -2815,7 +2841,7 @@ void RenderProcessHostImpl::UpdateProcessPriority() { |
// visible widgets -- the callers must call this function whenever we |
// transition in/out of those states. |
const bool should_background = |
- visible_widgets_ == 0 && !audio_renderer_host_->HasActiveAudio() && |
+ visible_widgets_ == 0 && !audio_streams_tracker_.has_streams() && |
!base::CommandLine::ForCurrentProcess()->HasSwitch( |
switches::kDisableRendererBackgrounding); |