| 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 fd683c1199015225cb563e29d8562c916080554b..c0ff4c0f9fbb6281aff35e0251950e5a3900084a 100644
|
| --- a/content/renderer/android/synchronous_compositor_frame_sink.cc
|
| +++ b/content/renderer/android/synchronous_compositor_frame_sink.cc
|
| @@ -48,7 +48,8 @@ namespace content {
|
| namespace {
|
|
|
| const int64_t kFallbackTickTimeoutInMilliseconds = 100;
|
| -const cc::FrameSinkId kFrameSinkId(1, 1);
|
| +const cc::FrameSinkId kRootFrameSinkId(1, 1);
|
| +const cc::FrameSinkId kChildFrameSinkId(1, 2);
|
|
|
| // Do not limit number of resources, so use an unrealistically high value.
|
| const size_t kNumResourcesLimit = 10 * 1000 * 1000;
|
| @@ -122,8 +123,12 @@ SynchronousCompositorFrameSink::SynchronousCompositorFrameSink(
|
| frame_swap_message_queue_(frame_swap_message_queue),
|
| surface_manager_(new cc::SurfaceManager),
|
| surface_id_allocator_(new cc::SurfaceIdAllocator()),
|
| - surface_factory_(
|
| - new cc::SurfaceFactory(kFrameSinkId, surface_manager_.get(), this)),
|
| + root_factory_(new cc::SurfaceFactory(kRootFrameSinkId,
|
| + surface_manager_.get(),
|
| + this)),
|
| + child_factory_(new cc::SurfaceFactory(kChildFrameSinkId,
|
| + surface_manager_.get(),
|
| + this)),
|
| begin_frame_source_(std::move(begin_frame_source)) {
|
| DCHECK(registry_);
|
| DCHECK(sender_);
|
| @@ -168,8 +173,10 @@ bool SynchronousCompositorFrameSink::BindToClient(
|
| base::Unretained(this)));
|
| registry_->RegisterCompositorFrameSink(routing_id_, this);
|
|
|
| - surface_manager_->RegisterFrameSinkId(kFrameSinkId);
|
| - surface_manager_->RegisterSurfaceFactoryClient(kFrameSinkId, this);
|
| + surface_manager_->RegisterFrameSinkId(kRootFrameSinkId);
|
| + surface_manager_->RegisterFrameSinkId(kChildFrameSinkId);
|
| + surface_manager_->RegisterSurfaceFactoryClient(kRootFrameSinkId, this);
|
| + surface_manager_->RegisterSurfaceFactoryClient(kChildFrameSinkId, this);
|
|
|
| cc::RendererSettings software_renderer_settings;
|
|
|
| @@ -184,8 +191,9 @@ bool SynchronousCompositorFrameSink::BindToClient(
|
| display_.reset(new cc::Display(
|
| nullptr /* shared_bitmap_manager */,
|
| nullptr /* gpu_memory_buffer_manager */, software_renderer_settings,
|
| - kFrameSinkId, nullptr /* begin_frame_source */, std::move(output_surface),
|
| - nullptr /* scheduler */, nullptr /* texture_mailbox_deleter */));
|
| + kRootFrameSinkId, nullptr /* begin_frame_source */,
|
| + std::move(output_surface), nullptr /* scheduler */,
|
| + nullptr /* texture_mailbox_deleter */));
|
| display_->Initialize(&display_client_, surface_manager_.get());
|
| display_->SetVisible(true);
|
| return true;
|
| @@ -198,15 +206,16 @@ 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_);
|
| - }
|
| - surface_manager_->UnregisterSurfaceFactoryClient(kFrameSinkId);
|
| - surface_manager_->InvalidateFrameSinkId(kFrameSinkId);
|
| + root_factory_->EvictSurface();
|
| + child_factory_->EvictSurface();
|
| + surface_manager_->UnregisterSurfaceFactoryClient(kRootFrameSinkId);
|
| + surface_manager_->UnregisterSurfaceFactoryClient(kChildFrameSinkId);
|
| + surface_manager_->InvalidateFrameSinkId(kRootFrameSinkId);
|
| + surface_manager_->InvalidateFrameSinkId(kChildFrameSinkId);
|
| 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 +246,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_,
|
| @@ -284,15 +291,15 @@ void SynchronousCompositorFrameSink::SubmitCompositorFrame(
|
| child_transform, child_size, gfx::Rect(child_size),
|
| gfx::Rect() /* clip_rect */, false /* is_clipped */, 1.f /* opacity */,
|
| SkBlendMode::kSrcOver, 0 /* sorting_context_id */);
|
| - surface_quad->SetNew(shared_quad_state, gfx::Rect(child_size),
|
| - gfx::Rect(child_size),
|
| - cc::SurfaceId(kFrameSinkId, child_local_frame_id_));
|
| + surface_quad->SetNew(
|
| + shared_quad_state, gfx::Rect(child_size), gfx::Rect(child_size),
|
| + cc::SurfaceId(kChildFrameSinkId, 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
|
|
|