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

Side by Side Diff: webrtc/modules/congestion_controller/transport_feedback_adapter.cc

Issue 2710213003: Add thread-checking to TransportFeedbackAdapter (Closed)
Patch Set: . Created 3 years, 9 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
« no previous file with comments | « webrtc/modules/congestion_controller/transport_feedback_adapter.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 BitrateController* bitrate_controller) 47 BitrateController* bitrate_controller)
48 : send_side_bwe_with_overhead_(webrtc::field_trial::FindFullName( 48 : send_side_bwe_with_overhead_(webrtc::field_trial::FindFullName(
49 "WebRTC-SendSideBwe-WithOverhead") == 49 "WebRTC-SendSideBwe-WithOverhead") ==
50 "Enabled"), 50 "Enabled"),
51 transport_overhead_bytes_per_packet_(0), 51 transport_overhead_bytes_per_packet_(0),
52 send_time_history_(clock, kSendTimeHistoryWindowMs), 52 send_time_history_(clock, kSendTimeHistoryWindowMs),
53 event_log_(event_log), 53 event_log_(event_log),
54 clock_(clock), 54 clock_(clock),
55 current_offset_ms_(kNoTimestamp), 55 current_offset_ms_(kNoTimestamp),
56 last_timestamp_us_(kNoTimestamp), 56 last_timestamp_us_(kNoTimestamp),
57 bitrate_controller_(bitrate_controller) {} 57 bitrate_controller_(bitrate_controller) {
58 packetizer_thread_checker_.DetachFromThread();
59 module_process_thread_checker_.DetachFromThread();
60 }
58 61
59 TransportFeedbackAdapter::~TransportFeedbackAdapter() {} 62 TransportFeedbackAdapter::~TransportFeedbackAdapter() {
63 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
64 }
60 65
61 void TransportFeedbackAdapter::InitBwe() { 66 void TransportFeedbackAdapter::InitBwe() {
67 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
62 rtc::CritScope cs(&bwe_lock_); 68 rtc::CritScope cs(&bwe_lock_);
63 delay_based_bwe_.reset(new DelayBasedBwe(event_log_, clock_)); 69 delay_based_bwe_.reset(new DelayBasedBwe(event_log_, clock_));
64 } 70 }
65 71
66 void TransportFeedbackAdapter::AddPacket(uint16_t sequence_number, 72 void TransportFeedbackAdapter::AddPacket(uint16_t sequence_number,
67 size_t length, 73 size_t length,
68 const PacedPacketInfo& pacing_info) { 74 const PacedPacketInfo& pacing_info) {
75 RTC_DCHECK(packetizer_thread_checker_.CalledOnValidThread());
stefan-webrtc 2017/02/24 14:48:53 Maybe the value of this is small? WDYT?
elad.alon_webrtc.org 2017/02/27 10:55:30 Hard for me to say. It does make sure no one ever
69 rtc::CritScope cs(&lock_); 76 rtc::CritScope cs(&lock_);
70 if (send_side_bwe_with_overhead_) { 77 if (send_side_bwe_with_overhead_) {
71 length += transport_overhead_bytes_per_packet_; 78 length += transport_overhead_bytes_per_packet_;
72 } 79 }
73 send_time_history_.AddAndRemoveOld(sequence_number, length, pacing_info); 80 send_time_history_.AddAndRemoveOld(sequence_number, length, pacing_info);
74 } 81 }
75 82
76 void TransportFeedbackAdapter::OnSentPacket(uint16_t sequence_number, 83 void TransportFeedbackAdapter::OnSentPacket(uint16_t sequence_number,
77 int64_t send_time_ms) { 84 int64_t send_time_ms) {
85 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
78 rtc::CritScope cs(&lock_); 86 rtc::CritScope cs(&lock_);
79 send_time_history_.OnSentPacket(sequence_number, send_time_ms); 87 send_time_history_.OnSentPacket(sequence_number, send_time_ms);
80 } 88 }
81 89
82 void TransportFeedbackAdapter::SetStartBitrate(int start_bitrate_bps) { 90 void TransportFeedbackAdapter::SetStartBitrate(int start_bitrate_bps) {
91 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
83 rtc::CritScope cs(&bwe_lock_); 92 rtc::CritScope cs(&bwe_lock_);
84 delay_based_bwe_->SetStartBitrate(start_bitrate_bps); 93 delay_based_bwe_->SetStartBitrate(start_bitrate_bps);
85 } 94 }
86 95
87 void TransportFeedbackAdapter::SetMinBitrate(int min_bitrate_bps) { 96 void TransportFeedbackAdapter::SetMinBitrate(int min_bitrate_bps) {
97 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
88 rtc::CritScope cs(&bwe_lock_); 98 rtc::CritScope cs(&bwe_lock_);
89 delay_based_bwe_->SetMinBitrate(min_bitrate_bps); 99 delay_based_bwe_->SetMinBitrate(min_bitrate_bps);
90 } 100 }
91 101
92 void TransportFeedbackAdapter::SetTransportOverhead( 102 void TransportFeedbackAdapter::SetTransportOverhead(
93 int transport_overhead_bytes_per_packet) { 103 int transport_overhead_bytes_per_packet) {
94 rtc::CritScope cs(&lock_); 104 rtc::CritScope cs(&lock_);
95 transport_overhead_bytes_per_packet_ = transport_overhead_bytes_per_packet; 105 transport_overhead_bytes_per_packet_ = transport_overhead_bytes_per_packet;
96 } 106 }
97 107
98 int64_t TransportFeedbackAdapter::GetProbingIntervalMs() const { 108 int64_t TransportFeedbackAdapter::GetProbingIntervalMs() const {
99 rtc::CritScope cs(&bwe_lock_); 109 rtc::CritScope cs(&bwe_lock_);
100 return delay_based_bwe_->GetProbingIntervalMs(); 110 return delay_based_bwe_->GetProbingIntervalMs();
101 } 111 }
102 112
103 std::vector<PacketInfo> TransportFeedbackAdapter::GetPacketFeedbackVector( 113 std::vector<PacketInfo> TransportFeedbackAdapter::GetPacketFeedbackVector(
104 const rtcp::TransportFeedback& feedback) { 114 const rtcp::TransportFeedback& feedback) {
115 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
105 int64_t timestamp_us = feedback.GetBaseTimeUs(); 116 int64_t timestamp_us = feedback.GetBaseTimeUs();
106 // Add timestamp deltas to a local time base selected on first packet arrival. 117 // Add timestamp deltas to a local time base selected on first packet arrival.
107 // This won't be the true time base, but makes it easier to manually inspect 118 // This won't be the true time base, but makes it easier to manually inspect
108 // time stamps. 119 // time stamps.
109 if (last_timestamp_us_ == kNoTimestamp) { 120 if (last_timestamp_us_ == kNoTimestamp) {
110 current_offset_ms_ = clock_->TimeInMilliseconds(); 121 current_offset_ms_ = clock_->TimeInMilliseconds();
111 } else { 122 } else {
112 int64_t delta = timestamp_us - last_timestamp_us_; 123 int64_t delta = timestamp_us - last_timestamp_us_;
113 124
114 // Detect and compensate for wrap-arounds in base time. 125 // Detect and compensate for wrap-arounds in base time.
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 LOG(LS_WARNING) << "Failed to lookup send time for " << failed_lookups 159 LOG(LS_WARNING) << "Failed to lookup send time for " << failed_lookups
149 << " packet" << (failed_lookups > 1 ? "s" : "") 160 << " packet" << (failed_lookups > 1 ? "s" : "")
150 << ". Send time history too small?"; 161 << ". Send time history too small?";
151 } 162 }
152 } 163 }
153 return packet_feedback_vector; 164 return packet_feedback_vector;
154 } 165 }
155 166
156 void TransportFeedbackAdapter::OnTransportFeedback( 167 void TransportFeedbackAdapter::OnTransportFeedback(
157 const rtcp::TransportFeedback& feedback) { 168 const rtcp::TransportFeedback& feedback) {
169 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
158 last_packet_feedback_vector_ = GetPacketFeedbackVector(feedback); 170 last_packet_feedback_vector_ = GetPacketFeedbackVector(feedback);
159 DelayBasedBwe::Result result; 171 DelayBasedBwe::Result result;
160 { 172 {
161 rtc::CritScope cs(&bwe_lock_); 173 rtc::CritScope cs(&bwe_lock_);
162 result = delay_based_bwe_->IncomingPacketFeedbackVector( 174 result = delay_based_bwe_->IncomingPacketFeedbackVector(
163 last_packet_feedback_vector_); 175 last_packet_feedback_vector_);
164 } 176 }
165 if (result.updated) 177 if (result.updated)
166 bitrate_controller_->OnDelayBasedBweResult(result); 178 bitrate_controller_->OnDelayBasedBweResult(result);
167 } 179 }
168 180
169 std::vector<PacketInfo> TransportFeedbackAdapter::GetTransportFeedbackVector() 181 std::vector<PacketInfo> TransportFeedbackAdapter::GetTransportFeedbackVector()
170 const { 182 const {
183 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
171 return last_packet_feedback_vector_; 184 return last_packet_feedback_vector_;
172 } 185 }
173 186
174 void TransportFeedbackAdapter::OnRttUpdate(int64_t avg_rtt_ms, 187 void TransportFeedbackAdapter::OnRttUpdate(int64_t avg_rtt_ms,
175 int64_t max_rtt_ms) { 188 int64_t max_rtt_ms) {
189 RTC_DCHECK(module_process_thread_checker_.CalledOnValidThread());
176 rtc::CritScope cs(&bwe_lock_); 190 rtc::CritScope cs(&bwe_lock_);
177 delay_based_bwe_->OnRttUpdate(avg_rtt_ms, max_rtt_ms); 191 delay_based_bwe_->OnRttUpdate(avg_rtt_ms, max_rtt_ms);
178 } 192 }
179 193
180 } // namespace webrtc 194 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/congestion_controller/transport_feedback_adapter.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698