Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(219)

Unified Diff: cc/layers/video_frame_provider_client_impl.cc

Issue 1033563002: cc: Various code safety improvements in video compositing code. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: cc/layers/video_frame_provider_client_impl.cc
diff --git a/cc/layers/video_frame_provider_client_impl.cc b/cc/layers/video_frame_provider_client_impl.cc
index 4bbd92f284b74584f3e6c37ddc0b30f21179fe7f..76b77ca9773f4277d23496e7b89d1e16237fe037 100644
--- a/cc/layers/video_frame_provider_client_impl.cc
+++ b/cc/layers/video_frame_provider_client_impl.cc
@@ -13,17 +13,13 @@ namespace cc {
// static
scoped_refptr<VideoFrameProviderClientImpl>
- VideoFrameProviderClientImpl::Create(
- VideoFrameProvider* provider) {
- return make_scoped_refptr(
- new VideoFrameProviderClientImpl(provider));
+VideoFrameProviderClientImpl::Create(VideoFrameProvider* provider) {
+ return make_scoped_refptr(new VideoFrameProviderClientImpl(provider));
}
-VideoFrameProviderClientImpl::~VideoFrameProviderClientImpl() {}
-
VideoFrameProviderClientImpl::VideoFrameProviderClientImpl(
VideoFrameProvider* provider)
- : active_video_layer_(nullptr), provider_(provider) {
+ : provider_(provider), active_video_layer_(nullptr), stopped_(false) {
// This only happens during a commit on the compositor thread while the main
// thread is blocked. That makes this a thread-safe call to set the video
// frame provider client that does not require a lock. The same is true of
@@ -39,27 +35,35 @@ VideoFrameProviderClientImpl::VideoFrameProviderClientImpl(
0.0, 0.0, 0.0, 1.0);
}
-void VideoFrameProviderClientImpl::SetActiveVideoLayer(
- VideoLayerImpl* video_layer) {
+VideoFrameProviderClientImpl::~VideoFrameProviderClientImpl() {
+ DCHECK(Stopped());
+}
+
+void VideoFrameProviderClientImpl::Start(VideoLayerImpl* active_video_layer) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK(active_video_layer);
+ active_video_layer_ = active_video_layer;
+}
+
+bool VideoFrameProviderClientImpl::Started() const {
DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(video_layer);
- active_video_layer_ = video_layer;
+ return !!active_video_layer_;
}
void VideoFrameProviderClientImpl::Stop() {
- // It's called when the main thread is blocked, so lock isn't needed.
- if (!provider_)
- return;
DCHECK(thread_checker_.CalledOnValidThread());
- provider_->SetVideoFrameProviderClient(nullptr);
- provider_ = nullptr;
+ // It's called when the main thread is blocked, so lock isn't needed.
+ if (provider_) {
+ provider_->SetVideoFrameProviderClient(nullptr);
+ provider_ = nullptr;
+ }
+ active_video_layer_ = nullptr;
+ stopped_ = true;
}
-bool VideoFrameProviderClientImpl::Stopped() {
+bool VideoFrameProviderClientImpl::Stopped() const {
DCHECK(thread_checker_.CalledOnValidThread());
- // |provider_| is changed while the main thread is blocked, and not changed
- // thereafter, so lock isn't needed.
- return !provider_;
+ return stopped_;
}
scoped_refptr<media::VideoFrame>
@@ -86,18 +90,16 @@ void VideoFrameProviderClientImpl::ReleaseLock() {
}
void VideoFrameProviderClientImpl::StopUsingProvider() {
- // Block the provider from shutting down until this client is done
- // using the frame.
+ // Block the provider from shutting down until the frame controller and it's
danakj 2015/03/24 17:38:01 this is the only mention of a frame controller, i
sunnyps 2015/03/24 19:43:38 Done.
+ // layer is done using the frame.
base::AutoLock locker(provider_lock_);
provider_ = nullptr;
}
void VideoFrameProviderClientImpl::DidReceiveFrame() {
- TRACE_EVENT1("cc",
- "VideoFrameProviderClientImpl::DidReceiveFrame",
- "active_video_layer",
- !!active_video_layer_);
DCHECK(thread_checker_.CalledOnValidThread());
+ TRACE_EVENT1("cc", "VideoFrameProviderClientImpl::DidReceiveFrame", "Started",
+ Started());
if (active_video_layer_)
active_video_layer_->SetNeedsRedraw();
}

Powered by Google App Engine
This is Rietveld 408576698