OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "content/renderer/media/webrtc/media_stream_track_metrics.h" | 5 #include "content/renderer/media/webrtc/media_stream_track_metrics.h" |
6 | 6 |
7 #include <inttypes.h> | 7 #include <inttypes.h> |
8 #include <set> | 8 #include <set> |
9 #include <string> | 9 #include <string> |
10 | 10 |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
145 base::ThreadChecker thread_checker_; | 145 base::ThreadChecker thread_checker_; |
146 }; | 146 }; |
147 | 147 |
148 namespace { | 148 namespace { |
149 | 149 |
150 // Used with std::find_if. | 150 // Used with std::find_if. |
151 struct ObserverFinder { | 151 struct ObserverFinder { |
152 ObserverFinder(MediaStreamTrackMetrics::StreamType stream_type, | 152 ObserverFinder(MediaStreamTrackMetrics::StreamType stream_type, |
153 MediaStreamInterface* stream) | 153 MediaStreamInterface* stream) |
154 : stream_type(stream_type), stream_(stream) {} | 154 : stream_type(stream_type), stream_(stream) {} |
155 bool operator()(MediaStreamTrackMetricsObserver* observer) { | 155 bool operator()( |
| 156 const std::unique_ptr<MediaStreamTrackMetricsObserver>& observer) { |
156 return stream_ == observer->stream() && | 157 return stream_ == observer->stream() && |
157 stream_type == observer->stream_type(); | 158 stream_type == observer->stream_type(); |
158 } | 159 } |
159 MediaStreamTrackMetrics::StreamType stream_type; | 160 MediaStreamTrackMetrics::StreamType stream_type; |
160 MediaStreamInterface* stream_; | 161 MediaStreamInterface* stream_; |
161 }; | 162 }; |
162 | 163 |
163 } // namespace | 164 } // namespace |
164 | 165 |
165 MediaStreamTrackMetricsObserver::MediaStreamTrackMetricsObserver( | 166 MediaStreamTrackMetricsObserver::MediaStreamTrackMetricsObserver( |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
261 DCHECK(thread_checker_.CalledOnValidThread()); | 262 DCHECK(thread_checker_.CalledOnValidThread()); |
262 for (IdSet::const_iterator it = ids.begin(); it != ids.end(); ++it) { | 263 for (IdSet::const_iterator it = ids.begin(); it != ids.end(); ++it) { |
263 owner_->SendLifetimeMessage(*it, track_type, event, stream_type_); | 264 owner_->SendLifetimeMessage(*it, track_type, event, stream_type_); |
264 } | 265 } |
265 } | 266 } |
266 | 267 |
267 MediaStreamTrackMetrics::MediaStreamTrackMetrics() | 268 MediaStreamTrackMetrics::MediaStreamTrackMetrics() |
268 : ice_state_(webrtc::PeerConnectionInterface::kIceConnectionNew) {} | 269 : ice_state_(webrtc::PeerConnectionInterface::kIceConnectionNew) {} |
269 | 270 |
270 MediaStreamTrackMetrics::~MediaStreamTrackMetrics() { | 271 MediaStreamTrackMetrics::~MediaStreamTrackMetrics() { |
271 for (ObserverVector::iterator it = observers_.begin(); it != observers_.end(); | 272 for (const auto& observer : observers_) { |
272 ++it) { | 273 observer->SendLifetimeMessages(DISCONNECTED); |
273 (*it)->SendLifetimeMessages(DISCONNECTED); | |
274 } | 274 } |
275 } | 275 } |
276 | 276 |
277 void MediaStreamTrackMetrics::AddStream(StreamType type, | 277 void MediaStreamTrackMetrics::AddStream(StreamType type, |
278 MediaStreamInterface* stream) { | 278 MediaStreamInterface* stream) { |
279 DCHECK(CalledOnValidThread()); | 279 DCHECK(CalledOnValidThread()); |
280 MediaStreamTrackMetricsObserver* observer = | 280 observers_.push_back( |
281 new MediaStreamTrackMetricsObserver(type, stream, this); | 281 base::MakeUnique<MediaStreamTrackMetricsObserver>(type, stream, this)); |
282 observers_.insert(observers_.end(), observer); | 282 SendLifeTimeMessageDependingOnIceState(observers_.back().get()); |
283 SendLifeTimeMessageDependingOnIceState(observer); | |
284 } | 283 } |
285 | 284 |
286 void MediaStreamTrackMetrics::RemoveStream(StreamType type, | 285 void MediaStreamTrackMetrics::RemoveStream(StreamType type, |
287 MediaStreamInterface* stream) { | 286 MediaStreamInterface* stream) { |
288 DCHECK(CalledOnValidThread()); | 287 DCHECK(CalledOnValidThread()); |
289 ObserverVector::iterator it = std::find_if( | 288 auto it = std::find_if(observers_.begin(), observers_.end(), |
290 observers_.begin(), observers_.end(), ObserverFinder(type, stream)); | 289 ObserverFinder(type, stream)); |
291 if (it == observers_.end()) { | 290 if (it == observers_.end()) { |
292 // Since external apps could call removeStream with a stream they | 291 // Since external apps could call removeStream with a stream they |
293 // never added, this can happen without it being an error. | 292 // never added, this can happen without it being an error. |
294 return; | 293 return; |
295 } | 294 } |
296 | 295 |
297 observers_.erase(it); | 296 observers_.erase(it); |
298 } | 297 } |
299 | 298 |
300 void MediaStreamTrackMetrics::IceConnectionChange( | 299 void MediaStreamTrackMetrics::IceConnectionChange( |
301 PeerConnectionInterface::IceConnectionState new_state) { | 300 PeerConnectionInterface::IceConnectionState new_state) { |
302 DCHECK(CalledOnValidThread()); | 301 DCHECK(CalledOnValidThread()); |
303 ice_state_ = new_state; | 302 ice_state_ = new_state; |
304 for (ObserverVector::iterator it = observers_.begin(); it != observers_.end(); | 303 for (const auto& observer : observers_) { |
305 ++it) { | 304 SendLifeTimeMessageDependingOnIceState(observer.get()); |
306 SendLifeTimeMessageDependingOnIceState(*it); | |
307 } | 305 } |
308 } | 306 } |
309 void MediaStreamTrackMetrics::SendLifeTimeMessageDependingOnIceState( | 307 void MediaStreamTrackMetrics::SendLifeTimeMessageDependingOnIceState( |
310 MediaStreamTrackMetricsObserver* observer) { | 308 MediaStreamTrackMetricsObserver* observer) { |
311 // There is a state transition diagram for these states at | 309 // There is a state transition diagram for these states at |
312 // http://dev.w3.org/2011/webrtc/editor/webrtc.html#idl-def-RTCIceConnectionSt
ate | 310 // http://dev.w3.org/2011/webrtc/editor/webrtc.html#idl-def-RTCIceConnectionSt
ate |
313 switch (ice_state_) { | 311 switch (ice_state_) { |
314 case PeerConnectionInterface::kIceConnectionConnected: | 312 case PeerConnectionInterface::kIceConnectionConnected: |
315 case PeerConnectionInterface::kIceConnectionCompleted: | 313 case PeerConnectionInterface::kIceConnectionCompleted: |
316 observer->SendLifetimeMessages(CONNECTED); | 314 observer->SendLifetimeMessages(CONNECTED); |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
394 } | 392 } |
395 | 393 |
396 uint64_t MediaStreamTrackMetrics::MakeUniqueId(const std::string& track_id, | 394 uint64_t MediaStreamTrackMetrics::MakeUniqueId(const std::string& track_id, |
397 StreamType stream_type) { | 395 StreamType stream_type) { |
398 return MakeUniqueIdImpl( | 396 return MakeUniqueIdImpl( |
399 reinterpret_cast<uint64_t>(reinterpret_cast<void*>(this)), track_id, | 397 reinterpret_cast<uint64_t>(reinterpret_cast<void*>(this)), track_id, |
400 stream_type); | 398 stream_type); |
401 } | 399 } |
402 | 400 |
403 } // namespace content | 401 } // namespace content |
OLD | NEW |