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

Side by Side Diff: services/view_manager/display_manager.cc

Issue 940293003: Add a Display and ContextProvider concept to mojom, use to recreate (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 10 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/view_manager/display_manager.h" 5 #include "services/view_manager/display_manager.h"
6 6
7 #include "base/numerics/safe_conversions.h" 7 #include "base/numerics/safe_conversions.h"
8 #include "cc/surfaces/surface_id_allocator.h" 8 #include "cc/surfaces/surface_id_allocator.h"
9 #include "mojo/converters/geometry/geometry_type_converters.h" 9 #include "mojo/converters/geometry/geometry_type_converters.h"
10 #include "mojo/converters/surfaces/surfaces_type_converters.h" 10 #include "mojo/converters/surfaces/surfaces_type_converters.h"
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 metrics_.size = mojo::Size::New(); 88 metrics_.size = mojo::Size::New();
89 metrics_.size->width = 800; 89 metrics_.size->width = 800;
90 metrics_.size->height = 600; 90 metrics_.size->height = 600;
91 } 91 }
92 92
93 void DefaultDisplayManager::Init(ConnectionManager* connection_manager) { 93 void DefaultDisplayManager::Init(ConnectionManager* connection_manager) {
94 connection_manager_ = connection_manager; 94 connection_manager_ = connection_manager;
95 app_impl_->ConnectToService("mojo:native_viewport_service", 95 app_impl_->ConnectToService("mojo:native_viewport_service",
96 &native_viewport_); 96 &native_viewport_);
97 native_viewport_.set_error_handler(this); 97 native_viewport_.set_error_handler(this);
98 native_viewport_->Create( 98 native_viewport_->Create(metrics_.size->Clone(),
99 metrics_.size->Clone(), 99 base::Bind(&DefaultDisplayManager::OnMetricsChanged,
100 base::Bind(&DefaultDisplayManager::OnCreatedNativeViewport, 100 weak_factory_.GetWeakPtr()));
101 weak_factory_.GetWeakPtr()));
102 native_viewport_->Show(); 101 native_viewport_->Show();
103 102
104 app_impl_->ConnectToService("mojo:surfaces_service", &surface_); 103 app_impl_->ConnectToService("mojo:surfaces_service", &surface_);
105 surface_->GetIdNamespace(base::Bind(&DefaultDisplayManager::SetIdNamespace, 104 surface_->GetIdNamespace(base::Bind(&DefaultDisplayManager::SetIdNamespace,
106 base::Unretained(this))); 105 base::Unretained(this)));
107 106
108 mojo::NativeViewportEventDispatcherPtr event_dispatcher; 107 mojo::NativeViewportEventDispatcherPtr event_dispatcher;
109 app_connection_->ConnectToService(&event_dispatcher); 108 app_connection_->ConnectToService(&event_dispatcher);
110 native_viewport_->SetEventDispatcher(event_dispatcher.Pass()); 109 native_viewport_->SetEventDispatcher(event_dispatcher.Pass());
111 } 110 }
(...skipping 18 matching lines...) Expand all
130 } 129 }
131 130
132 void DefaultDisplayManager::SetViewportSize(const gfx::Size& size) { 131 void DefaultDisplayManager::SetViewportSize(const gfx::Size& size) {
133 native_viewport_->SetSize(Size::From(size)); 132 native_viewport_->SetSize(Size::From(size));
134 } 133 }
135 134
136 const mojo::ViewportMetrics& DefaultDisplayManager::GetViewportMetrics() { 135 const mojo::ViewportMetrics& DefaultDisplayManager::GetViewportMetrics() {
137 return metrics_; 136 return metrics_;
138 } 137 }
139 138
140 void DefaultDisplayManager::OnCreatedNativeViewport(
141 uint64_t native_viewport_id,
142 mojo::ViewportMetricsPtr metrics) {
143 OnMetricsChanged(metrics.Pass());
144 }
145
146 void DefaultDisplayManager::Draw() { 139 void DefaultDisplayManager::Draw() {
147 if (!surface_allocated_) { 140 if (!surface_allocated_) {
148 surface_->CreateSurface(kLocalSurfaceID); 141 surface_->CreateSurface(kLocalSurfaceID);
149 surface_allocated_ = true; 142 surface_allocated_ = true;
150 } 143 }
151 144
152 Rect rect; 145 Rect rect;
153 rect.width = metrics_.size->width; 146 rect.width = metrics_.size->width;
154 rect.height = metrics_.size->height; 147 rect.height = metrics_.size->height;
155 auto pass = CreateDefaultPass(1, rect); 148 auto pass = CreateDefaultPass(1, rect);
156 pass->damage_rect = Rect::From(dirty_rect_); 149 pass->damage_rect = Rect::From(dirty_rect_);
157 150
158 DrawViewTree(pass.get(), connection_manager_->root(), gfx::Vector2d(), 1.0f); 151 DrawViewTree(pass.get(), connection_manager_->root(), gfx::Vector2d(), 1.0f);
159 152
160 auto frame = mojo::Frame::New(); 153 auto frame = mojo::Frame::New();
161 frame->passes.push_back(pass.Pass()); 154 frame->passes.push_back(pass.Pass());
162 frame->resources.resize(0u); 155 frame->resources.resize(0u);
163 surface_->SubmitFrame(kLocalSurfaceID, frame.Pass(), mojo::Closure()); 156 surface_->SubmitFrame(kLocalSurfaceID, frame.Pass(), mojo::Closure());
164 dirty_rect_ = gfx::Rect(); 157 dirty_rect_ = gfx::Rect();
165 158
166 if (id_namespace_ == 0u) 159 if (id_namespace_ == 0u)
167 return; 160 return;
168 161
169 auto qualified_id = mojo::SurfaceId::New(); 162 auto qualified_id = mojo::SurfaceId::New();
170 qualified_id->id_namespace = id_namespace_; 163 qualified_id->id_namespace = id_namespace_;
171 qualified_id->local = kLocalSurfaceID; 164 qualified_id->local = kLocalSurfaceID;
172 native_viewport_->SubmittedFrame(qualified_id.Pass()); 165 // native_viewport_->SubmittedFrame(qualified_id.Pass());
173 } 166 }
174 167
175 void DefaultDisplayManager::OnMetricsChanged(mojo::ViewportMetricsPtr metrics) { 168 void DefaultDisplayManager::OnMetricsChanged(mojo::ViewportMetricsPtr metrics) {
176 metrics_.size = metrics->size.Clone(); 169 metrics_.size = metrics->size.Clone();
177 metrics_.device_pixel_ratio = metrics->device_pixel_ratio; 170 metrics_.device_pixel_ratio = metrics->device_pixel_ratio;
178 gfx::Rect bounds(metrics_.size.To<gfx::Size>()); 171 gfx::Rect bounds(metrics_.size.To<gfx::Size>());
179 connection_manager_->root()->SetBounds(bounds); 172 connection_manager_->root()->SetBounds(bounds);
180 connection_manager_->ProcessViewportMetricsChanged(metrics_, *metrics); 173 connection_manager_->ProcessViewportMetricsChanged(metrics_, *metrics);
181 if (!surface_allocated_) 174 if (!surface_allocated_)
182 return; 175 return;
183 surface_->DestroySurface(kLocalSurfaceID); 176 surface_->DestroySurface(kLocalSurfaceID);
184 surface_allocated_ = false; 177 surface_allocated_ = false;
185 SchedulePaint(connection_manager_->root(), bounds); 178 SchedulePaint(connection_manager_->root(), bounds);
186 native_viewport_->RequestMetrics(base::Bind( 179 native_viewport_->RequestMetrics(base::Bind(
187 &DefaultDisplayManager::OnMetricsChanged, weak_factory_.GetWeakPtr())); 180 &DefaultDisplayManager::OnMetricsChanged, weak_factory_.GetWeakPtr()));
188 } 181 }
189 182
190 void DefaultDisplayManager::SetIdNamespace(uint32_t id_namespace) { 183 void DefaultDisplayManager::SetIdNamespace(uint32_t id_namespace) {
191 id_namespace_ = id_namespace; 184 id_namespace_ = id_namespace;
192 if (surface_allocated_) { 185 if (surface_allocated_) {
193 auto qualified_id = mojo::SurfaceId::New(); 186 auto qualified_id = mojo::SurfaceId::New();
194 qualified_id->id_namespace = id_namespace_; 187 qualified_id->id_namespace = id_namespace_;
195 qualified_id->local = kLocalSurfaceID; 188 qualified_id->local = kLocalSurfaceID;
196 native_viewport_->SubmittedFrame(qualified_id.Pass()); 189 // native_viewport_->SubmittedFrame(qualified_id.Pass());
197 } 190 }
198 } 191 }
199 192
200 void DefaultDisplayManager::OnConnectionError() { 193 void DefaultDisplayManager::OnConnectionError() {
201 // This is called when the native_viewport is torn down before 194 // This is called when the native_viewport is torn down before
202 // ~DefaultDisplayManager may be called. 195 // ~DefaultDisplayManager may be called.
203 native_viewport_closed_callback_.Run(); 196 native_viewport_closed_callback_.Run();
204 } 197 }
205 198
206 } // namespace view_manager 199 } // namespace view_manager
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698