FakeEncoder: remove lock recursions.

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 <sprang@webrtc.org>
Commit-Queue: Markus Handell <handellm@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31316}
diff --git a/test/fake_encoder.cc b/test/fake_encoder.cc
index 64b4a4e..2959559 100644
--- a/test/fake_encoder.cc
+++ b/test/fake_encoder.cc
@@ -69,7 +69,7 @@
   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 @@
 
 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 39838d1..ade0e35 100644
--- a/test/fake_encoder.h
+++ b/test/fake_encoder.h
@@ -40,21 +40,23 @@
   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<VideoFrameType>* frame_types) override;
-  int32_t RegisterEncodeCompleteCallback(
-      EncodedImageCallback* callback) override;
+                 const std::vector<VideoFrameType>* 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 @@
                       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 @@
       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_;