| Index: content/browser/renderer_host/compositor_impl_android.cc
|
| diff --git a/content/browser/renderer_host/compositor_impl_android.cc b/content/browser/renderer_host/compositor_impl_android.cc
|
| index fd3a6261e3cf5b938bf50805887de79c2eef44c0..bd3655b71c67bf2141c7af910938007b2c0a798d 100644
|
| --- a/content/browser/renderer_host/compositor_impl_android.cc
|
| +++ b/content/browser/renderer_host/compositor_impl_android.cc
|
| @@ -466,6 +466,7 @@ void CompositorImpl::SetVisible(bool visible) {
|
|
|
| host_->SetVisible(false);
|
| host_->ReleaseCompositorFrameSink();
|
| + has_compositor_frame_sink_ = false;
|
| pending_swapbuffers_ = 0;
|
| display_.reset();
|
| } else {
|
| @@ -532,6 +533,11 @@ void CompositorImpl::RequestNewCompositorFrameSink() {
|
|
|
| void CompositorImpl::DidInitializeCompositorFrameSink() {
|
| compositor_frame_sink_request_pending_ = false;
|
| + has_compositor_frame_sink_ = true;
|
| + for (auto& frame_sink_id : pending_child_frame_sink_ids_)
|
| + AddChildFrameSink(frame_sink_id);
|
| +
|
| + pending_child_frame_sink_ids_.clear();
|
| }
|
|
|
| void CompositorImpl::DidFailToInitializeCompositorFrameSink() {
|
| @@ -671,7 +677,6 @@ void CompositorImpl::InitializeDisplay(
|
| frame_sink_id_, manager, display_.get(), context_provider,
|
| nullptr, BrowserGpuMemoryBufferManager::current(),
|
| HostSharedBitmapManager::current());
|
| -
|
| display_->SetVisible(true);
|
| display_->Resize(size_);
|
| host_->SetCompositorFrameSink(std::move(compositor_frame_sink));
|
| @@ -706,6 +711,7 @@ void CompositorImpl::DidReceiveCompositorFrameAck() {
|
|
|
| void CompositorImpl::DidLoseCompositorFrameSink() {
|
| TRACE_EVENT0("compositor", "CompositorImpl::DidLoseCompositorFrameSink");
|
| + has_compositor_frame_sink_ = false;
|
| client_->OnSwapBuffersCompleted(0);
|
| }
|
|
|
| @@ -735,6 +741,28 @@ cc::FrameSinkId CompositorImpl::GetFrameSinkId() {
|
| return frame_sink_id_;
|
| }
|
|
|
| +void CompositorImpl::AddChildFrameSink(const cc::FrameSinkId& frame_sink_id) {
|
| + if (has_compositor_frame_sink_) {
|
| + ui::ContextProviderFactory::GetInstance()
|
| + ->GetSurfaceManager()
|
| + ->RegisterFrameSinkHierarchy(frame_sink_id_, frame_sink_id);
|
| + } else {
|
| + pending_child_frame_sink_ids_.insert(frame_sink_id);
|
| + }
|
| +}
|
| +
|
| +void CompositorImpl::RemoveChildFrameSink(
|
| + const cc::FrameSinkId& frame_sink_id) {
|
| + auto it = pending_child_frame_sink_ids_.find(frame_sink_id);
|
| + if (it != pending_child_frame_sink_ids_.end()) {
|
| + pending_child_frame_sink_ids_.erase(frame_sink_id);
|
| + return;
|
| + }
|
| + ui::ContextProviderFactory::GetInstance()
|
| + ->GetSurfaceManager()
|
| + ->UnregisterFrameSinkHierarchy(frame_sink_id_, frame_sink_id);
|
| +}
|
| +
|
| bool CompositorImpl::HavePendingReadbacks() {
|
| return !readback_layer_tree_->children().empty();
|
| }
|
|
|