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..4f8c4c6a667c69646a33e7d281d57b5c95b801b9 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( |
@@ -124,9 +96,6 @@ 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()); |
delegates_.clear(); |
// Remove any authorizations for streams that were not yet created |
@@ -344,14 +313,9 @@ void AudioRendererHost::OnCreateStream(int stream_id, |
media_internals->SetWebContentsTitleForAudioLogEntry( |
stream_id, render_process_id_, render_frame_id, audio_log.get()); |
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(); |
+ this, stream_registry_, audio_manager_, std::move(audio_log), |
+ mirroring_manager_, media_observer, stream_id, render_frame_id, |
+ render_process_id_, params, device_unique_id)); |
} |
void AudioRendererHost::OnPlayStream(int stream_id) { |
@@ -410,8 +374,6 @@ void AudioRendererHost::OnCloseStream(int stream_id) { |
std::swap(*i, delegates_.back()); |
delegates_.pop_back(); |
- |
- g_audio_streams_tracker.Get().DecreaseStreamCount(); |
} |
AudioRendererHost::AudioOutputDelegateVector::iterator |
@@ -431,40 +393,11 @@ AudioOutputDelegate* AudioRendererHost::LookupById(int stream_id) { |
return i != delegates_.end() ? i->get() : nullptr; |
} |
-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_)); |
- } |
- } |
-} |
- |
bool AudioRendererHost::IsAuthorizationStarted(int stream_id) { |
DCHECK_CURRENTLY_ON(BrowserThread::IO); |
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); |
} |