| 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 17 matching lines...) Expand all Loading... |
| 28 IdSet GetTrackIds(const std::vector<rtc::scoped_refptr<T>>& tracks) { | 28 IdSet GetTrackIds(const std::vector<rtc::scoped_refptr<T>>& tracks) { |
| 29 IdSet track_ids; | 29 IdSet track_ids; |
| 30 for (const auto& track : tracks) | 30 for (const auto& track : tracks) |
| 31 track_ids.insert(track->id()); | 31 track_ids.insert(track->id()); |
| 32 return track_ids; | 32 return track_ids; |
| 33 } | 33 } |
| 34 | 34 |
| 35 // TODO(tommi): Consolidate this and TrackObserver since these implementations | 35 // TODO(tommi): Consolidate this and TrackObserver since these implementations |
| 36 // are fundamentally achieving the same thing (aside from specific logic inside | 36 // are fundamentally achieving the same thing (aside from specific logic inside |
| 37 // the OnChanged callbacks). | 37 // the OnChanged callbacks). |
| 38 class MediaStreamObserver | 38 class MediaStreamTrackObserver |
| 39 : public base::RefCountedThreadSafe<MediaStreamObserver>, | 39 : public base::RefCountedThreadSafe<MediaStreamTrackObserver>, |
| 40 public webrtc::ObserverInterface { | 40 public webrtc::ObserverInterface { |
| 41 public: | 41 public: |
| 42 typedef base::Callback< | 42 typedef base::Callback< |
| 43 void(const IdSet& audio_track_ids, const IdSet& video_track_ids)> | 43 void(const IdSet& audio_track_ids, const IdSet& video_track_ids)> |
| 44 OnChangedCallback; | 44 OnChangedCallback; |
| 45 | 45 |
| 46 MediaStreamObserver( | 46 MediaStreamTrackObserver( |
| 47 const OnChangedCallback& callback, | 47 const OnChangedCallback& callback, |
| 48 const scoped_refptr<base::SingleThreadTaskRunner>& main_thread, | 48 const scoped_refptr<base::SingleThreadTaskRunner>& main_thread, |
| 49 webrtc::MediaStreamInterface* stream) | 49 webrtc::MediaStreamInterface* stream) |
| 50 : main_thread_(main_thread), stream_(stream), callback_(callback) { | 50 : main_thread_(main_thread), stream_(stream), callback_(callback) { |
| 51 signaling_thread_.DetachFromThread(); | 51 signaling_thread_.DetachFromThread(); |
| 52 stream_->RegisterObserver(this); | 52 stream_->RegisterObserver(this); |
| 53 } | 53 } |
| 54 | 54 |
| 55 const scoped_refptr<webrtc::MediaStreamInterface>& stream() const { | 55 const scoped_refptr<webrtc::MediaStreamInterface>& stream() const { |
| 56 DCHECK(main_thread_->BelongsToCurrentThread()); | 56 DCHECK(main_thread_->BelongsToCurrentThread()); |
| 57 return stream_; | 57 return stream_; |
| 58 } | 58 } |
| 59 | 59 |
| 60 void Unregister() { | 60 void Unregister() { |
| 61 DCHECK(main_thread_->BelongsToCurrentThread()); | 61 DCHECK(main_thread_->BelongsToCurrentThread()); |
| 62 callback_.Reset(); | 62 callback_.Reset(); |
| 63 stream_->UnregisterObserver(this); | 63 stream_->UnregisterObserver(this); |
| 64 stream_ = nullptr; | 64 stream_ = nullptr; |
| 65 } | 65 } |
| 66 | 66 |
| 67 private: | 67 private: |
| 68 friend class base::RefCountedThreadSafe<MediaStreamObserver>; | 68 friend class base::RefCountedThreadSafe<MediaStreamTrackObserver>; |
| 69 ~MediaStreamObserver() override { | 69 ~MediaStreamTrackObserver() override { |
| 70 DCHECK(!stream_.get()) << "must have been unregistered before deleting"; | 70 DCHECK(!stream_.get()) << "must have been unregistered before deleting"; |
| 71 } | 71 } |
| 72 | 72 |
| 73 // webrtc::ObserverInterface implementation. | 73 // webrtc::ObserverInterface implementation. |
| 74 void OnChanged() override { | 74 void OnChanged() override { |
| 75 DCHECK(signaling_thread_.CalledOnValidThread()); | 75 DCHECK(signaling_thread_.CalledOnValidThread()); |
| 76 main_thread_->PostTask(FROM_HERE, | 76 main_thread_->PostTask(FROM_HERE, |
| 77 base::Bind(&MediaStreamObserver::OnChangedOnMainThread, this, | 77 base::Bind(&MediaStreamTrackObserver::OnChangedOnMainThread, this, |
| 78 GetTrackIds(stream_->GetAudioTracks()), | 78 GetTrackIds(stream_->GetAudioTracks()), |
| 79 GetTrackIds(stream_->GetVideoTracks()))); | 79 GetTrackIds(stream_->GetVideoTracks()))); |
| 80 } | 80 } |
| 81 | 81 |
| 82 void OnChangedOnMainThread(const IdSet& audio_track_ids, | 82 void OnChangedOnMainThread(const IdSet& audio_track_ids, |
| 83 const IdSet& video_track_ids) { | 83 const IdSet& video_track_ids) { |
| 84 DCHECK(main_thread_->BelongsToCurrentThread()); | 84 DCHECK(main_thread_->BelongsToCurrentThread()); |
| 85 if (!callback_.is_null()) | 85 if (!callback_.is_null()) |
| 86 callback_.Run(audio_track_ids, video_track_ids); | 86 callback_.Run(audio_track_ids, video_track_ids); |
| 87 } | 87 } |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 131 | 131 |
| 132 // False until start/end of lifetime messages have been sent. | 132 // False until start/end of lifetime messages have been sent. |
| 133 bool has_reported_start_; | 133 bool has_reported_start_; |
| 134 bool has_reported_end_; | 134 bool has_reported_end_; |
| 135 | 135 |
| 136 // IDs of audio and video tracks in the stream being observed. | 136 // IDs of audio and video tracks in the stream being observed. |
| 137 IdSet audio_track_ids_; | 137 IdSet audio_track_ids_; |
| 138 IdSet video_track_ids_; | 138 IdSet video_track_ids_; |
| 139 | 139 |
| 140 MediaStreamTrackMetrics::StreamType stream_type_; | 140 MediaStreamTrackMetrics::StreamType stream_type_; |
| 141 scoped_refptr<MediaStreamObserver> observer_; | 141 scoped_refptr<MediaStreamTrackObserver> observer_; |
| 142 | 142 |
| 143 // Non-owning. | 143 // Non-owning. |
| 144 MediaStreamTrackMetrics* owner_; | 144 MediaStreamTrackMetrics* owner_; |
| 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 { |
| (...skipping 13 matching lines...) Expand all Loading... |
| 165 | 165 |
| 166 MediaStreamTrackMetricsObserver::MediaStreamTrackMetricsObserver( | 166 MediaStreamTrackMetricsObserver::MediaStreamTrackMetricsObserver( |
| 167 MediaStreamTrackMetrics::StreamType stream_type, | 167 MediaStreamTrackMetrics::StreamType stream_type, |
| 168 MediaStreamInterface* stream, | 168 MediaStreamInterface* stream, |
| 169 MediaStreamTrackMetrics* owner) | 169 MediaStreamTrackMetrics* owner) |
| 170 : has_reported_start_(false), | 170 : has_reported_start_(false), |
| 171 has_reported_end_(false), | 171 has_reported_end_(false), |
| 172 audio_track_ids_(GetTrackIds(stream->GetAudioTracks())), | 172 audio_track_ids_(GetTrackIds(stream->GetAudioTracks())), |
| 173 video_track_ids_(GetTrackIds(stream->GetVideoTracks())), | 173 video_track_ids_(GetTrackIds(stream->GetVideoTracks())), |
| 174 stream_type_(stream_type), | 174 stream_type_(stream_type), |
| 175 observer_(new MediaStreamObserver( | 175 observer_(new MediaStreamTrackObserver( |
| 176 base::Bind(&MediaStreamTrackMetricsObserver::OnChanged, | 176 base::Bind(&MediaStreamTrackMetricsObserver::OnChanged, |
| 177 base::Unretained(this)), | 177 base::Unretained(this)), |
| 178 base::ThreadTaskRunnerHandle::Get(), | 178 base::ThreadTaskRunnerHandle::Get(), |
| 179 stream)), | 179 stream)), |
| 180 owner_(owner) { | 180 owner_(owner) { |
| 181 } | 181 } |
| 182 | 182 |
| 183 MediaStreamTrackMetricsObserver::~MediaStreamTrackMetricsObserver() { | 183 MediaStreamTrackMetricsObserver::~MediaStreamTrackMetricsObserver() { |
| 184 DCHECK(thread_checker_.CalledOnValidThread()); | 184 DCHECK(thread_checker_.CalledOnValidThread()); |
| 185 observer_->Unregister(); | 185 observer_->Unregister(); |
| (...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 393 } | 393 } |
| 394 | 394 |
| 395 uint64_t MediaStreamTrackMetrics::MakeUniqueId(const std::string& track_id, | 395 uint64_t MediaStreamTrackMetrics::MakeUniqueId(const std::string& track_id, |
| 396 StreamType stream_type) { | 396 StreamType stream_type) { |
| 397 return MakeUniqueIdImpl( | 397 return MakeUniqueIdImpl( |
| 398 reinterpret_cast<uint64_t>(reinterpret_cast<void*>(this)), track_id, | 398 reinterpret_cast<uint64_t>(reinterpret_cast<void*>(this)), track_id, |
| 399 stream_type); | 399 stream_type); |
| 400 } | 400 } |
| 401 | 401 |
| 402 } // namespace content | 402 } // namespace content |
| OLD | NEW |