Chromium Code Reviews| Index: content/browser/renderer_host/begin_frame_observer_proxy.cc |
| diff --git a/content/browser/renderer_host/begin_frame_observer_proxy.cc b/content/browser/renderer_host/begin_frame_observer_proxy.cc |
| index 7a6651f53c3a9faf6d55e981e1838d333563dd5a..b0996f51f6cdf689a570b844612382f157c0d678 100644 |
| --- a/content/browser/renderer_host/begin_frame_observer_proxy.cc |
| +++ b/content/browser/renderer_host/begin_frame_observer_proxy.cc |
| @@ -14,6 +14,7 @@ BeginFrameObserverProxy::BeginFrameObserverProxy( |
| } |
| BeginFrameObserverProxy::~BeginFrameObserverProxy() { |
| + ResetCompositor(); |
| } |
| void BeginFrameObserverProxy::SetNeedsBeginFrames(bool needs_begin_frames) { |
| @@ -35,9 +36,12 @@ void BeginFrameObserverProxy::SetNeedsBeginFrames(bool needs_begin_frames) { |
| void BeginFrameObserverProxy::SetCompositor(ui::Compositor* compositor) { |
| DCHECK(!compositor_); |
| - DCHECK(compositor); |
| + |
| + if (!compositor) |
|
simonhong
2015/03/27 17:37:54
I found that when RWHV is destroyed it calls SetCo
danakj
2015/03/27 17:41:47
I don't think we should have SetCompositor(nullptr
|
| + return; |
| compositor_ = compositor; |
| + compositor_->AddObserver(this); |
| if (needs_begin_frames_) |
| StartObservingBeginFrames(); |
| } |
| @@ -45,6 +49,7 @@ void BeginFrameObserverProxy::SetCompositor(ui::Compositor* compositor) { |
| void BeginFrameObserverProxy::ResetCompositor() { |
| if (!compositor_) |
| return; |
| + compositor_->RemoveObserver(this); |
| if (needs_begin_frames_) |
| StopObservingBeginFrames(); |
| @@ -57,6 +62,11 @@ void BeginFrameObserverProxy::OnSendBeginFrame(const cc::BeginFrameArgs& args) { |
| last_sent_begin_frame_args_ = args; |
| } |
| +void BeginFrameObserverProxy::OnCompositingShuttingDown( |
| + ui::Compositor* compositor) { |
| + ResetCompositor(); |
| +} |
| + |
| void BeginFrameObserverProxy::StartObservingBeginFrames() { |
| DCHECK(compositor_); |
| compositor_->AddBeginFrameObserver(this); |