Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2423)

Unified Diff: content/renderer/media/audio_renderer_mixer_manager.cc

Issue 1942803002: Caching AudioOutputDevice instances in mixer manager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: dalecurtis@'s comments addressed, build issue fixed Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/renderer/media/audio_renderer_mixer_manager.cc
diff --git a/content/renderer/media/audio_renderer_mixer_manager.cc b/content/renderer/media/audio_renderer_mixer_manager.cc
index 75b7ed60f306a71abaf34b8144bf639f0791882f..547e6be8db59b69f59fcb8bb0da8ba7766046ebe 100644
--- a/content/renderer/media/audio_renderer_mixer_manager.cc
+++ b/content/renderer/media/audio_renderer_mixer_manager.cc
@@ -8,8 +8,9 @@
#include "base/bind.h"
#include "base/bind_helpers.h"
+#include "base/memory/ptr_util.h"
#include "build/build_config.h"
-#include "content/renderer/media/audio_device_factory.h"
+#include "content/renderer/media/audio_renderer_sink_cache.h"
#include "media/audio/audio_device_description.h"
#include "media/base/audio_hardware_config.h"
#include "media/base/audio_renderer_mixer.h"
@@ -17,7 +18,17 @@
namespace content {
-AudioRendererMixerManager::AudioRendererMixerManager() {}
+// static
+std::unique_ptr<AudioRendererMixerManager> AudioRendererMixerManager::Create() {
+ return base::WrapUnique(
+ new AudioRendererMixerManager(AudioRendererSinkCache::Create()));
+}
+
+AudioRendererMixerManager::AudioRendererMixerManager(
+ std::unique_ptr<AudioRendererSinkCache> sink_cache)
+ : sink_cache_(std::move(sink_cache)) {
+ DCHECK(sink_cache_);
+}
AudioRendererMixerManager::~AudioRendererMixerManager() {
// References to AudioRendererMixers may be owned by garbage collected
@@ -33,14 +44,11 @@ media::AudioRendererMixerInput* AudioRendererMixerManager::CreateInput(
// base::Unretained() is safe since AudioRendererMixerManager lives on the
miu 2016/05/19 22:27:15 This comment is obsolete now.
o1ka 2016/05/23 16:16:54 Done.
// renderer thread and is destroyed on renderer thread destruction.
return new media::AudioRendererMixerInput(
- base::Bind(&AudioRendererMixerManager::GetMixer, base::Unretained(this),
- source_render_frame_id),
- base::Bind(&AudioRendererMixerManager::RemoveMixer,
- base::Unretained(this), source_render_frame_id),
+ this, source_render_frame_id,
media::AudioDeviceDescription::UseSessionIdToSelectDevice(session_id,
device_id)
- ? AudioDeviceFactory::GetOutputDeviceInfo(
- source_render_frame_id, session_id, device_id, security_origin)
+ ? GetOutputDeviceInfo(source_render_frame_id, session_id, device_id,
+ security_origin)
.device_id()
: device_id,
security_origin);
@@ -69,14 +77,15 @@ media::AudioRendererMixer* AudioRendererMixerManager::GetMixer(
}
scoped_refptr<media::AudioRendererSink> sink =
- AudioDeviceFactory::NewAudioRendererMixerSink(source_render_frame_id, 0,
- device_id, security_origin);
+ sink_cache_->GetSink(source_render_frame_id, device_id, security_origin);
const media::OutputDeviceInfo& device_info = sink->GetOutputDeviceInfo();
if (device_status)
*device_status = device_info.device_status();
if (device_info.device_status() != media::OUTPUT_DEVICE_STATUS_OK) {
sink->Stop();
+ sink_cache_->ReleaseSink(source_render_frame_id, device_id, security_origin,
+ sink.get());
return nullptr;
}
@@ -114,7 +123,7 @@ media::AudioRendererMixer* AudioRendererMixerManager::GetMixer(
return mixer;
}
-void AudioRendererMixerManager::RemoveMixer(
+void AudioRendererMixerManager::ReturnMixer(
int source_render_frame_id,
const media::AudioParameters& params,
const std::string& device_id,
@@ -129,11 +138,23 @@ void AudioRendererMixerManager::RemoveMixer(
// Only remove the mixer if AudioRendererMixerManager is the last owner.
it->second.ref_count--;
if (it->second.ref_count == 0) {
+ // The mixer will be deleted now, so release the sink.
+ sink_cache_->ReleaseSink(source_render_frame_id, device_id, security_origin,
+ it->second.mixer->sink_ptr());
delete it->second.mixer;
mixers_.erase(it);
}
}
+media::OutputDeviceInfo AudioRendererMixerManager::GetOutputDeviceInfo(
+ int source_render_frame_id,
+ int session_id,
+ const std::string& device_id,
+ const url::Origin& security_origin) {
+ return sink_cache_->GetSinkInfo(source_render_frame_id, session_id, device_id,
+ security_origin);
+}
+
AudioRendererMixerManager::MixerKey::MixerKey(
int source_render_frame_id,
const media::AudioParameters& params,

Powered by Google App Engine
This is Rietveld 408576698