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); |