Chromium Code Reviews| 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 2057fa8f73569452296783eef76705073de58fcd..5fb7c9004b82de31d58744b34beb0f6f48c793dd 100644 |
| --- a/content/browser/renderer_host/media/audio_renderer_host.cc |
| +++ b/content/browser/renderer_host/media/audio_renderer_host.cc |
| @@ -16,6 +16,7 @@ |
| #include "content/browser/media/capture/audio_mirroring_manager.h" |
| #include "content/browser/media/media_internals.h" |
| #include "content/browser/renderer_host/media/audio_input_device_manager.h" |
| +#include "content/browser/renderer_host/media/audio_stream_registry.h" |
| #include "content/browser/renderer_host/media/audio_sync_reader.h" |
| #include "content/browser/renderer_host/media/media_stream_manager.h" |
| #include "content/common/media/audio_messages.h" |
| @@ -24,7 +25,6 @@ |
| #include "content/public/browser/media_observer.h" |
| #include "content/public/browser/render_frame_host.h" |
| #include "media/audio/audio_device_description.h" |
| -#include "media/audio/audio_streams_tracker.h" |
| #include "media/base/audio_bus.h" |
| #include "media/base/limits.h" |
| @@ -35,21 +35,6 @@ namespace content { |
| namespace { |
| -// Tracks the maximum number of simultaneous output streams browser-wide. |
| -// Accessed on IO thread. |
| -base::LazyInstance<media::AudioStreamsTracker> g_audio_streams_tracker = |
| - LAZY_INSTANCE_INITIALIZER; |
| - |
| -void NotifyRenderProcessHostThatAudioStateChanged(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->AudioStateChanged(); |
| -} |
| - |
| void UMALogDeviceAuthorizationTime(base::TimeTicks auth_start_time) { |
| UMA_HISTOGRAM_CUSTOM_TIMES("Media.Audio.OutputDeviceAuthorizationTime", |
| base::TimeTicks::Now() - auth_start_time, |
| @@ -75,19 +60,19 @@ void ValidateRenderFrameId(int render_process_id, |
| // AudioRendererHost implementations. |
| AudioRendererHost::AudioRendererHost(int render_process_id, |
| + AudioStreamRegistry* stream_registry, |
| media::AudioManager* audio_manager, |
| AudioMirroringManager* mirroring_manager, |
| MediaStreamManager* media_stream_manager, |
| const std::string& salt) |
| : BrowserMessageFilter(AudioMsgStart), |
| render_process_id_(render_process_id), |
| + stream_registry_(stream_registry), |
| audio_manager_(audio_manager), |
| mirroring_manager_(mirroring_manager), |
| media_stream_manager_(media_stream_manager), |
| - num_playing_streams_(0), |
| salt_(salt), |
| validate_render_frame_id_function_(&ValidateRenderFrameId), |
| - max_simultaneous_streams_(0), |
| authorization_handler_(audio_manager_, |
| media_stream_manager, |
| render_process_id_, |
| @@ -98,19 +83,6 @@ AudioRendererHost::AudioRendererHost(int render_process_id, |
| AudioRendererHost::~AudioRendererHost() { |
| DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| DCHECK(delegates_.empty()); |
| - |
| - // 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 (max_simultaneous_streams_ > 0) { |
| - UMA_HISTOGRAM_CUSTOM_COUNTS("Media.AudioRendererIpcStreams", |
| - max_simultaneous_streams_, 1, 50, 51); |
| - UMA_HISTOGRAM_CUSTOM_COUNTS( |
| - "Media.AudioRendererIpcStreamsTotal", |
| - g_audio_streams_tracker.Get().max_stream_count(), |
| - 1, 100, 101); |
| - g_audio_streams_tracker.Get().ResetMaxStreamCount(); |
| - } |
| } |
| void AudioRendererHost::GetOutputControllers( |
| @@ -123,11 +95,12 @@ void AudioRendererHost::GetOutputControllers( |
| void AudioRendererHost::OnChannelClosing() { |
| DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| + |
| // Since the IPC sender is gone, close all requested audio streams. |
| - // The audio streams tracker isn't automatically decremented since the |
| - // removal isn't done through OnCloseStream. |
| - g_audio_streams_tracker.Get().DecreaseStreamCount(delegates_.size()); |
| + size_t num_delegates = delegates_.size(); |
| delegates_.clear(); |
| + for (size_t i = 0; i < num_delegates; ++i) |
| + stream_registry_->DeregisterStream(); |
| // Remove any authorizations for streams that were not yet created |
| authorizations_.clear(); |
| @@ -343,15 +316,11 @@ void AudioRendererHost::OnCreateStream(int stream_id, |
| media::AudioLogFactory::AUDIO_OUTPUT_CONTROLLER); |
| media_internals->SetWebContentsTitleForAudioLogEntry( |
| stream_id, render_process_id_, render_frame_id, audio_log.get()); |
| + stream_registry_->RegisterStream(); |
|
DaleCurtis
2017/01/12 19:22:12
Typically we'd return a bound id or something here
|
| delegates_.push_back(AudioOutputDelegate::Create( |
| this, audio_manager_, std::move(audio_log), mirroring_manager_, |
| media_observer, stream_id, render_frame_id, render_process_id_, params, |
| device_unique_id)); |
| - |
| - g_audio_streams_tracker.Get().IncreaseStreamCount(); |
| - |
| - if (delegates_.size() > max_simultaneous_streams_) |
| - max_simultaneous_streams_ = delegates_.size(); |
| } |
| void AudioRendererHost::OnPlayStream(int stream_id) { |
| @@ -410,8 +379,7 @@ void AudioRendererHost::OnCloseStream(int stream_id) { |
| std::swap(*i, delegates_.back()); |
| delegates_.pop_back(); |
| - |
| - g_audio_streams_tracker.Get().DecreaseStreamCount(); |
| + stream_registry_->DeregisterStream(); |
| } |
| AudioRendererHost::AudioOutputDelegateVector::iterator |
| @@ -433,27 +401,8 @@ AudioOutputDelegate* AudioRendererHost::LookupById(int stream_id) { |
| void AudioRendererHost::OnStreamStateChanged(bool is_playing) { |
| DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| - if (is_playing) { |
| - base::AtomicRefCountInc(&num_playing_streams_); |
| - |
| - // Inform the RenderProcessHost when audio starts playing for the first |
| - // time. The nonatomic increment-and-read is ok since this is the only |
| - // thread that |num_plaing_streams_| may be updated on. |
| - if (base::AtomicRefCountIsOne(&num_playing_streams_)) { |
| - BrowserThread::PostTask( |
| - BrowserThread::UI, FROM_HERE, |
| - base::Bind(&NotifyRenderProcessHostThatAudioStateChanged, |
| - render_process_id_)); |
| - } |
| - } else { |
| - // Inform the RenderProcessHost when there is no more audio playing. |
| - if (!base::AtomicRefCountDec(&num_playing_streams_)) { |
| - BrowserThread::PostTask( |
| - BrowserThread::UI, FROM_HERE, |
| - base::Bind(&NotifyRenderProcessHostThatAudioStateChanged, |
| - render_process_id_)); |
| - } |
| - } |
| + |
| + stream_registry_->StreamStateChanged(is_playing); |
| } |
| bool AudioRendererHost::IsAuthorizationStarted(int stream_id) { |
| @@ -461,10 +410,6 @@ bool AudioRendererHost::IsAuthorizationStarted(int stream_id) { |
| return authorizations_.find(stream_id) != authorizations_.end(); |
| } |
| -bool AudioRendererHost::HasActiveAudio() { |
| - return !base::AtomicRefCountIsZero(&num_playing_streams_); |
| -} |
| - |
| void AudioRendererHost::OverrideDevicePermissionsForTesting(bool has_access) { |
| authorization_handler_.OverridePermissionsForTesting(has_access); |
| } |