diff --git a/api/test/video/test_video_track_source.h b/api/test/video/test_video_track_source.h
index 4e2d138..449228f 100644
--- a/api/test/video/test_video_track_source.h
+++ b/api/test/video/test_video_track_source.h
@@ -62,6 +62,16 @@
 
   virtual void SetScreencast(bool is_screencast) = 0;
 
+  // TODO(titovartem): make next 4 methods pure virtual.
+  virtual void SetEnableAdaptation(bool enable_adaptation) {}
+
+  virtual int GetFrameWidth() const { return 0; }
+  virtual int GetFrameHeight() const { return 0; }
+
+  virtual void OnOutputFormatRequest(int width,
+                                     int height,
+                                     const absl::optional<int>& max_fps) {}
+
  protected:
   virtual rtc::VideoSourceInterface<VideoFrame>* source() = 0;
 
diff --git a/test/frame_generator_capturer.cc b/test/frame_generator_capturer.cc
index c69fca0..5d0e2e8 100644
--- a/test/frame_generator_capturer.cc
+++ b/test/frame_generator_capturer.cc
@@ -29,6 +29,7 @@
 namespace webrtc {
 namespace test {
 namespace {
+
 std::string TransformFilePath(std::string path) {
   static const std::string resource_prefix = "res://";
   int ext_pos = path.rfind('.');
@@ -41,6 +42,7 @@
   }
   return path;
 }
+
 }  // namespace
 
 FrameGeneratorCapturer::FrameGeneratorCapturer(
@@ -177,49 +179,39 @@
 }
 
 void FrameGeneratorCapturer::InsertFrame() {
-  absl::optional<Resolution> resolution;
+  MutexLock lock(&lock_);
+  if (sending_) {
+    FrameGeneratorInterface::VideoFrameData frame_data =
+        frame_generator_->NextFrame();
+    // TODO(srte): Use more advanced frame rate control to allow arbritrary
+    // fractions.
+    int decimation =
+        std::round(static_cast<double>(source_fps_) / target_capture_fps_);
+    for (int i = 1; i < decimation; ++i)
+      frame_data = frame_generator_->NextFrame();
 
-  {
-    MutexLock lock(&lock_);
-    if (sending_) {
-      FrameGeneratorInterface::VideoFrameData frame_data =
-          frame_generator_->NextFrame();
-      // TODO(srte): Use more advanced frame rate control to allow arbritrary
-      // fractions.
-      int decimation =
-          std::round(static_cast<double>(source_fps_) / target_capture_fps_);
-      for (int i = 1; i < decimation; ++i)
-        frame_data = frame_generator_->NextFrame();
-
-      VideoFrame frame =
-          VideoFrame::Builder()
-              .set_video_frame_buffer(frame_data.buffer)
-              .set_rotation(fake_rotation_)
-              .set_timestamp_us(clock_->TimeInMicroseconds())
-              .set_ntp_time_ms(clock_->CurrentNtpInMilliseconds())
-              .set_update_rect(frame_data.update_rect)
-              .set_color_space(fake_color_space_)
-              .build();
-      if (first_frame_capture_time_ == -1) {
-        first_frame_capture_time_ = frame.ntp_time_ms();
-      }
-
-      resolution = Resolution{frame.width(), frame.height()};
-
-      TestVideoCapturer::OnFrame(frame);
+    VideoFrame frame = VideoFrame::Builder()
+                           .set_video_frame_buffer(frame_data.buffer)
+                           .set_rotation(fake_rotation_)
+                           .set_timestamp_us(clock_->TimeInMicroseconds())
+                           .set_ntp_time_ms(clock_->CurrentNtpInMilliseconds())
+                           .set_update_rect(frame_data.update_rect)
+                           .set_color_space(fake_color_space_)
+                           .build();
+    if (first_frame_capture_time_ == -1) {
+      first_frame_capture_time_ = frame.ntp_time_ms();
     }
-  }
 
-  if (resolution) {
-    MutexLock lock(&stats_lock_);
-    source_resolution_ = resolution;
+    TestVideoCapturer::OnFrame(frame);
   }
 }
 
 absl::optional<FrameGeneratorCapturer::Resolution>
-FrameGeneratorCapturer::GetResolution() {
-  MutexLock lock(&stats_lock_);
-  return source_resolution_;
+FrameGeneratorCapturer::GetResolution() const {
+  FrameGeneratorInterface::Resolution resolution =
+      frame_generator_->GetResolution();
+  return Resolution{.width = static_cast<int>(resolution.width),
+                    .height = static_cast<int>(resolution.height)};
 }
 
 void FrameGeneratorCapturer::Start() {
@@ -266,6 +258,14 @@
   target_capture_fps_ = std::min(source_fps_, target_framerate);
 }
 
+int FrameGeneratorCapturer::GetFrameWidth() const {
+  return static_cast<int>(frame_generator_->GetResolution().width);
+}
+
+int FrameGeneratorCapturer::GetFrameHeight() const {
+  return static_cast<int>(frame_generator_->GetResolution().height);
+}
+
 void FrameGeneratorCapturer::OnOutputFormatRequest(
     int width,
     int height,
diff --git a/test/frame_generator_capturer.h b/test/frame_generator_capturer.h
index e310e40..20b3556 100644
--- a/test/frame_generator_capturer.h
+++ b/test/frame_generator_capturer.h
@@ -132,11 +132,14 @@
   void ChangeResolution(size_t width, size_t height);
   void ChangeFramerate(int target_framerate);
 
+  int GetFrameWidth() const override;
+  int GetFrameHeight() const override;
+
   struct Resolution {
     int width;
     int height;
   };
-  absl::optional<Resolution> GetResolution();
+  absl::optional<Resolution> GetResolution() const;
 
   void OnOutputFormatRequest(int width,
                              int height,
@@ -178,9 +181,6 @@
 
   int64_t first_frame_capture_time_;
 
-  Mutex stats_lock_;
-  absl::optional<Resolution> source_resolution_ RTC_GUARDED_BY(&stats_lock_);
-
   // Must be the last field, so it will be deconstructed first as tasks
   // in the TaskQueue access other fields of the instance of this class.
   rtc::TaskQueue task_queue_;
diff --git a/test/frame_generator_capturer_unittest.cc b/test/frame_generator_capturer_unittest.cc
index d8371f4..0098b0e 100644
--- a/test/frame_generator_capturer_unittest.cc
+++ b/test/frame_generator_capturer_unittest.cc
@@ -71,7 +71,9 @@
   config.squares_video->framerate = 20;
   auto capturer = FrameGeneratorCapturer::Create(
       time.GetClock(), *time.GetTaskQueueFactory(), config);
-  EXPECT_FALSE(capturer->GetResolution());
+  EXPECT_TRUE(capturer->GetResolution());
+  EXPECT_EQ(kWidth, capturer->GetResolution()->width);
+  EXPECT_EQ(kHeight, capturer->GetResolution()->height);
   capturer->Start();
   time.AdvanceTime(TimeDelta::Seconds(1));
   ASSERT_TRUE(capturer->GetResolution());
diff --git a/test/mac_capturer.h b/test/mac_capturer.h
index 3d7ee77..35cd1cc 100644
--- a/test/mac_capturer.h
+++ b/test/mac_capturer.h
@@ -10,6 +10,7 @@
 #ifndef TEST_MAC_CAPTURER_H_
 #define TEST_MAC_CAPTURER_H_
 
+#include <cstddef>
 #include <memory>
 #include <vector>
 
@@ -33,6 +34,9 @@
 
   void OnFrame(const VideoFrame& frame) override;
 
+  int GetFrameWidth() const override { return static_cast<int>(width_); }
+  int GetFrameHeight() const override { return static_cast<int>(height_); }
+
  private:
   MacCapturer(size_t width,
               size_t height,
@@ -40,6 +44,8 @@
               size_t capture_device_index);
   void Destroy();
 
+  size_t width_;
+  size_t height_;
   void* capturer_;
   void* adapter_;
 };
diff --git a/test/mac_capturer.mm b/test/mac_capturer.mm
index da8e9b7..9b14f28 100644
--- a/test/mac_capturer.mm
+++ b/test/mac_capturer.mm
@@ -64,6 +64,8 @@
                          size_t height,
                          size_t target_fps,
                          size_t capture_device_index) {
+  width_ = width;
+  height_ = height;
   RTCTestVideoSourceAdapter *adapter = [[RTCTestVideoSourceAdapter alloc] init];
   adapter_ = (__bridge_retained void *)adapter;
   adapter.capturer = this;
diff --git a/test/pc/e2e/media/test_video_capturer_video_track_source.h b/test/pc/e2e/media/test_video_capturer_video_track_source.h
index 350766b..70db07b 100644
--- a/test/pc/e2e/media/test_video_capturer_video_track_source.h
+++ b/test/pc/e2e/media/test_video_capturer_video_track_source.h
@@ -49,13 +49,27 @@
 
   void Stop() override { SetState(kMuted); }
 
+  int GetFrameWidth() const override {
+    return video_capturer_->GetFrameWidth();
+  }
+
+  int GetFrameHeight() const override {
+    return video_capturer_->GetFrameHeight();
+  }
+
   bool is_screencast() const override {
     RTC_DCHECK_RUN_ON(&sequence_checker_);
     return is_screencast_;
   }
 
-  void SetDisableAdaptation(bool disable_adaptation) {
-    video_capturer_->SetDisableAdaptation(disable_adaptation);
+  void SetEnableAdaptation(bool enable_adaptation) {
+    video_capturer_->SetEnableAdaptation(enable_adaptation);
+  }
+
+  void OnOutputFormatRequest(int width,
+                             int height,
+                             const absl::optional<int>& max_fps) override {
+    video_capturer_->OnOutputFormatRequest(width, height, max_fps);
   }
 
   void SetScreencast(bool is_screencast) override {
diff --git a/test/test_video_capturer.cc b/test/test_video_capturer.cc
index b55eefc..3098731 100644
--- a/test/test_video_capturer.cc
+++ b/test/test_video_capturer.cc
@@ -19,6 +19,7 @@
 
 namespace webrtc {
 namespace test {
+
 TestVideoCapturer::~TestVideoCapturer() = default;
 
 void TestVideoCapturer::OnOutputFormatRequest(
@@ -40,12 +41,12 @@
 
   VideoFrame frame = MaybePreprocess(original_frame);
 
-  bool disable_adaptation;
+  bool enable_adaptation;
   {
     MutexLock lock(&lock_);
-    disable_adaptation = disable_adaptation_;
+    enable_adaptation = enable_adaptation_;
   }
-  if (disable_adaptation) {
+  if (enable_adaptation) {
     broadcaster_.OnFrame(frame);
   }
 
diff --git a/test/test_video_capturer.h b/test/test_video_capturer.h
index 3fc03f0..48b7f7a 100644
--- a/test/test_video_capturer.h
+++ b/test/test_video_capturer.h
@@ -41,14 +41,17 @@
     MutexLock lock(&lock_);
     preprocessor_ = std::move(preprocessor);
   }
-  void SetDisableAdaptation(bool disable_adaptation) {
+  void SetEnableAdaptation(bool enable_adaptation) {
     MutexLock lock(&lock_);
-    disable_adaptation_ = disable_adaptation;
+    enable_adaptation_ = enable_adaptation;
   }
   void OnOutputFormatRequest(int width,
                              int height,
                              const absl::optional<int>& max_fps);
 
+  virtual int GetFrameWidth() const = 0;
+  virtual int GetFrameHeight() const = 0;
+
  protected:
   void OnFrame(const VideoFrame& frame);
   rtc::VideoSinkWants GetSinkWants();
@@ -59,7 +62,7 @@
 
   Mutex lock_;
   std::unique_ptr<FramePreprocessor> preprocessor_ RTC_GUARDED_BY(lock_);
-  bool disable_adaptation_ RTC_GUARDED_BY(lock_) = false;
+  bool enable_adaptation_ RTC_GUARDED_BY(lock_) = false;
   rtc::VideoBroadcaster broadcaster_;
   cricket::VideoAdapter video_adapter_;
 };
diff --git a/test/vcm_capturer.cc b/test/vcm_capturer.cc
index a037f9e..0a9226e 100644
--- a/test/vcm_capturer.cc
+++ b/test/vcm_capturer.cc
@@ -27,6 +27,8 @@
                        size_t height,
                        size_t target_fps,
                        size_t capture_device_index) {
+  width_ = width;
+  height_ = height;
   std::unique_ptr<VideoCaptureModule::DeviceInfo> device_info(
       VideoCaptureFactory::CreateDeviceInfo());
 
diff --git a/test/vcm_capturer.h b/test/vcm_capturer.h
index 5418dc9..da2b948 100644
--- a/test/vcm_capturer.h
+++ b/test/vcm_capturer.h
@@ -31,6 +31,9 @@
 
   void OnFrame(const VideoFrame& frame) override;
 
+  int GetFrameWidth() const override { return static_cast<int>(width_); }
+  int GetFrameHeight() const override { return static_cast<int>(height_); }
+
  private:
   VcmCapturer();
   bool Init(size_t width,
@@ -39,6 +42,8 @@
             size_t capture_device_index);
   void Destroy();
 
+  size_t width_;
+  size_t height_;
   rtc::scoped_refptr<VideoCaptureModule> vcm_;
   VideoCaptureCapability capability_;
 };
