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

Side by Side Diff: services/ui/ws/window_tree.cc

Issue 2886873002: Only send the FrameSinkId to client when it is necessary (Closed)
Patch Set: Address review issues. Created 3 years, 7 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "services/ui/ws/window_tree.h" 5 #include "services/ui/ws/window_tree.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <utility> 9 #include <utility>
10 10
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 display ? display->GetFocusedWindow() : nullptr; 139 display ? display->GetFocusedWindow() : nullptr;
140 if (focused_window) 140 if (focused_window)
141 focused_window = access_policy_->GetWindowForFocusChange(focused_window); 141 focused_window = access_policy_->GetWindowForFocusChange(focused_window);
142 ClientWindowId focused_window_id; 142 ClientWindowId focused_window_id;
143 if (focused_window) 143 if (focused_window)
144 IsWindowKnown(focused_window, &focused_window_id); 144 IsWindowKnown(focused_window, &focused_window_id);
145 145
146 const bool drawn = root->parent() && root->parent()->IsDrawn(); 146 const bool drawn = root->parent() && root->parent()->IsDrawn();
147 client()->OnEmbed(id_, WindowToWindowData(to_send.front()), std::move(tree), 147 client()->OnEmbed(id_, WindowToWindowData(to_send.front()), std::move(tree),
148 display_id, focused_window_id.id, drawn, 148 display_id, focused_window_id.id, drawn,
149 root->frame_sink_id(), root->current_local_surface_id()); 149 root->current_local_surface_id());
150 } 150 }
151 151
152 void WindowTree::ConfigureWindowManager( 152 void WindowTree::ConfigureWindowManager(
153 bool automatically_create_display_roots) { 153 bool automatically_create_display_roots) {
154 // ConfigureWindowManager() should be called early on, before anything 154 // ConfigureWindowManager() should be called early on, before anything
155 // else. |waiting_for_top_level_window_info_| must be null as if 155 // else. |waiting_for_top_level_window_info_| must be null as if
156 // |waiting_for_top_level_window_info_| is non-null it means we're about to 156 // |waiting_for_top_level_window_info_| is non-null it means we're about to
157 // create an associated interface, which doesn't work with pause/resume. 157 // create an associated interface, which doesn't work with pause/resume.
158 // TODO(sky): DCHECK temporary until 626869 is sorted out. 158 // TODO(sky): DCHECK temporary until 626869 is sorted out.
159 DCHECK(!waiting_for_top_level_window_info_); 159 DCHECK(!waiting_for_top_level_window_info_);
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 DCHECK_EQ(0u, client_id_to_window_id_map_.count(client_window_id)); 230 DCHECK_EQ(0u, client_id_to_window_id_map_.count(client_window_id));
231 client_id_to_window_id_map_[client_window_id] = root->id(); 231 client_id_to_window_id_map_[client_window_id] = root->id();
232 window_id_to_client_id_map_[root->id()] = client_window_id; 232 window_id_to_client_id_map_[root->id()] = client_window_id;
233 roots_.insert(root); 233 roots_.insert(root);
234 234
235 Display* ws_display = GetDisplay(root); 235 Display* ws_display = GetDisplay(root);
236 DCHECK(ws_display); 236 DCHECK(ws_display);
237 237
238 window_manager_internal_->WmNewDisplayAdded( 238 window_manager_internal_->WmNewDisplayAdded(
239 ws_display->GetDisplay(), WindowToWindowData(root), 239 ws_display->GetDisplay(), WindowToWindowData(root),
240 root->parent()->IsDrawn(), root->frame_sink_id(), 240 root->parent()->IsDrawn(), root->current_local_surface_id());
241 root->current_local_surface_id());
242 } 241 }
243 242
244 void WindowTree::OnWindowDestroyingTreeImpl(WindowTree* tree) { 243 void WindowTree::OnWindowDestroyingTreeImpl(WindowTree* tree) {
245 if (event_source_wms_ && event_source_wms_->window_tree() == tree) 244 if (event_source_wms_ && event_source_wms_->window_tree() == tree)
246 event_source_wms_ = nullptr; 245 event_source_wms_ = nullptr;
247 246
248 // Notify our client if |tree| was embedded in any of our windows. 247 // Notify our client if |tree| was embedded in any of our windows.
249 for (const auto* tree_root : tree->roots_) { 248 for (const auto* tree_root : tree->roots_) {
250 const bool owns_tree_root = tree_root->id().client_id == id_; 249 const bool owns_tree_root = tree_root->id().client_id == id_;
251 if (owns_tree_root) { 250 if (owns_tree_root) {
(...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after
655 } 654 }
656 client_id_to_window_id_map_[waiting_for_top_level_window_info 655 client_id_to_window_id_map_[waiting_for_top_level_window_info
657 ->client_window_id] = window->id(); 656 ->client_window_id] = window->id();
658 window_id_to_client_id_map_[window->id()] = 657 window_id_to_client_id_map_[window->id()] =
659 waiting_for_top_level_window_info->client_window_id; 658 waiting_for_top_level_window_info->client_window_id;
660 roots_.insert(window); 659 roots_.insert(window);
661 Display* display = GetDisplay(window); 660 Display* display = GetDisplay(window);
662 int64_t display_id = display ? display->GetId() : display::kInvalidDisplayId; 661 int64_t display_id = display ? display->GetId() : display::kInvalidDisplayId;
663 const bool drawn = window->parent() && window->parent()->IsDrawn(); 662 const bool drawn = window->parent() && window->parent()->IsDrawn();
664 client()->OnTopLevelCreated(client_change_id, WindowToWindowData(window), 663 client()->OnTopLevelCreated(client_change_id, WindowToWindowData(window),
665 display_id, drawn, window->frame_sink_id(), 664 display_id, drawn,
666 window->current_local_surface_id()); 665 window->current_local_surface_id());
667 } 666 }
668 667
669 void WindowTree::AddActivationParent(const ClientWindowId& window_id) { 668 void WindowTree::AddActivationParent(const ClientWindowId& window_id) {
670 ServerWindow* window = GetWindowByClientId(window_id); 669 ServerWindow* window = GetWindowByClientId(window_id);
671 if (window) { 670 if (window) {
672 Display* display = GetDisplay(window); 671 Display* display = GetDisplay(window);
673 if (display) { 672 if (display) {
674 display->AddActivationParent(window); 673 display->AddActivationParent(window);
675 } else { 674 } else {
(...skipping 1551 matching lines...) Expand 10 before | Expand all | Expand 10 after
2227 2226
2228 void WindowTree::SetDisplayRoot(const display::Display& display, 2227 void WindowTree::SetDisplayRoot(const display::Display& display,
2229 mojom::WmViewportMetricsPtr viewport_metrics, 2228 mojom::WmViewportMetricsPtr viewport_metrics,
2230 bool is_primary_display, 2229 bool is_primary_display,
2231 Id window_id, 2230 Id window_id,
2232 const SetDisplayRootCallback& callback) { 2231 const SetDisplayRootCallback& callback) {
2233 ServerWindow* display_root = 2232 ServerWindow* display_root =
2234 ProcessSetDisplayRoot(display, *viewport_metrics, is_primary_display, 2233 ProcessSetDisplayRoot(display, *viewport_metrics, is_primary_display,
2235 ClientWindowId(window_id)); 2234 ClientWindowId(window_id));
2236 if (!display_root) { 2235 if (!display_root) {
2237 callback.Run(base::Optional<cc::FrameSinkId>()); 2236 callback.Run(false);
2238 return; 2237 return;
2239 } 2238 }
2240 display_root->parent()->SetVisible(true); 2239 display_root->parent()->SetVisible(true);
2241 callback.Run(display_root->frame_sink_id()); 2240 callback.Run(true);
2242 } 2241 }
2243 2242
2244 void WindowTree::WmResponse(uint32_t change_id, bool response) { 2243 void WindowTree::WmResponse(uint32_t change_id, bool response) {
2245 if (window_server_->in_move_loop() && 2244 if (window_server_->in_move_loop() &&
2246 window_server_->GetCurrentMoveLoopChangeId() == change_id) { 2245 window_server_->GetCurrentMoveLoopChangeId() == change_id) {
2247 ServerWindow* window = window_server_->GetCurrentMoveLoopWindow(); 2246 ServerWindow* window = window_server_->GetCurrentMoveLoopWindow();
2248 2247
2249 if (window->id().client_id != id_) { 2248 if (window->id().client_id != id_) {
2250 window_server_->WindowManagerSentBogusMessage(); 2249 window_server_->WindowManagerSentBogusMessage();
2251 window = nullptr; 2250 window = nullptr;
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
2504 client()->OnCompleteDrop(client_window_id.id, event_flags, cursor_offset, 2503 client()->OnCompleteDrop(client_window_id.id, event_flags, cursor_offset,
2505 effect_bitmask, callback); 2504 effect_bitmask, callback);
2506 } 2505 }
2507 2506
2508 void WindowTree::PerformOnDragDropDone() { 2507 void WindowTree::PerformOnDragDropDone() {
2509 client()->OnDragDropDone(); 2508 client()->OnDragDropDone();
2510 } 2509 }
2511 2510
2512 } // namespace ws 2511 } // namespace ws
2513 } // namespace ui 2512 } // namespace ui
OLDNEW
« no previous file with comments | « services/ui/ws/window_manager_client_unittest.cc ('k') | services/ui/ws/window_tree_client_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698