Make FakeEncoder and FakeH264Encoder thread safe.

The MultithreadedFakeH264Encoder is a derived class from FakeEncoder
and FakeH264Encoder, and these should thus also be thread safe.

TESTED=Ran "out/Tsan/video_engine_tests --gtest_filter="*Multithreaded*" --gtest_repeat=100" with is_debug=false, dcheck_always_on=true, is_tsan=true.

BUG=webrtc:6943

Review-Url: https://codereview.webrtc.org/2604403003
Cr-Commit-Position: refs/heads/master@{#16093}
diff --git a/webrtc/test/fake_encoder.h b/webrtc/test/fake_encoder.h
index b81a04b..39c3e3e 100644
--- a/webrtc/test/fake_encoder.h
+++ b/webrtc/test/fake_encoder.h
@@ -47,12 +47,13 @@
   static const char* kImplementationName;
 
  protected:
+  rtc::CriticalSection crit_sect_;
   Clock* const clock_;
-  VideoCodec config_;
-  EncodedImageCallback* callback_;
-  BitrateAllocation target_bitrate_;
-  int max_target_bitrate_kbps_;
-  int64_t last_encode_time_ms_;
+  VideoCodec config_ GUARDED_BY(crit_sect_);
+  EncodedImageCallback* callback_ GUARDED_BY(crit_sect_);
+  BitrateAllocation target_bitrate_ GUARDED_BY(crit_sect_);
+  int max_target_bitrate_kbps_ GUARDED_BY(crit_sect_);
+  int64_t last_encode_time_ms_ GUARDED_BY(crit_sect_);
   uint8_t encoded_buffer_[100000];
 };
 
@@ -69,8 +70,9 @@
                         const RTPFragmentationHeader* fragments) override;
 
  private:
-  EncodedImageCallback* callback_;
-  int idr_counter_;
+  rtc::CriticalSection local_crit_sect_;
+  EncodedImageCallback* callback_ GUARDED_BY(local_crit_sect_);
+  int idr_counter_ GUARDED_BY(local_crit_sect_);
 };
 
 class DelayedEncoder : public test::FakeEncoder {
@@ -84,17 +86,17 @@
                  const std::vector<FrameType>* frame_types) override;
 
  private:
-  rtc::CriticalSection lock_;
-  int delay_ms_ GUARDED_BY(&lock_);
+  rtc::CriticalSection local_crit_sect_;
+  int delay_ms_ GUARDED_BY(&local_crit_sect_);
 };
 
 // This class implements a multi-threaded fake encoder by posting
 // FakeH264Encoder::Encode(.) tasks to |queue1_| and |queue2_|, in an
 // alternating fashion.
-class MultiThreadedFakeH264Encoder : public test::FakeH264Encoder {
+class MultithreadedFakeH264Encoder : public test::FakeH264Encoder {
  public:
-  MultiThreadedFakeH264Encoder(Clock* clock);
-  virtual ~MultiThreadedFakeH264Encoder() override;
+  explicit MultithreadedFakeH264Encoder(Clock* clock);
+  virtual ~MultithreadedFakeH264Encoder() override;
 
   int32_t Encode(const VideoFrame& input_image,
                  const CodecSpecificInfo* codec_specific_info,