From 409784d0c423d920f822374da5e9d6a39c60abc1 Mon Sep 17 00:00:00 2001 From: Markus Handell Date: Mon, 18 May 2020 23:15:21 +0200 Subject: [PATCH] FakeEncoder: remove lock recursions. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This change removes lock recursions and adds thread annotations. Bug: webrtc:11567 Change-Id: I88561102c31156718fbb175a9a38f2cc89c6d9dc Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/175642 Reviewed-by: Erik Språng Commit-Queue: Markus Handell Cr-Commit-Position: refs/heads/master@{#31316} --- test/fake_encoder.cc | 6 +++++- test/fake_encoder.h | 25 +++++++++++++++---------- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/test/fake_encoder.cc b/test/fake_encoder.cc index 64b4a4e9ff..2959559910 100644 --- a/test/fake_encoder.cc +++ b/test/fake_encoder.cc @@ -69,7 +69,7 @@ void FakeEncoder::SetMaxBitrate(int max_kbps) { RTC_DCHECK_GE(max_kbps, -1); // max_kbps == -1 disables it. rtc::CritScope cs(&crit_sect_); max_target_bitrate_kbps_ = max_kbps; - SetRates(current_rate_settings_); + SetRatesLocked(current_rate_settings_); } void FakeEncoder::SetQp(int qp) { @@ -243,6 +243,10 @@ int32_t FakeEncoder::Release() { void FakeEncoder::SetRates(const RateControlParameters& parameters) { rtc::CritScope cs(&crit_sect_); + SetRatesLocked(parameters); +} + +void FakeEncoder::SetRatesLocked(const RateControlParameters& parameters) { current_rate_settings_ = parameters; int allocated_bitrate_kbps = parameters.bitrate.get_sum_kbps(); diff --git a/test/fake_encoder.h b/test/fake_encoder.h index 39838d16f1..ade0e35560 100644 --- a/test/fake_encoder.h +++ b/test/fake_encoder.h @@ -40,21 +40,23 @@ class FakeEncoder : public VideoEncoder { virtual ~FakeEncoder() = default; // Sets max bitrate. Not thread-safe, call before registering the encoder. - void SetMaxBitrate(int max_kbps); - void SetQp(int qp); + void SetMaxBitrate(int max_kbps) RTC_LOCKS_EXCLUDED(crit_sect_); + void SetQp(int qp) RTC_LOCKS_EXCLUDED(crit_sect_); void SetFecControllerOverride( FecControllerOverride* fec_controller_override) override; - int32_t InitEncode(const VideoCodec* config, - const Settings& settings) override; + int32_t InitEncode(const VideoCodec* config, const Settings& settings) + RTC_LOCKS_EXCLUDED(crit_sect_) override; int32_t Encode(const VideoFrame& input_image, - const std::vector* frame_types) override; - int32_t RegisterEncodeCompleteCallback( - EncodedImageCallback* callback) override; + const std::vector* frame_types) + RTC_LOCKS_EXCLUDED(crit_sect_) override; + int32_t RegisterEncodeCompleteCallback(EncodedImageCallback* callback) + RTC_LOCKS_EXCLUDED(crit_sect_) override; int32_t Release() override; - void SetRates(const RateControlParameters& parameters) override; - int GetConfiguredInputFramerate() const; + void SetRates(const RateControlParameters& parameters) + RTC_LOCKS_EXCLUDED(crit_sect_) override; + int GetConfiguredInputFramerate() const RTC_LOCKS_EXCLUDED(crit_sect_); EncoderInfo GetEncoderInfo() const override; static const char* kImplementationName; @@ -79,7 +81,7 @@ class FakeEncoder : public VideoEncoder { uint8_t num_simulcast_streams, const VideoBitrateAllocation& target_bitrate, SimulcastStream simulcast_streams[kMaxSimulcastStreams], - int framerate); + int framerate) RTC_LOCKS_EXCLUDED(crit_sect_); // Called before the frame is passed to callback_->OnEncodedImage, to let // subclasses fill out codec_specific, possibly modify encodedImage. @@ -88,6 +90,9 @@ class FakeEncoder : public VideoEncoder { EncodedImage* encoded_image, CodecSpecificInfo* codec_specific); + void SetRatesLocked(const RateControlParameters& parameters) + RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_sect_); + FrameInfo last_frame_info_ RTC_GUARDED_BY(crit_sect_); Clock* const clock_;