Index: content/browser/compositor/delegated_frame_host.cc |
diff --git a/content/browser/compositor/delegated_frame_host.cc b/content/browser/compositor/delegated_frame_host.cc |
index 7686744da1db7e1e9299a28ce77d141c49f76bc1..15288bff96533571b81186b7219b3abb833df58b 100644 |
--- a/content/browser/compositor/delegated_frame_host.cc |
+++ b/content/browser/compositor/delegated_frame_host.cc |
@@ -71,10 +71,13 @@ DelegatedFrameHost::DelegatedFrameHost(DelegatedFrameHostClient* client) |
skipped_frames_(false), |
current_scale_factor_(1.f), |
can_lock_compositor_(YES_CAN_LOCK), |
- delegated_frame_evictor_(new DelegatedFrameEvictor(this)) { |
+ delegated_frame_evictor_(new DelegatedFrameEvictor(this)), |
+ begin_frame_source_(nullptr) { |
ImageTransportFactory* factory = ImageTransportFactory::GetInstance(); |
factory->AddObserver(this); |
id_allocator_ = factory->GetContextFactory()->CreateSurfaceIdAllocator(); |
+ factory->GetSurfaceManager()->RegisterSurfaceFactoryClient( |
+ id_allocator_->id_namespace(), this); |
} |
void DelegatedFrameHost::WasShown(const ui::LatencyInfo& latency_info) { |
@@ -512,9 +515,9 @@ void DelegatedFrameHost::WillDrawSurface(cc::SurfaceId id, |
} |
void DelegatedFrameHost::SetBeginFrameSource( |
- cc::SurfaceId surface_id, |
cc::BeginFrameSource* begin_frame_source) { |
- // TODO(tansell): Hook this up. |
+ // TODO(enne): forward this to DelegatedFrameHostClient to observe and then to |
+ // the renderer as an external begin frame source. |
} |
void DelegatedFrameHost::EvictDelegatedFrame() { |
@@ -762,10 +765,13 @@ void DelegatedFrameHost::OnLostResources() { |
DelegatedFrameHost::~DelegatedFrameHost() { |
DCHECK(!compositor_); |
- ImageTransportFactory::GetInstance()->RemoveObserver(this); |
+ ImageTransportFactory* factory = ImageTransportFactory::GetInstance(); |
+ factory->RemoveObserver(this); |
if (!surface_id_.is_null()) |
surface_factory_->Destroy(surface_id_); |
+ factory->GetSurfaceManager()->UnregisterSurfaceFactoryClient( |
+ id_allocator_->id_namespace()); |
DCHECK(!vsync_manager_.get()); |
} |
@@ -779,6 +785,11 @@ void DelegatedFrameHost::SetCompositor(ui::Compositor* compositor) { |
DCHECK(!vsync_manager_.get()); |
vsync_manager_ = compositor_->vsync_manager(); |
vsync_manager_->AddObserver(this); |
+ |
+ ImageTransportFactory* factory = ImageTransportFactory::GetInstance(); |
+ uint32_t parent = compositor->surface_id_allocator()->id_namespace(); |
+ factory->GetSurfaceManager()->RegisterSurfaceNamespaceHierarchy( |
+ parent, id_allocator_->id_namespace()); |
} |
void DelegatedFrameHost::ResetCompositor() { |
@@ -794,6 +805,12 @@ void DelegatedFrameHost::ResetCompositor() { |
vsync_manager_->RemoveObserver(this); |
vsync_manager_ = NULL; |
} |
+ |
+ ImageTransportFactory* factory = ImageTransportFactory::GetInstance(); |
+ uint32_t parent = compositor_->surface_id_allocator()->id_namespace(); |
+ factory->GetSurfaceManager()->UnregisterSurfaceNamespaceHierarchy( |
+ parent, id_allocator_->id_namespace()); |
+ |
compositor_ = nullptr; |
} |