| Index: webrtc/test/frame_generator.cc | 
| diff --git a/webrtc/test/frame_generator.cc b/webrtc/test/frame_generator.cc | 
| index ed7e95a12679d2abc36da2e56a4e194206c7d198..dbf39c4e096f8c64a9b1b7ab4e2bf65ea5816c97 100644 | 
| --- a/webrtc/test/frame_generator.cc | 
| +++ b/webrtc/test/frame_generator.cc | 
| @@ -239,6 +239,27 @@ class ScrollingImageFrameGenerator : public FrameGenerator { | 
|  | 
| }  // namespace | 
|  | 
| +FrameForwarder::FrameForwarder() : sink_(nullptr) {} | 
| + | 
| +void FrameForwarder::IncomingCapturedFrame(const VideoFrame& video_frame) { | 
| +  rtc::CritScope lock(&crit_); | 
| +  if (sink_) | 
| +    sink_->OnFrame(video_frame); | 
| +} | 
| + | 
| +void FrameForwarder::AddOrUpdateSink(rtc::VideoSinkInterface<VideoFrame>* sink, | 
| +                                     const rtc::VideoSinkWants& wants) { | 
| +  rtc::CritScope lock(&crit_); | 
| +  RTC_DCHECK(!sink_ || sink_ == sink); | 
| +  sink_ = sink; | 
| +} | 
| + | 
| +void FrameForwarder::RemoveSink(rtc::VideoSinkInterface<VideoFrame>* sink) { | 
| +  rtc::CritScope lock(&crit_); | 
| +  RTC_DCHECK_EQ(sink, sink_); | 
| +  sink_ = nullptr; | 
| +} | 
| + | 
| FrameGenerator* FrameGenerator::CreateChromaGenerator(size_t width, | 
| size_t height) { | 
| return new ChromaGenerator(width, height); | 
|  |