Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(703)

Unified Diff: content/browser/renderer_host/compositor_impl_android.cc

Issue 2683663002: Add AddChildFrameSink() and RemoveChildFrameSink() To WindowAndroidCompositor (Closed)
Patch Set: Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..49abcb2ce93af4880932990c093b24aec42ed6a5 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() {
@@ -706,6 +712,7 @@ void CompositorImpl::DidReceiveCompositorFrameAck() {
void CompositorImpl::DidLoseCompositorFrameSink() {
TRACE_EVENT0("compositor", "CompositorImpl::DidLoseCompositorFrameSink");
+ has_compositor_frame_sink_ = false;
client_->OnSwapBuffersCompleted(0);
}
@@ -735,6 +742,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(it);
+ return;
+ }
+ ui::ContextProviderFactory::GetInstance()
+ ->GetSurfaceManager()
+ ->UnregisterFrameSinkHierarchy(frame_sink_id_, frame_sink_id);
+}
+
bool CompositorImpl::HavePendingReadbacks() {
return !readback_layer_tree_->children().empty();
}

Powered by Google App Engine
This is Rietveld 408576698