Index: services/ui/ws/server_window_compositor_frame_sink_manager.cc |
diff --git a/services/ui/ws/server_window_compositor_frame_sink_manager.cc b/services/ui/ws/server_window_compositor_frame_sink_manager.cc |
index b89eb1940b467eac29ab2a550d701a795aa3b60c..51091085e78f7173968a0d00ce72a8d85a6461ec 100644 |
--- a/services/ui/ws/server_window_compositor_frame_sink_manager.cc |
+++ b/services/ui/ws/server_window_compositor_frame_sink_manager.cc |
@@ -73,7 +73,7 @@ void ServerWindowCompositorFrameSinkManager::RemoveChildFrameSinkId( |
const cc::FrameSinkId& frame_sink_id) { |
auto it = type_to_compositor_frame_sink_map_.find(compositor_frame_sink_type); |
DCHECK(it != type_to_compositor_frame_sink_map_.end()); |
- it->second.compositor_frame_sink->AddChildFrameSink(frame_sink_id); |
+ it->second.compositor_frame_sink->RemoveChildFrameSink(frame_sink_id); |
} |
bool ServerWindowCompositorFrameSinkManager::HasCompositorFrameSinkOfType( |
@@ -114,6 +114,21 @@ void ServerWindowCompositorFrameSinkManager::SetLatestSurfaceInfo( |
data.latest_submitted_frame_size = frame_size; |
} |
+void ServerWindowCompositorFrameSinkManager::OnRootChanged( |
+ ServerWindow* old_root, |
+ ServerWindow* new_root) { |
+ for (const auto& pair : type_to_compositor_frame_sink_map_) { |
+ if (old_root) { |
+ old_root->GetOrCreateCompositorFrameSinkManager()->RemoveChildFrameSinkId( |
+ pair.first, pair.second.frame_sink_id); |
+ } |
+ if (new_root) { |
+ new_root->GetOrCreateCompositorFrameSinkManager()->AddChildFrameSinkId( |
+ pair.first, pair.second.frame_sink_id); |
+ } |
+ } |
+} |
+ |
bool ServerWindowCompositorFrameSinkManager:: |
IsCompositorFrameSinkReadyAndNonEmpty( |
mojom::CompositorFrameSinkType type) const { |
@@ -138,6 +153,7 @@ void ServerWindowCompositorFrameSinkManager::CreateCompositorFrameSinkInternal( |
static_cast<uint32_t>(compositor_frame_sink_type)); |
CompositorFrameSinkData& data = |
type_to_compositor_frame_sink_map_[compositor_frame_sink_type]; |
+ data.frame_sink_id = frame_sink_id; |
cc::mojom::MojoCompositorFrameSinkPrivateRequest private_request; |
if (data.pending_compositor_frame_sink_request.is_pending()) { |
private_request = std::move(data.pending_compositor_frame_sink_request); |
@@ -163,11 +179,11 @@ void ServerWindowCompositorFrameSinkManager::CreateCompositorFrameSinkInternal( |
} |
if (window_->parent()) { |
Fady Samuel
2016/12/16 16:59:49
This check seems redundant then if we're checking
sky
2016/12/16 17:07:06
If we don't check the parent it means if a frame s
|
- window_->delegate() |
- ->GetRootWindow(window_) |
- ->GetOrCreateCompositorFrameSinkManager() |
- ->AddChildFrameSinkId(mojom::CompositorFrameSinkType::DEFAULT, |
- frame_sink_id); |
+ ServerWindow* root_window = window_->GetRoot(); |
+ if (root_window) { |
+ root_window->GetOrCreateCompositorFrameSinkManager()->AddChildFrameSinkId( |
+ mojom::CompositorFrameSinkType::DEFAULT, frame_sink_id); |
+ } |
} |
} |