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

Side by Side Diff: content/renderer/media/webrtc/webrtc_media_stream_adapter_map.cc

Issue 2946063003: WebRtcMediaStreamAdapterMap added. (Closed)
Patch Set: Reupload from new machine so that dependent patch sets can be made Created 3 years, 6 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
(Empty)
1 // Copyright (c) 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/renderer/media/webrtc/webrtc_media_stream_adapter_map.h"
6
7 namespace content {
8
9 WebRtcMediaStreamAdapterMap::AdapterEntry::AdapterEntry(
10 std::unique_ptr<WebRtcMediaStreamAdapter> adapter)
11 : adapter(std::move(adapter)), ref_count(0) {
12 DCHECK(this->adapter);
13 }
14
15 WebRtcMediaStreamAdapterMap::AdapterEntry::AdapterEntry(AdapterEntry&& other)
16 : adapter(other.adapter.release()), ref_count(other.ref_count) {}
Guido Urdaneta 2017/06/26 10:15:17 why release() and not std::move()?
hbos_chromium 2017/06/26 10:52:52 Because std::move technically leaves adapter in an
17
18 WebRtcMediaStreamAdapterMap::AdapterEntry::~AdapterEntry() {
19 // |ref_count| is allowed to be non-zero only if this entry has been moved
20 // which is the case if the |adapter| has already been released.
21 DCHECK(!ref_count || !adapter);
22 }
23
24 WebRtcMediaStreamAdapterMap::AdapterRef::AdapterRef(
25 scoped_refptr<WebRtcMediaStreamAdapterMap> map,
26 const MapEntryIterator& it)
27 : map_(std::move(map)), it_(it) {
28 DCHECK(map_);
29 DCHECK(map_->main_thread_->BelongsToCurrentThread());
30 DCHECK(it_ != map_->local_stream_adapters_.end());
31 DCHECK(entry()->adapter);
32 ++entry()->ref_count;
33 }
34
35 WebRtcMediaStreamAdapterMap::AdapterRef::~AdapterRef() {
36 DCHECK(map_->main_thread_->BelongsToCurrentThread());
37 if (--entry()->ref_count == 0) {
38 map_->local_stream_adapters_.erase(it_);
39 }
40 }
41
42 WebRtcMediaStreamAdapterMap::WebRtcMediaStreamAdapterMap(
43 PeerConnectionDependencyFactory* const factory,
44 scoped_refptr<WebRtcMediaStreamTrackAdapterMap> track_adapter_map)
45 : factory_(factory),
46 main_thread_(base::ThreadTaskRunnerHandle::Get()),
47 track_adapter_map_(std::move(track_adapter_map)) {
48 DCHECK(factory_);
49 DCHECK(main_thread_);
50 DCHECK(track_adapter_map_);
51 }
52
53 WebRtcMediaStreamAdapterMap::~WebRtcMediaStreamAdapterMap() {
54 DCHECK(main_thread_->BelongsToCurrentThread());
55 DCHECK(local_stream_adapters_.empty());
56 }
57
58 std::unique_ptr<WebRtcMediaStreamAdapterMap::AdapterRef>
59 WebRtcMediaStreamAdapterMap::GetLocalStreamAdapter(const std::string& id) {
60 DCHECK(main_thread_->BelongsToCurrentThread());
61 auto it = local_stream_adapters_.find(id);
62 if (it == local_stream_adapters_.end())
63 return nullptr;
64 return base::WrapUnique(new AdapterRef(this, it));
65 }
66
67 std::unique_ptr<WebRtcMediaStreamAdapterMap::AdapterRef>
68 WebRtcMediaStreamAdapterMap::GetOrCreateLocalStreamAdapter(
69 const blink::WebMediaStream& web_stream) {
70 DCHECK(main_thread_->BelongsToCurrentThread());
71 std::string id = web_stream.Id().Utf8();
72 auto it = local_stream_adapters_.find(id);
73 if (it == local_stream_adapters_.end()) {
74 it = local_stream_adapters_
75 .insert(std::make_pair(
76 id, AdapterEntry(base::MakeUnique<WebRtcMediaStreamAdapter>(
77 factory_, track_adapter_map_, web_stream))))
78 .first;
79 }
80 return base::WrapUnique(new AdapterRef(this, it));
81 }
82
83 size_t WebRtcMediaStreamAdapterMap::GetLocalStreamCount() const {
84 DCHECK(main_thread_->BelongsToCurrentThread());
85 return local_stream_adapters_.size();
86 }
87
88 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698