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

Side by Side Diff: components/view_manager/server_view.cc

Issue 1281663002: Mandoline: Allow submitting CompositorFrames directly to mojo::Views (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Yet anther rebase (YAR!!!) Created 5 years, 4 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 "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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698