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

Side by Side Diff: mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.cc

Issue 294833002: Mojo: more idiomatic C++ bindings (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 6 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 | Annotate | Revision Log
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 "mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.h" 5 #include "mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/run_loop.h" 8 #include "base/run_loop.h"
9 #include "mojo/public/cpp/application/connect.h" 9 #include "mojo/public/cpp/application/connect.h"
10 #include "mojo/public/interfaces/service_provider/service_provider.mojom.h" 10 #include "mojo/public/interfaces/service_provider/service_provider.mojom.h"
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 private_view.set_node(node); 49 private_view.set_node(node);
50 // TODO(beng): this broadcasts notifications locally... do we want this? I 50 // TODO(beng): this broadcasts notifications locally... do we want this? I
51 // don't think so. same story for LocalAddChild above! 51 // don't think so. same story for LocalAddChild above!
52 private_node.LocalSetActiveView(view); 52 private_node.LocalSetActiveView(view);
53 private_manager.AddView(view->id(), view); 53 private_manager.AddView(view->id(), view);
54 } 54 }
55 return node; 55 return node;
56 } 56 }
57 57
58 ViewTreeNode* BuildNodeTree(ViewManager* manager, 58 ViewTreeNode* BuildNodeTree(ViewManager* manager,
59 const Array<INode>& nodes) { 59 const Array<INodePtr>& nodes) {
60 std::vector<ViewTreeNode*> parents; 60 std::vector<ViewTreeNode*> parents;
61 ViewTreeNode* root = NULL; 61 ViewTreeNode* root = NULL;
62 ViewTreeNode* last_node = NULL; 62 ViewTreeNode* last_node = NULL;
63 for (size_t i = 0; i < nodes.size(); ++i) { 63 for (size_t i = 0; i < nodes.size(); ++i) {
64 if (last_node && nodes[i].parent_id() == last_node->id()) { 64 if (last_node && nodes[i]->parent_id == last_node->id()) {
65 parents.push_back(last_node); 65 parents.push_back(last_node);
66 } else if (!parents.empty()) { 66 } else if (!parents.empty()) {
67 while (parents.back()->id() != nodes[i].parent_id()) 67 while (parents.back()->id() != nodes[i]->parent_id)
68 parents.pop_back(); 68 parents.pop_back();
69 } 69 }
70 ViewTreeNode* node = AddNodeToViewManager( 70 ViewTreeNode* node = AddNodeToViewManager(
71 manager, 71 manager,
72 !parents.empty() ? parents.back() : NULL, 72 !parents.empty() ? parents.back() : NULL,
73 nodes[i].node_id(), 73 nodes[i]->node_id,
74 nodes[i].view_id(), 74 nodes[i]->view_id,
75 nodes[i].bounds()); 75 nodes[i]->bounds.To<gfx::Rect>());
76 if (!last_node) 76 if (!last_node)
77 root = node; 77 root = node;
78 last_node = node; 78 last_node = node;
79 } 79 }
80 return root; 80 return root;
81 } 81 }
82 82
83 class ViewManagerTransaction { 83 class ViewManagerTransaction {
84 public: 84 public:
85 virtual ~ViewManagerTransaction() {} 85 virtual ~ViewManagerTransaction() {}
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 const gfx::Rect& bounds, 320 const gfx::Rect& bounds,
321 ViewManagerSynchronizer* synchronizer) 321 ViewManagerSynchronizer* synchronizer)
322 : ViewManagerTransaction(TYPE_SET_BOUNDS, synchronizer), 322 : ViewManagerTransaction(TYPE_SET_BOUNDS, synchronizer),
323 node_id_(node_id), 323 node_id_(node_id),
324 bounds_(bounds) {} 324 bounds_(bounds) {}
325 virtual ~SetBoundsTransaction() {} 325 virtual ~SetBoundsTransaction() {}
326 326
327 private: 327 private:
328 // Overridden from ViewManagerTransaction: 328 // Overridden from ViewManagerTransaction:
329 virtual void DoCommit() OVERRIDE { 329 virtual void DoCommit() OVERRIDE {
330 AllocationScope scope; 330 service()->SetNodeBounds(
331 service()->SetNodeBounds(node_id_, bounds_, ActionCompletedCallback()); 331 node_id_, Rect::From(bounds_), ActionCompletedCallback());
332 } 332 }
333 virtual void DoActionCompleted(bool success) OVERRIDE { 333 virtual void DoActionCompleted(bool success) OVERRIDE {
334 // TODO(beng): recovery? 334 // TODO(beng): recovery?
335 } 335 }
336 336
337 const TransportNodeId node_id_; 337 const TransportNodeId node_id_;
338 const gfx::Rect bounds_; 338 const gfx::Rect bounds_;
339 339
340 DISALLOW_COPY_AND_ASSIGN(SetBoundsTransaction); 340 DISALLOW_COPY_AND_ASSIGN(SetBoundsTransaction);
341 }; 341 };
(...skipping 18 matching lines...) Expand all
360 ScopedSharedBufferHandle duped; 360 ScopedSharedBufferHandle duped;
361 bool result = CreateMapAndDupSharedBuffer(data.size(), 361 bool result = CreateMapAndDupSharedBuffer(data.size(),
362 &memory, 362 &memory,
363 &shared_state_handle_, 363 &shared_state_handle_,
364 &duped); 364 &duped);
365 if (!result) 365 if (!result)
366 return; 366 return;
367 367
368 memcpy(memory, &data[0], data.size()); 368 memcpy(memory, &data[0], data.size());
369 369
370 AllocationScope scope;
371 service()->SetViewContents(view_id_, duped.Pass(), 370 service()->SetViewContents(view_id_, duped.Pass(),
372 static_cast<uint32_t>(data.size()), 371 static_cast<uint32_t>(data.size()),
373 ActionCompletedCallback()); 372 ActionCompletedCallback());
374 } 373 }
375 virtual void DoActionCompleted(bool success) OVERRIDE { 374 virtual void DoActionCompleted(bool success) OVERRIDE {
376 // TODO(beng): recovery? 375 // TODO(beng): recovery?
377 } 376 }
378 377
379 bool CreateMapAndDupSharedBuffer(size_t size, 378 bool CreateMapAndDupSharedBuffer(size_t size,
380 void** memory, 379 void** memory,
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
517 new SetViewContentsTransaction(view_id, contents, this)); 516 new SetViewContentsTransaction(view_id, contents, this));
518 Sync(); 517 Sync();
519 } 518 }
520 519
521 //////////////////////////////////////////////////////////////////////////////// 520 ////////////////////////////////////////////////////////////////////////////////
522 // ViewManagerSynchronizer, IViewManagerClient implementation: 521 // ViewManagerSynchronizer, IViewManagerClient implementation:
523 522
524 void ViewManagerSynchronizer::OnViewManagerConnectionEstablished( 523 void ViewManagerSynchronizer::OnViewManagerConnectionEstablished(
525 TransportConnectionId connection_id, 524 TransportConnectionId connection_id,
526 TransportChangeId next_server_change_id, 525 TransportChangeId next_server_change_id,
527 const Array<INode>& nodes) { 526 mojo::Array<INodePtr> nodes) {
528 connected_ = true; 527 connected_ = true;
529 connection_id_ = connection_id; 528 connection_id_ = connection_id;
530 next_server_change_id_ = next_server_change_id; 529 next_server_change_id_ = next_server_change_id;
531 530
532 ViewManagerPrivate(view_manager_).set_root( 531 ViewManagerPrivate(view_manager_).set_root(
533 BuildNodeTree(view_manager_, nodes)); 532 BuildNodeTree(view_manager_, nodes));
534 if (init_loop_) 533 if (init_loop_)
535 init_loop_->Quit(); 534 init_loop_->Quit();
536 535
537 Sync(); 536 Sync();
538 } 537 }
539 538
540 void ViewManagerSynchronizer::OnServerChangeIdAdvanced( 539 void ViewManagerSynchronizer::OnServerChangeIdAdvanced(
541 uint32_t next_server_change_id) { 540 uint32_t next_server_change_id) {
542 next_server_change_id_ = next_server_change_id; 541 next_server_change_id_ = next_server_change_id;
543 } 542 }
544 543
545 void ViewManagerSynchronizer::OnNodeBoundsChanged(uint32 node_id, 544 void ViewManagerSynchronizer::OnNodeBoundsChanged(uint32 node_id,
546 const Rect& old_bounds, 545 RectPtr old_bounds,
547 const Rect& new_bounds) { 546 RectPtr new_bounds) {
548 ViewTreeNode* node = view_manager_->GetNodeById(node_id); 547 ViewTreeNode* node = view_manager_->GetNodeById(node_id);
549 ViewTreeNodePrivate(node).LocalSetBounds(old_bounds, new_bounds); 548 ViewTreeNodePrivate(node).LocalSetBounds(old_bounds.To<gfx::Rect>(),
549 new_bounds.To<gfx::Rect>());
550 } 550 }
551 551
552 void ViewManagerSynchronizer::OnNodeHierarchyChanged( 552 void ViewManagerSynchronizer::OnNodeHierarchyChanged(
553 uint32_t node_id, 553 uint32_t node_id,
554 uint32_t new_parent_id, 554 uint32_t new_parent_id,
555 uint32_t old_parent_id, 555 uint32_t old_parent_id,
556 TransportChangeId server_change_id, 556 TransportChangeId server_change_id,
557 const Array<INode>& nodes) { 557 mojo::Array<INodePtr> nodes) {
558 // TODO: deal with |nodes|. 558 // TODO: deal with |nodes|.
559 next_server_change_id_ = server_change_id + 1; 559 next_server_change_id_ = server_change_id + 1;
560 560
561 BuildNodeTree(view_manager_, nodes); 561 BuildNodeTree(view_manager_, nodes);
562 562
563 ViewTreeNode* new_parent = view_manager_->GetNodeById(new_parent_id); 563 ViewTreeNode* new_parent = view_manager_->GetNodeById(new_parent_id);
564 ViewTreeNode* old_parent = view_manager_->GetNodeById(old_parent_id); 564 ViewTreeNode* old_parent = view_manager_->GetNodeById(old_parent_id);
565 ViewTreeNode* node = view_manager_->GetNodeById(node_id); 565 ViewTreeNode* node = view_manager_->GetNodeById(node_id);
566 if (new_parent) 566 if (new_parent)
567 ViewTreeNodePrivate(new_parent).LocalAddChild(node); 567 ViewTreeNodePrivate(new_parent).LocalAddChild(node);
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
622 void ViewManagerSynchronizer::RemoveFromPendingQueue( 622 void ViewManagerSynchronizer::RemoveFromPendingQueue(
623 ViewManagerTransaction* transaction) { 623 ViewManagerTransaction* transaction) {
624 DCHECK_EQ(transaction, pending_transactions_.front()); 624 DCHECK_EQ(transaction, pending_transactions_.front());
625 pending_transactions_.erase(pending_transactions_.begin()); 625 pending_transactions_.erase(pending_transactions_.begin());
626 if (pending_transactions_.empty() && !changes_acked_callback_.is_null()) 626 if (pending_transactions_.empty() && !changes_acked_callback_.is_null())
627 changes_acked_callback_.Run(); 627 changes_acked_callback_.Run();
628 } 628 }
629 629
630 } // namespace view_manager 630 } // namespace view_manager
631 } // namespace mojo 631 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698