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:
erikvarga 2017-06-16 05:02:05 -07:00 committed by Commit Bot
parent bd09ebc71e
commit bf5a2fc11b
6 changed files with 13 additions and 17 deletions

View File

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

View File

@ -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_;

View File

@ -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);
};

View File

@ -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();
}

View File

@ -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_) {

View File

@ -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_);