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

Unified Diff: services/ui/ws/server_window_compositor_frame_sink_manager.cc

Issue 2580703005: Fixes bug in ServerWindowCompositorFrameSinkManager (Closed)
Patch Set: merge Created 4 years 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
« no previous file with comments | « services/ui/ws/server_window_compositor_frame_sink_manager.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
+ }
}
}
« no previous file with comments | « services/ui/ws/server_window_compositor_frame_sink_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698