Index: content/renderer/android/synchronous_compositor_frame_sink.cc |
diff --git a/content/renderer/android/synchronous_compositor_frame_sink.cc b/content/renderer/android/synchronous_compositor_frame_sink.cc |
index 4113e6210d05e592ebc7534a07c63e7f8867d2cf..779dd15d193425d9c9ac6533803d296bf5badd35 100644 |
--- a/content/renderer/android/synchronous_compositor_frame_sink.cc |
+++ b/content/renderer/android/synchronous_compositor_frame_sink.cc |
@@ -122,7 +122,9 @@ SynchronousCompositorFrameSink::SynchronousCompositorFrameSink( |
frame_swap_message_queue_(frame_swap_message_queue), |
surface_manager_(new cc::SurfaceManager), |
surface_id_allocator_(new cc::SurfaceIdAllocator()), |
- surface_factory_( |
+ root_factory_( |
+ new cc::SurfaceFactory(kFrameSinkId, surface_manager_.get(), this)), |
+ child_factory_( |
new cc::SurfaceFactory(kFrameSinkId, surface_manager_.get(), this)), |
begin_frame_source_(std::move(begin_frame_source)) { |
DCHECK(registry_); |
@@ -198,15 +200,14 @@ void SynchronousCompositorFrameSink::DetachFromClient() { |
begin_frame_source_ = nullptr; |
registry_->UnregisterCompositorFrameSink(routing_id_, this); |
client_->SetTreeActivationCallback(base::Closure()); |
- if (root_local_frame_id_.is_valid()) { |
- surface_factory_->Destroy(root_local_frame_id_); |
- surface_factory_->Destroy(child_local_frame_id_); |
- } |
+ root_factory_->Reset(); |
+ child_factory_->Reset(); |
surface_manager_->UnregisterSurfaceFactoryClient(kFrameSinkId); |
surface_manager_->InvalidateFrameSinkId(kFrameSinkId); |
software_output_surface_ = nullptr; |
display_ = nullptr; |
- surface_factory_ = nullptr; |
+ child_factory_ = nullptr; |
+ root_factory_ = nullptr; |
surface_id_allocator_ = nullptr; |
surface_manager_ = nullptr; |
cc::CompositorFrameSink::DetachFromClient(); |
@@ -237,9 +238,7 @@ void SynchronousCompositorFrameSink::SubmitCompositorFrame( |
if (!root_local_frame_id_.is_valid()) { |
root_local_frame_id_ = surface_id_allocator_->GenerateId(); |
- surface_factory_->Create(root_local_frame_id_); |
child_local_frame_id_ = surface_id_allocator_->GenerateId(); |
- surface_factory_->Create(child_local_frame_id_); |
} |
display_->SetLocalFrameId(root_local_frame_id_, |
@@ -288,11 +287,11 @@ void SynchronousCompositorFrameSink::SubmitCompositorFrame( |
gfx::Rect(child_size), |
cc::SurfaceId(kFrameSinkId, child_local_frame_id_)); |
- surface_factory_->SubmitCompositorFrame( |
+ child_factory_->SubmitCompositorFrame( |
child_local_frame_id_, std::move(frame), base::Bind(&NoOpDrawCallback)); |
- surface_factory_->SubmitCompositorFrame(root_local_frame_id_, |
- std::move(embed_frame), |
- base::Bind(&NoOpDrawCallback)); |
+ root_factory_->SubmitCompositorFrame(root_local_frame_id_, |
+ std::move(embed_frame), |
+ base::Bind(&NoOpDrawCallback)); |
display_->DrawAndSwap(); |
} else { |
// For hardware draws we send the whole frame to the client so it can draw |