| Index: content/browser/renderer_host/media/audio_renderer_host.cc
|
| diff --git a/content/browser/renderer_host/media/audio_renderer_host.cc b/content/browser/renderer_host/media/audio_renderer_host.cc
|
| index dddeee21626a31f30aff5b4f749c396fcd5024b8..7e09b6a25b815ba60b20410a6a04222fe46c6a5b 100644
|
| --- a/content/browser/renderer_host/media/audio_renderer_host.cc
|
| +++ b/content/browser/renderer_host/media/audio_renderer_host.cc
|
| @@ -61,6 +61,26 @@ void NotifyResourceDispatcherOfAudioStateChange(int render_process_id,
|
| render_process_id, render_view_id, is_playing);
|
| }
|
|
|
| +void NotifyRenderProcessHostThatAudioStarted(int render_process_id) {
|
| + DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
| +
|
| + RenderProcessHost* render_process_host =
|
| + RenderProcessHost::FromID(render_process_id);
|
| +
|
| + if (render_process_host)
|
| + render_process_host->AudioStarted();
|
| +}
|
| +
|
| +void NotifyRenderProcessHostThatAudioStopped(int render_process_id) {
|
| + DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
| +
|
| + RenderProcessHost* render_process_host =
|
| + RenderProcessHost::FromID(render_process_id);
|
| +
|
| + if (render_process_host)
|
| + render_process_host->AudioStopped();
|
| +}
|
| +
|
| } // namespace
|
|
|
| class AudioRendererHost::AudioEntry
|
| @@ -651,11 +671,26 @@ void AudioRendererHost::UpdateNumPlayingStreams(AudioEntry* entry,
|
| !RenderFrameHasActiveAudio(entry->render_frame_id());
|
| entry->set_playing(true);
|
| base::AtomicRefCountInc(&num_playing_streams_);
|
| +
|
| + // Inform the renderer host when audio starts playing for the first time.
|
| + if (base::AtomicRefCountIsOne(&num_playing_streams_)) {
|
| + BrowserThread::PostTask(
|
| + BrowserThread::UI, FROM_HERE,
|
| + base::Bind(&NotifyRenderProcessHostThatAudioStarted,
|
| + render_process_id_));
|
| + }
|
| } else {
|
| entry->set_playing(false);
|
| should_alert_resource_scheduler =
|
| !RenderFrameHasActiveAudio(entry->render_frame_id());
|
| - base::AtomicRefCountDec(&num_playing_streams_);
|
| +
|
| + // Inform the renderer when there is no more audio playing.
|
| + if (!base::AtomicRefCountDec(&num_playing_streams_)) {
|
| + BrowserThread::PostTask(
|
| + BrowserThread::UI, FROM_HERE,
|
| + base::Bind(&NotifyRenderProcessHostThatAudioStopped,
|
| + render_process_id_));
|
| + }
|
| }
|
|
|
| if (should_alert_resource_scheduler && ResourceDispatcherHostImpl::Get()) {
|
|
|