Use RaceChecker instead of ThreadChecker in a few places.
There are some functions in packet_router.cc and modules/congestion_controller that could be used by different threads, but they're protected using rtc::ThreadChecker which doesn't allow them to be called by more than one thread even if the calls are synchronised. This CL replaces those with rtc::RaceChecker, which allows serialized access of the functions from multiple threads. BUG=webrtc:7826 Review-Url: https://codereview.webrtc.org/2940133003 Cr-Commit-Position: refs/heads/master@{#18628}
This commit is contained in:
parent
bd09ebc71e
commit
bf5a2fc11b
@ -74,7 +74,6 @@ DelayBasedBwe::DelayBasedBwe(RtcEventLog* event_log, const Clock* clock)
|
||||
last_logged_state_(BandwidthUsage::kBwNormal),
|
||||
in_sparse_update_experiment_(BweSparseUpdateExperimentIsEnabled()) {
|
||||
LOG(LS_INFO) << "Using Trendline filter for delay change estimation.";
|
||||
network_thread_.DetachFromThread();
|
||||
}
|
||||
|
||||
DelayBasedBwe::~DelayBasedBwe() {}
|
||||
@ -85,7 +84,7 @@ DelayBasedBwe::Result DelayBasedBwe::IncomingPacketFeedbackVector(
|
||||
RTC_DCHECK(std::is_sorted(packet_feedback_vector.begin(),
|
||||
packet_feedback_vector.end(),
|
||||
PacketFeedbackComparator()));
|
||||
RTC_DCHECK(network_thread_.CalledOnValidThread());
|
||||
RTC_DCHECK_RUNS_SERIALIZED(&network_race_);
|
||||
|
||||
// TOOD(holmer): An empty feedback vector here likely means that
|
||||
// all acks were too late and that the send time history had
|
||||
|
||||
@ -17,7 +17,7 @@
|
||||
|
||||
#include "webrtc/base/checks.h"
|
||||
#include "webrtc/base/constructormagic.h"
|
||||
#include "webrtc/base/thread_checker.h"
|
||||
#include "webrtc/base/race_checker.h"
|
||||
#include "webrtc/modules/congestion_controller/median_slope_estimator.h"
|
||||
#include "webrtc/modules/congestion_controller/probe_bitrate_estimator.h"
|
||||
#include "webrtc/modules/congestion_controller/trendline_estimator.h"
|
||||
@ -70,7 +70,7 @@ class DelayBasedBwe {
|
||||
bool overusing,
|
||||
uint32_t* target_bitrate_bps);
|
||||
|
||||
rtc::ThreadChecker network_thread_;
|
||||
rtc::RaceChecker network_race_;
|
||||
RtcEventLog* const event_log_;
|
||||
const Clock* const clock_;
|
||||
std::unique_ptr<InterArrival> inter_arrival_;
|
||||
|
||||
@ -17,7 +17,7 @@
|
||||
#include "webrtc/base/constructormagic.h"
|
||||
#include "webrtc/base/criticalsection.h"
|
||||
#include "webrtc/base/networkroute.h"
|
||||
#include "webrtc/base/thread_checker.h"
|
||||
#include "webrtc/base/race_checker.h"
|
||||
#include "webrtc/common_types.h"
|
||||
#include "webrtc/modules/congestion_controller/delay_based_bwe.h"
|
||||
#include "webrtc/modules/congestion_controller/transport_feedback_adapter.h"
|
||||
@ -155,7 +155,7 @@ class SendSideCongestionController : public CallStatsObserver,
|
||||
int min_bitrate_bps_ GUARDED_BY(bwe_lock_);
|
||||
std::unique_ptr<DelayBasedBwe> delay_based_bwe_ GUARDED_BY(bwe_lock_);
|
||||
|
||||
rtc::ThreadChecker worker_thread_checker_;
|
||||
rtc::RaceChecker worker_race_;
|
||||
|
||||
RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(SendSideCongestionController);
|
||||
};
|
||||
|
||||
@ -101,7 +101,6 @@ SendSideCongestionController::SendSideCongestionController(
|
||||
min_bitrate_bps_(congestion_controller::GetMinBitrateBps()),
|
||||
delay_based_bwe_(new DelayBasedBwe(event_log_, clock_)) {
|
||||
delay_based_bwe_->SetMinBitrate(min_bitrate_bps_);
|
||||
worker_thread_checker_.DetachFromThread();
|
||||
}
|
||||
|
||||
SendSideCongestionController::~SendSideCongestionController() {}
|
||||
@ -273,7 +272,7 @@ void SendSideCongestionController::AddPacket(
|
||||
|
||||
void SendSideCongestionController::OnTransportFeedback(
|
||||
const rtcp::TransportFeedback& feedback) {
|
||||
RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
|
||||
RTC_DCHECK_RUNS_SERIALIZED(&worker_race_);
|
||||
transport_feedback_adapter_.OnTransportFeedback(feedback);
|
||||
std::vector<PacketFeedback> feedback_vector = ReceivedPacketFeedbackVector(
|
||||
transport_feedback_adapter_.GetTransportFeedbackVector());
|
||||
@ -292,7 +291,7 @@ void SendSideCongestionController::OnTransportFeedback(
|
||||
|
||||
std::vector<PacketFeedback>
|
||||
SendSideCongestionController::GetTransportFeedbackVector() const {
|
||||
RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
|
||||
RTC_DCHECK_RUNS_SERIALIZED(&worker_race_);
|
||||
return transport_feedback_adapter_.GetTransportFeedbackVector();
|
||||
}
|
||||
|
||||
|
||||
@ -22,9 +22,7 @@ namespace webrtc {
|
||||
PacketRouter::PacketRouter()
|
||||
: last_remb_time_ms_(rtc::TimeMillis()),
|
||||
last_send_bitrate_bps_(0),
|
||||
transport_seq_(0) {
|
||||
pacer_thread_checker_.DetachFromThread();
|
||||
}
|
||||
transport_seq_(0) {}
|
||||
|
||||
PacketRouter::~PacketRouter() {
|
||||
RTC_DCHECK(rtp_send_modules_.empty());
|
||||
@ -98,7 +96,7 @@ bool PacketRouter::TimeToSendPacket(uint32_t ssrc,
|
||||
int64_t capture_timestamp,
|
||||
bool retransmission,
|
||||
const PacedPacketInfo& pacing_info) {
|
||||
RTC_DCHECK(pacer_thread_checker_.CalledOnValidThread());
|
||||
RTC_DCHECK_RUNS_SERIALIZED(&pacer_race_);
|
||||
rtc::CritScope cs(&modules_crit_);
|
||||
for (auto* rtp_module : rtp_send_modules_) {
|
||||
if (!rtp_module->SendingMedia())
|
||||
@ -114,7 +112,7 @@ bool PacketRouter::TimeToSendPacket(uint32_t ssrc,
|
||||
|
||||
size_t PacketRouter::TimeToSendPadding(size_t bytes_to_send,
|
||||
const PacedPacketInfo& pacing_info) {
|
||||
RTC_DCHECK(pacer_thread_checker_.CalledOnValidThread());
|
||||
RTC_DCHECK_RUNS_SERIALIZED(&pacer_race_);
|
||||
size_t total_bytes_sent = 0;
|
||||
rtc::CritScope cs(&modules_crit_);
|
||||
// Rtp modules are ordered by which stream can most benefit from padding.
|
||||
@ -208,7 +206,7 @@ bool PacketRouter::SendRemb(uint32_t bitrate_bps,
|
||||
}
|
||||
|
||||
bool PacketRouter::SendTransportFeedback(rtcp::TransportFeedback* packet) {
|
||||
RTC_DCHECK(pacer_thread_checker_.CalledOnValidThread());
|
||||
RTC_DCHECK_RUNS_SERIALIZED(&pacer_race_);
|
||||
rtc::CritScope cs(&modules_crit_);
|
||||
// Prefer send modules.
|
||||
for (auto* rtp_module : rtp_send_modules_) {
|
||||
|
||||
@ -17,7 +17,7 @@
|
||||
#include "webrtc/base/constructormagic.h"
|
||||
#include "webrtc/base/criticalsection.h"
|
||||
#include "webrtc/base/thread_annotations.h"
|
||||
#include "webrtc/base/thread_checker.h"
|
||||
#include "webrtc/base/race_checker.h"
|
||||
#include "webrtc/common_types.h"
|
||||
#include "webrtc/modules/pacing/paced_sender.h"
|
||||
#include "webrtc/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h"
|
||||
@ -84,7 +84,7 @@ class PacketRouter : public PacedSender::PacketSender,
|
||||
virtual bool SendTransportFeedback(rtcp::TransportFeedback* packet);
|
||||
|
||||
private:
|
||||
rtc::ThreadChecker pacer_thread_checker_;
|
||||
rtc::RaceChecker pacer_race_;
|
||||
rtc::CriticalSection modules_crit_;
|
||||
std::list<RtpRtcp*> rtp_send_modules_ GUARDED_BY(modules_crit_);
|
||||
std::vector<RtpRtcp*> rtp_receive_modules_ GUARDED_BY(modules_crit_);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user