Index: content/renderer/media/canvas_capture_handler.cc |
diff --git a/content/renderer/media/canvas_capture_handler.cc b/content/renderer/media/canvas_capture_handler.cc |
index 4a44740d3b0cbeb6f7c782e819dc6c98576c702c..15ebf053d2d55cb948a5095ba472b23110293c55 100644 |
--- a/content/renderer/media/canvas_capture_handler.cc |
+++ b/content/renderer/media/canvas_capture_handler.cc |
@@ -38,6 +38,7 @@ class CanvasCaptureHandler::VideoCapturerSource |
int max_requested_height, |
double max_requested_frame_rate, |
const VideoCaptureDeviceFormatsCB& callback) override { |
+ DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
const blink::WebSize& size = canvas_handler_->GetSourceSize(); |
media::VideoCaptureFormats formats; |
formats.push_back( |
@@ -51,15 +52,19 @@ class CanvasCaptureHandler::VideoCapturerSource |
void StartCapture(const media::VideoCaptureParams& params, |
const VideoCaptureDeliverFrameCB& frame_callback, |
const RunningCallback& running_callback) override { |
+ DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
canvas_handler_->StartVideoCapture(params, frame_callback, |
running_callback); |
} |
void StopCapture() override { |
+ DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
canvas_handler_->StopVideoCapture(); |
} |
private: |
double frame_rate_; |
+ // Bound to Main Render thread. |
+ base::ThreadChecker main_render_thread_checker_; |
// CanvasCaptureHandler is owned by CanvasDrawListener in blink and |
// guaranteed to be alive during the lifetime of this class. |
base::WeakPtr<CanvasCaptureHandler> canvas_handler_; |
@@ -71,16 +76,16 @@ class CanvasCaptureHandler::CanvasCaptureHandlerDelegate { |
media::VideoCapturerSource::VideoCaptureDeliverFrameCB new_frame_callback) |
: new_frame_callback_(new_frame_callback), |
weak_ptr_factory_(this) { |
- thread_checker_.DetachFromThread(); |
+ io_thread_checker_.DetachFromThread(); |
} |
~CanvasCaptureHandlerDelegate() { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
+ DCHECK(io_thread_checker_.CalledOnValidThread()); |
} |
void SendNewFrameOnIOThread( |
const scoped_refptr<media::VideoFrame>& video_frame, |
const base::TimeTicks& current_time) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
+ DCHECK(io_thread_checker_.CalledOnValidThread()); |
new_frame_callback_.Run(video_frame, current_time); |
} |
@@ -91,7 +96,8 @@ class CanvasCaptureHandler::CanvasCaptureHandlerDelegate { |
private: |
const media::VideoCapturerSource::VideoCaptureDeliverFrameCB |
new_frame_callback_; |
- base::ThreadChecker thread_checker_; |
+ // Bound to IO thread. |
+ base::ThreadChecker io_thread_checker_; |
base::WeakPtrFactory<CanvasCaptureHandlerDelegate> weak_ptr_factory_; |
DISALLOW_COPY_AND_ASSIGN(CanvasCaptureHandlerDelegate); |
@@ -114,7 +120,7 @@ CanvasCaptureHandler::CanvasCaptureHandler( |
CanvasCaptureHandler::~CanvasCaptureHandler() { |
DVLOG(3) << __FUNCTION__; |
- DCHECK(thread_checker_.CalledOnValidThread()); |
+ DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
io_task_runner_->DeleteSoon(FROM_HERE, delegate_.release()); |
} |
@@ -132,12 +138,12 @@ CanvasCaptureHandler* CanvasCaptureHandler::CreateCanvasCaptureHandler( |
} |
void CanvasCaptureHandler::sendNewFrame(const SkImage* image) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
+ DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
CreateNewFrame(image); |
} |
bool CanvasCaptureHandler::needsNewFrame() const { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
+ DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
return ask_for_new_frame_; |
} |
@@ -148,8 +154,8 @@ void CanvasCaptureHandler::StartVideoCapture( |
const media::VideoCapturerSource::RunningCallback& running_callback) { |
DVLOG(3) << __FUNCTION__ << " requested " |
<< media::VideoCaptureFormat::ToString(params.requested_format); |
+ DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
DCHECK(params.requested_format.IsValid()); |
- DCHECK(thread_checker_.CalledOnValidThread()); |
// TODO(emircan): Accomodate to the given frame rate constraints here. |
capture_format_ = params.requested_format; |
@@ -161,13 +167,13 @@ void CanvasCaptureHandler::StartVideoCapture( |
void CanvasCaptureHandler::StopVideoCapture() { |
DVLOG(3) << __FUNCTION__; |
- DCHECK(thread_checker_.CalledOnValidThread()); |
+ DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
ask_for_new_frame_ = false; |
io_task_runner_->DeleteSoon(FROM_HERE, delegate_.release()); |
} |
void CanvasCaptureHandler::CreateNewFrame(const SkImage* image) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
+ DCHECK(main_render_thread_checker_.CalledOnValidThread()); |
DCHECK(image); |
const gfx::Size size(image->width(), image->height()); |
@@ -213,7 +219,7 @@ void CanvasCaptureHandler::CreateNewFrame(const SkImage* image) { |
base::Bind(&CanvasCaptureHandler::CanvasCaptureHandlerDelegate:: |
SendNewFrameOnIOThread, |
delegate_->GetWeakPtrForIOThread(), video_frame, |
- base::TimeTicks())); |
+ base::TimeTicks::Now())); |
} |
void CanvasCaptureHandler::AddVideoCapturerSourceToVideoTrack( |