| 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 |