OLD | NEW |
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 "components/view_manager/server_view.h" | 5 #include "components/view_manager/server_view.h" |
6 | 6 |
7 #include <inttypes.h> | 7 #include <inttypes.h> |
8 | 8 |
9 #include "base/strings/stringprintf.h" | 9 #include "base/strings/stringprintf.h" |
10 #include "components/view_manager/server_view_delegate.h" | 10 #include "components/view_manager/server_view_delegate.h" |
11 #include "components/view_manager/server_view_observer.h" | 11 #include "components/view_manager/server_view_observer.h" |
| 12 #include "mojo/converters/geometry/geometry_type_converters.h" |
12 | 13 |
13 namespace view_manager { | 14 namespace view_manager { |
14 | 15 |
15 ServerView::ServerView(ServerViewDelegate* delegate, const ViewId& id) | 16 ServerView::ServerView(ServerViewDelegate* delegate, const ViewId& id) |
16 : delegate_(delegate), | 17 : delegate_(delegate), |
17 id_(id), | 18 id_(id), |
18 parent_(nullptr), | 19 parent_(nullptr), |
19 visible_(false), | 20 visible_(false), |
20 opacity_(1), | 21 opacity_(1), |
21 allows_reembed_(false), | 22 allows_reembed_(false), |
22 // Don't notify newly added observers during notification. This causes | 23 // Don't notify newly added observers during notification. This causes |
23 // problems for code that adds an observer as part of an observer | 24 // problems for code that adds an observer as part of an observer |
24 // notification (such as ServerViewDrawTracker). | 25 // notification (such as ServerViewDrawTracker). |
25 observers_(base::ObserverList<ServerViewObserver>::NOTIFY_EXISTING_ONLY) { | 26 observers_(base::ObserverList<ServerViewObserver>::NOTIFY_EXISTING_ONLY), |
| 27 binding_(this) { |
26 DCHECK(delegate); // Must provide a delegate. | 28 DCHECK(delegate); // Must provide a delegate. |
27 } | 29 } |
28 | 30 |
29 ServerView::~ServerView() { | 31 ServerView::~ServerView() { |
30 delegate_->PrepareToDestroyView(this); | 32 delegate_->PrepareToDestroyView(this); |
31 FOR_EACH_OBSERVER(ServerViewObserver, observers_, OnWillDestroyView(this)); | 33 FOR_EACH_OBSERVER(ServerViewObserver, observers_, OnWillDestroyView(this)); |
32 | 34 |
33 while (!children_.empty()) | 35 while (!children_.empty()) |
34 children_.front()->parent()->Remove(children_.front()); | 36 children_.front()->parent()->Remove(children_.front()); |
35 | 37 |
36 if (parent_) | 38 if (parent_) |
37 parent_->Remove(this); | 39 parent_->Remove(this); |
38 | 40 |
39 FOR_EACH_OBSERVER(ServerViewObserver, observers_, OnViewDestroyed(this)); | 41 FOR_EACH_OBSERVER(ServerViewObserver, observers_, OnViewDestroyed(this)); |
40 } | 42 } |
41 | 43 |
42 void ServerView::AddObserver(ServerViewObserver* observer) { | 44 void ServerView::AddObserver(ServerViewObserver* observer) { |
43 observers_.AddObserver(observer); | 45 observers_.AddObserver(observer); |
44 } | 46 } |
45 | 47 |
46 void ServerView::RemoveObserver(ServerViewObserver* observer) { | 48 void ServerView::RemoveObserver(ServerViewObserver* observer) { |
47 observers_.RemoveObserver(observer); | 49 observers_.RemoveObserver(observer); |
48 } | 50 } |
49 | 51 |
| 52 void ServerView::Bind(mojo::InterfaceRequest<CompositorFrameReceiver> request) { |
| 53 binding_.Bind(request.Pass()); |
| 54 } |
| 55 |
50 void ServerView::Add(ServerView* child) { | 56 void ServerView::Add(ServerView* child) { |
51 // We assume validation checks happened already. | 57 // We assume validation checks happened already. |
52 DCHECK(child); | 58 DCHECK(child); |
53 DCHECK(child != this); | 59 DCHECK(child != this); |
54 DCHECK(!child->Contains(this)); | 60 DCHECK(!child->Contains(this)); |
55 if (child->parent() == this) { | 61 if (child->parent() == this) { |
56 if (children_.size() == 1) | 62 if (children_.size() == 1) |
57 return; // Already in the right position. | 63 return; // Already in the right position. |
58 Reorder(child, children_.back(), mojo::ORDER_DIRECTION_ABOVE); | 64 Reorder(child, children_.back(), mojo::ORDER_DIRECTION_ABOVE); |
59 return; | 65 return; |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
210 while (view && view != root && view->visible()) | 216 while (view && view != root && view->visible()) |
211 view = view->parent(); | 217 view = view->parent(); |
212 return root == view; | 218 return root == view; |
213 } | 219 } |
214 | 220 |
215 void ServerView::SetSurfaceId(cc::SurfaceId surface_id) { | 221 void ServerView::SetSurfaceId(cc::SurfaceId surface_id) { |
216 surface_id_ = surface_id; | 222 surface_id_ = surface_id; |
217 delegate_->OnScheduleViewPaint(this); | 223 delegate_->OnScheduleViewPaint(this); |
218 } | 224 } |
219 | 225 |
| 226 void ServerView::SubmitCompositorFrame( |
| 227 mojo::CompositorFramePtr frame, |
| 228 const SubmitCompositorFrameCallback& callback) { |
| 229 gfx::Size frame_size = frame->passes[0]->output_rect.To<gfx::Rect>().size(); |
| 230 delegate_->SubmitCompositorFrame(this, frame.Pass(), callback); |
| 231 last_submitted_frame_size_ = frame_size; |
| 232 } |
| 233 |
220 #if !defined(NDEBUG) | 234 #if !defined(NDEBUG) |
221 std::string ServerView::GetDebugWindowHierarchy() const { | 235 std::string ServerView::GetDebugWindowHierarchy() const { |
222 std::string result; | 236 std::string result; |
223 BuildDebugInfo(std::string(), &result); | 237 BuildDebugInfo(std::string(), &result); |
224 return result; | 238 return result; |
225 } | 239 } |
226 | 240 |
227 void ServerView::BuildDebugInfo(const std::string& depth, | 241 void ServerView::BuildDebugInfo(const std::string& depth, |
228 std::string* result) const { | 242 std::string* result) const { |
229 *result += base::StringPrintf( | 243 *result += base::StringPrintf( |
230 "%sid=%d,%d visible=%s bounds=%d,%d %dx%d surface_id=%" PRIu64 "\n", | 244 "%sid=%d,%d visible=%s bounds=%d,%d %dx%d surface_id=%" PRIu64 "\n", |
231 depth.c_str(), static_cast<int>(id_.connection_id), | 245 depth.c_str(), static_cast<int>(id_.connection_id), |
232 static_cast<int>(id_.view_id), visible_ ? "true" : "false", bounds_.x(), | 246 static_cast<int>(id_.view_id), visible_ ? "true" : "false", bounds_.x(), |
233 bounds_.y(), bounds_.width(), bounds_.height(), surface_id_.id); | 247 bounds_.y(), bounds_.width(), bounds_.height(), surface_id_.id); |
234 for (const ServerView* child : children_) | 248 for (const ServerView* child : children_) |
235 child->BuildDebugInfo(depth + " ", result); | 249 child->BuildDebugInfo(depth + " ", result); |
236 } | 250 } |
237 #endif | 251 #endif |
238 | 252 |
239 void ServerView::RemoveImpl(ServerView* view) { | 253 void ServerView::RemoveImpl(ServerView* view) { |
240 view->parent_ = NULL; | 254 view->parent_ = NULL; |
241 children_.erase(std::find(children_.begin(), children_.end(), view)); | 255 children_.erase(std::find(children_.begin(), children_.end(), view)); |
242 } | 256 } |
243 | 257 |
244 } // namespace view_manager | 258 } // namespace view_manager |
OLD | NEW |