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

Side by Side Diff: content/renderer/media/audio_renderer_sink_cache_impl.cc

Issue 2120273004: Getting rid of AudioHardwareConfig and its synchronous IPC. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: frame id fix Created 4 years, 5 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <algorithm> 5 #include <algorithm>
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/location.h" 8 #include "base/location.h"
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "base/synchronization/lock.h" 10 #include "base/synchronization/lock.h"
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 << " - used session to create new sink."; 72 << " - used session to create new sink.";
73 73
74 // Cache a newly-created sink. 74 // Cache a newly-created sink.
75 base::AutoLock auto_lock(cache_lock_); 75 base::AutoLock auto_lock(cache_lock_);
76 cache_.push_back(cache_entry); 76 cache_.push_back(cache_entry);
77 77
78 } else { 78 } else {
79 // Ignore session id. 79 // Ignore session id.
80 base::AutoLock auto_lock(cache_lock_); 80 base::AutoLock auto_lock(cache_lock_);
81 81
82 auto cache_iter = 82 if (media::AudioDeviceDescription::IsDefaultDevice(device_id)) {
83 FindCacheEntry_Locked(source_render_frame_id, device_id, 83 if (default_device_info_)
84 security_origin, false /* unused_only */); 84 return default_device_info_.value();
85 85
86 if (cache_iter != cache_.end()) { 86 // Otherwise, there is no default device cached.
87 // A matching cached sink is found. 87 DCHECK(FindCacheEntry_Locked(source_render_frame_id, device_id,
88 DVLOG(1) << "GetSinkInfo: address: " << cache_iter->sink.get() 88 security_origin, false) == cache_.end());
89 << " - reused a cached sink."; 89 } else {
90 // Looking up a cached non-default device.
91 auto cache_iter = FindCacheEntry_Locked(source_render_frame_id, device_id,
92 security_origin, false);
90 93
91 return cache_iter->sink->GetOutputDeviceInfo(); 94 if (cache_iter != cache_.end()) {
95 // A matching cached sink is found.
96 DVLOG(1) << "GetSinkInfo: address: " << cache_iter->sink.get()
97 << " - reused a cached sink.";
98
99 return cache_iter->sink->GetOutputDeviceInfo();
100 }
92 } 101 }
93 102
94 // No matching sink found, create a new one. 103 // No matching sink found, create a new one.
95 cache_entry.device_id = device_id; 104 cache_entry.device_id = device_id;
96 cache_entry.sink = create_sink_cb_.Run( 105 cache_entry.sink = create_sink_cb_.Run(
97 source_render_frame_id, 0 /* session_id */, device_id, security_origin); 106 source_render_frame_id, 0 /* session_id */, device_id, security_origin);
98 107
99 DVLOG(1) << "GetSinkInfo: address: " << cache_entry.sink.get() 108 DVLOG(1) << "GetSinkInfo: address: " << cache_entry.sink.get()
100 << " - no matching cached sink found, created a new one."; 109 << " - no matching cached sink found, created a new one.";
101 110
102 // Cache a newly-created sink. 111 // Cache a newly-created sink.
103 cache_.push_back(cache_entry); 112 cache_.push_back(cache_entry);
113
114 // Cache information for default output device.
DaleCurtis 2016/07/06 18:53:37 Do we want to cache this? We'll carry over bugs ar
o1ka 2016/07/13 09:52:41 removed
115 if (media::AudioDeviceDescription::IsDefaultDevice(device_id))
116 default_device_info_ = cache_entry.sink->GetOutputDeviceInfo();
104 } 117 }
105 118
106 // Schedule it for deletion. 119 // Schedule it for deletion.
107 DeleteLaterIfUnused(cache_entry.sink.get()); 120 DeleteLaterIfUnused(cache_entry.sink.get());
108 121
109 DVLOG(1) << "GetSinkInfo: address: " << cache_entry.sink.get() 122 DVLOG(1) << "GetSinkInfo: address: " << cache_entry.sink.get()
110 << " created. source_render_frame_id: " << source_render_frame_id 123 << " created. source_render_frame_id: " << source_render_frame_id
111 << " session_id: " << session_id << " device_id: " << device_id 124 << " session_id: " << session_id << " device_id: " << device_id
112 << " security_origin: " << security_origin; 125 << " security_origin: " << security_origin;
113 126
114 return cache_entry.sink->GetOutputDeviceInfo(); 127 return cache_entry.sink->GetOutputDeviceInfo();
115 } 128 }
116 129
117 scoped_refptr<media::AudioRendererSink> AudioRendererSinkCacheImpl::GetSink( 130 scoped_refptr<media::AudioRendererSink> AudioRendererSinkCacheImpl::GetSink(
118 int source_render_frame_id, 131 int source_render_frame_id,
119 const std::string& device_id, 132 const std::string& device_id,
120 const url::Origin& security_origin) { 133 const url::Origin& security_origin) {
121 base::AutoLock auto_lock(cache_lock_); 134 base::AutoLock auto_lock(cache_lock_);
122 135
123 auto cache_iter = 136 auto cache_iter =
124 FindCacheEntry_Locked(source_render_frame_id, device_id, security_origin, 137 FindCacheEntry_Locked(source_render_frame_id, device_id, security_origin,
125 true /* unused_only */); 138 true /* unused sink only */);
126 139
127 if (cache_iter != cache_.end()) { 140 if (cache_iter != cache_.end()) {
128 // Found unused sink; mark it as used and return. 141 // Found unused sink; mark it as used and return.
129 DVLOG(1) << "GetSink: address: " << cache_iter->sink.get() 142 DVLOG(1) << "GetSink: address: " << cache_iter->sink.get()
130 << " - found unused cached sink, reusing it."; 143 << " - found unused cached sink, reusing it.";
131 144
132 cache_iter->used = true; 145 cache_iter->used = true;
133 return cache_iter->sink; 146 return cache_iter->sink;
134 } 147 }
135 148
136 // No unused sink is found, create one, mark it used, cache it and return. 149 // No unused sink is found, create one, mark it used, cache it and return.
137 CacheEntry cache_entry = { 150 CacheEntry cache_entry = {
138 source_render_frame_id, device_id, security_origin, 151 source_render_frame_id, device_id, security_origin,
139 create_sink_cb_.Run(source_render_frame_id, 0 /* session_id */, device_id, 152 create_sink_cb_.Run(source_render_frame_id, 0 /* session_id */, device_id,
140 security_origin), 153 security_origin),
141 true /* used */}; 154 true /* used */};
142 155
143 cache_.push_back(cache_entry); 156 cache_.push_back(cache_entry);
144 157
158 // Update cached information for default output device.
159 if (media::AudioDeviceDescription::IsDefaultDevice(device_id))
160 default_device_info_ = cache_entry.sink->GetOutputDeviceInfo();
161
145 DVLOG(1) << "GetSink: address: " << cache_entry.sink.get() 162 DVLOG(1) << "GetSink: address: " << cache_entry.sink.get()
146 << " - no unused cached sink found, created a new one." 163 << " - no unused cached sink found, created a new one."
147 << " source_render_frame_id: " << source_render_frame_id 164 << " source_render_frame_id: " << source_render_frame_id
148 << " device_id: " << device_id 165 << " device_id: " << device_id
149 << " security_origin: " << security_origin; 166 << " security_origin: " << security_origin;
150 return cache_entry.sink; 167 return cache_entry.sink;
151 } 168 }
152 169
153 void AudioRendererSinkCacheImpl::ReleaseSink( 170 void AudioRendererSinkCacheImpl::ReleaseSink(
154 const media::AudioRendererSink* sink_ptr) { 171 const media::AudioRendererSink* sink_ptr) {
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 return val.device_id == device_id && 261 return val.device_id == device_id &&
245 val.security_origin == security_origin; 262 val.security_origin == security_origin;
246 }); 263 });
247 }; 264 };
248 265
249 int AudioRendererSinkCacheImpl::GetCacheSizeForTesting() { 266 int AudioRendererSinkCacheImpl::GetCacheSizeForTesting() {
250 return cache_.size(); 267 return cache_.size();
251 } 268 }
252 269
253 } // namespace content 270 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698