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

Side by Side Diff: services/gfx/compositor/graph/scene_def.cc

Issue 1874593002: Mozart: Rename scene graph classes. (Closed) Base URL: git@github.com:domokit/mojo.git@moz-2
Patch Set: Created 4 years, 8 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
« no previous file with comments | « services/gfx/compositor/graph/scene_def.h ('k') | services/gfx/compositor/graph/snapshot.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/gfx/compositor/graph/scene_def.h" 5 #include "services/gfx/compositor/graph/scene_def.h"
6 6
7 #include <ostream> 7 #include <ostream>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 100
101 // Update resources. 101 // Update resources.
102 if (update->clear_resources) { 102 if (update->clear_resources) {
103 resources_.clear(); 103 resources_.clear();
104 } 104 }
105 for (auto it = update->resources.begin(); it != update->resources.end(); 105 for (auto it = update->resources.begin(); it != update->resources.end();
106 ++it) { 106 ++it) {
107 uint32_t resource_id = it.GetKey(); 107 uint32_t resource_id = it.GetKey();
108 mojo::gfx::composition::ResourcePtr& resource_decl = it.GetValue(); 108 mojo::gfx::composition::ResourcePtr& resource_decl = it.GetValue();
109 if (resource_decl) { 109 if (resource_decl) {
110 scoped_refptr<const ResourceDef> resource = CreateResource( 110 scoped_refptr<const Resource> resource = CreateResource(
111 resource_id, resource_decl.Pass(), resolver, unavailable_sender, err); 111 resource_id, resource_decl.Pass(), resolver, unavailable_sender, err);
112 if (!resource) 112 if (!resource)
113 return false; 113 return false;
114 resources_[resource_id] = std::move(resource); 114 resources_[resource_id] = std::move(resource);
115 } else { 115 } else {
116 resources_.erase(resource_id); 116 resources_.erase(resource_id);
117 } 117 }
118 } 118 }
119 119
120 // Update nodes. 120 // Update nodes.
121 if (update->clear_nodes) { 121 if (update->clear_nodes) {
122 nodes_.clear(); 122 nodes_.clear();
123 } 123 }
124 for (auto it = update->nodes.begin(); it != update->nodes.end(); ++it) { 124 for (auto it = update->nodes.begin(); it != update->nodes.end(); ++it) {
125 uint32_t node_id = it.GetKey(); 125 uint32_t node_id = it.GetKey();
126 mojo::gfx::composition::NodePtr& node_decl = it.GetValue(); 126 mojo::gfx::composition::NodePtr& node_decl = it.GetValue();
127 if (node_decl) { 127 if (node_decl) {
128 scoped_refptr<const NodeDef> node = 128 scoped_refptr<const Node> node =
129 CreateNode(node_id, node_decl.Pass(), err); 129 CreateNode(node_id, node_decl.Pass(), err);
130 if (!node) 130 if (!node)
131 return false; 131 return false;
132 nodes_[node_id] = std::move(node); 132 nodes_[node_id] = std::move(node);
133 } else { 133 } else {
134 nodes_.erase(node_id); 134 nodes_.erase(node_id);
135 } 135 }
136 } 136 }
137 return true; 137 return true;
138 } 138 }
139 139
140 bool SceneDef::UnlinkReferencedScene( 140 bool SceneDef::UnlinkReferencedScene(
141 SceneDef* scene, 141 SceneDef* scene,
142 const SceneUnavailableSender& unavailable_sender) { 142 const SceneUnavailableSender& unavailable_sender) {
143 DCHECK(scene); 143 DCHECK(scene);
144 144
145 bool changed = false; 145 bool changed = false;
146 for (auto& pair : resources_) { 146 for (auto& pair : resources_) {
147 if (pair.second->type() == ResourceDef::Type::kScene) { 147 if (pair.second->type() == Resource::Type::kScene) {
148 auto scene_resource = 148 auto scene_resource =
149 static_cast<const SceneResourceDef*>(pair.second.get()); 149 static_cast<const SceneResource*>(pair.second.get());
150 if (scene_resource->referenced_scene().get() == scene) { 150 if (scene_resource->referenced_scene().get() == scene) {
151 changed = true; 151 changed = true;
152 pair.second = scene_resource->Unlink(); 152 pair.second = scene_resource->Unlink();
153 unavailable_sender.Run(pair.first); 153 unavailable_sender.Run(pair.first);
154 } 154 }
155 } 155 }
156 } 156 }
157 return changed; 157 return changed;
158 } 158 }
159 159
160 scoped_refptr<const ResourceDef> SceneDef::CreateResource( 160 scoped_refptr<const Resource> SceneDef::CreateResource(
161 uint32_t resource_id, 161 uint32_t resource_id,
162 mojo::gfx::composition::ResourcePtr resource_decl, 162 mojo::gfx::composition::ResourcePtr resource_decl,
163 const SceneResolver& resolver, 163 const SceneResolver& resolver,
164 const SceneUnavailableSender& unavailable_sender, 164 const SceneUnavailableSender& unavailable_sender,
165 std::ostream& err) { 165 std::ostream& err) {
166 DCHECK(resource_decl); 166 DCHECK(resource_decl);
167 167
168 if (resource_decl->is_scene()) { 168 if (resource_decl->is_scene()) {
169 auto& scene_resource_decl = resource_decl->get_scene(); 169 auto& scene_resource_decl = resource_decl->get_scene();
170 DCHECK(scene_resource_decl->scene_token); 170 DCHECK(scene_resource_decl->scene_token);
171 171
172 const mojo::gfx::composition::SceneToken& scene_token = 172 const mojo::gfx::composition::SceneToken& scene_token =
173 *scene_resource_decl->scene_token; 173 *scene_resource_decl->scene_token;
174 base::WeakPtr<SceneDef> referenced_scene = resolver.Run(scene_token); 174 base::WeakPtr<SceneDef> referenced_scene = resolver.Run(scene_token);
175 if (!referenced_scene) 175 if (!referenced_scene)
176 unavailable_sender.Run(resource_id); 176 unavailable_sender.Run(resource_id);
177 return new SceneResourceDef(scene_token, referenced_scene); 177 return new SceneResource(scene_token, referenced_scene);
178 } 178 }
179 179
180 if (resource_decl->is_mailbox_texture()) { 180 if (resource_decl->is_mailbox_texture()) {
181 auto& mailbox_texture_resource_decl = resource_decl->get_mailbox_texture(); 181 auto& mailbox_texture_resource_decl = resource_decl->get_mailbox_texture();
182 DCHECK(mailbox_texture_resource_decl->mailbox_name.size() == 182 DCHECK(mailbox_texture_resource_decl->mailbox_name.size() ==
183 GL_MAILBOX_SIZE_CHROMIUM); 183 GL_MAILBOX_SIZE_CHROMIUM);
184 DCHECK(mailbox_texture_resource_decl->size); 184 DCHECK(mailbox_texture_resource_decl->size);
185 185
186 const int32_t width = mailbox_texture_resource_decl->size->width; 186 const int32_t width = mailbox_texture_resource_decl->size->width;
187 const int32_t height = mailbox_texture_resource_decl->size->height; 187 const int32_t height = mailbox_texture_resource_decl->size->height;
(...skipping 15 matching lines...) Expand all
203 base::MessageLoop::current()->task_runner(), 203 base::MessageLoop::current()->task_runner(),
204 base::Bind( 204 base::Bind(
205 &ReleaseMailboxTexture, 205 &ReleaseMailboxTexture,
206 base::Passed( 206 base::Passed(
207 mojo::gfx::composition::MailboxTextureCallbackPtr::Create( 207 mojo::gfx::composition::MailboxTextureCallbackPtr::Create(
208 std::move(mailbox_texture_resource_decl->callback))))); 208 std::move(mailbox_texture_resource_decl->callback)))));
209 if (!image) { 209 if (!image) {
210 err << "Could not create MailboxTexture"; 210 err << "Could not create MailboxTexture";
211 return nullptr; 211 return nullptr;
212 } 212 }
213 return new ImageResourceDef(image); 213 return new ImageResource(image);
214 } 214 }
215 215
216 err << "Unsupported resource type: resource_id=" << resource_id; 216 err << "Unsupported resource type: resource_id=" << resource_id;
217 return nullptr; 217 return nullptr;
218 } 218 }
219 219
220 scoped_refptr<const NodeDef> SceneDef::CreateNode( 220 scoped_refptr<const Node> SceneDef::CreateNode(
221 uint32_t node_id, 221 uint32_t node_id,
222 mojo::gfx::composition::NodePtr node_decl, 222 mojo::gfx::composition::NodePtr node_decl,
223 std::ostream& err) { 223 std::ostream& err) {
224 DCHECK(node_decl); 224 DCHECK(node_decl);
225 225
226 std::unique_ptr<TransformPair> content_transform; 226 std::unique_ptr<TransformPair> content_transform;
227 if (node_decl->content_transform) { 227 if (node_decl->content_transform) {
228 content_transform.reset( 228 content_transform.reset(
229 new TransformPair(node_decl->content_transform.To<SkMatrix44>())); 229 new TransformPair(node_decl->content_transform.To<SkMatrix44>()));
230 } 230 }
231 mojo::RectFPtr content_clip = node_decl->content_clip.Pass(); 231 mojo::RectFPtr content_clip = node_decl->content_clip.Pass();
232 mojo::gfx::composition::HitTestBehaviorPtr hit_test_behavior = 232 mojo::gfx::composition::HitTestBehaviorPtr hit_test_behavior =
233 node_decl->hit_test_behavior.Pass(); 233 node_decl->hit_test_behavior.Pass();
234 const mojo::gfx::composition::Node::Combinator combinator = 234 const mojo::gfx::composition::Node::Combinator combinator =
235 node_decl->combinator; 235 node_decl->combinator;
236 const std::vector<uint32_t>& child_node_ids = 236 const std::vector<uint32_t>& child_node_ids =
237 node_decl->child_node_ids.storage(); 237 node_decl->child_node_ids.storage();
238 238
239 if (!node_decl->op) { 239 if (!node_decl->op) {
240 return new NodeDef(node_id, std::move(content_transform), 240 return new Node(node_id, std::move(content_transform), content_clip.Pass(),
241 content_clip.Pass(), hit_test_behavior.Pass(), 241 hit_test_behavior.Pass(), combinator, child_node_ids);
242 combinator, child_node_ids);
243 } 242 }
244 243
245 if (node_decl->op->is_rect()) { 244 if (node_decl->op->is_rect()) {
246 auto& rect_node_decl = node_decl->op->get_rect(); 245 auto& rect_node_decl = node_decl->op->get_rect();
247 DCHECK(rect_node_decl->content_rect); 246 DCHECK(rect_node_decl->content_rect);
248 DCHECK(rect_node_decl->color); 247 DCHECK(rect_node_decl->color);
249 248
250 const mojo::RectF& content_rect = *rect_node_decl->content_rect; 249 const mojo::RectF& content_rect = *rect_node_decl->content_rect;
251 const mojo::gfx::composition::Color& color = *rect_node_decl->color; 250 const mojo::gfx::composition::Color& color = *rect_node_decl->color;
252 return new RectNodeDef(node_id, std::move(content_transform), 251 return new RectNode(node_id, std::move(content_transform),
253 content_clip.Pass(), hit_test_behavior.Pass(), 252 content_clip.Pass(), hit_test_behavior.Pass(),
254 combinator, child_node_ids, content_rect, color); 253 combinator, child_node_ids, content_rect, color);
255 } 254 }
256 255
257 if (node_decl->op->is_image()) { 256 if (node_decl->op->is_image()) {
258 auto& image_node_decl = node_decl->op->get_image(); 257 auto& image_node_decl = node_decl->op->get_image();
259 DCHECK(image_node_decl->content_rect); 258 DCHECK(image_node_decl->content_rect);
260 259
261 const mojo::RectF& content_rect = *image_node_decl->content_rect; 260 const mojo::RectF& content_rect = *image_node_decl->content_rect;
262 mojo::RectFPtr image_rect = image_node_decl->image_rect.Pass(); 261 mojo::RectFPtr image_rect = image_node_decl->image_rect.Pass();
263 const uint32 image_resource_id = image_node_decl->image_resource_id; 262 const uint32 image_resource_id = image_node_decl->image_resource_id;
264 mojo::gfx::composition::BlendPtr blend = image_node_decl->blend.Pass(); 263 mojo::gfx::composition::BlendPtr blend = image_node_decl->blend.Pass();
265 return new ImageNodeDef(node_id, std::move(content_transform), 264 return new ImageNode(node_id, std::move(content_transform),
266 content_clip.Pass(), hit_test_behavior.Pass(), 265 content_clip.Pass(), hit_test_behavior.Pass(),
267 combinator, child_node_ids, content_rect, 266 combinator, child_node_ids, content_rect,
268 image_rect.Pass(), image_resource_id, blend.Pass()); 267 image_rect.Pass(), image_resource_id, blend.Pass());
269 } 268 }
270 269
271 if (node_decl->op->is_scene()) { 270 if (node_decl->op->is_scene()) {
272 auto& scene_node_decl = node_decl->op->get_scene(); 271 auto& scene_node_decl = node_decl->op->get_scene();
273 272
274 const uint32_t scene_resource_id = scene_node_decl->scene_resource_id; 273 const uint32_t scene_resource_id = scene_node_decl->scene_resource_id;
275 const uint32_t scene_version = scene_node_decl->scene_version; 274 const uint32_t scene_version = scene_node_decl->scene_version;
276 return new SceneNodeDef(node_id, std::move(content_transform), 275 return new SceneNode(node_id, std::move(content_transform),
277 content_clip.Pass(), hit_test_behavior.Pass(), 276 content_clip.Pass(), hit_test_behavior.Pass(),
278 combinator, child_node_ids, scene_resource_id, 277 combinator, child_node_ids, scene_resource_id,
279 scene_version); 278 scene_version);
280 } 279 }
281 280
282 if (node_decl->op->is_layer()) { 281 if (node_decl->op->is_layer()) {
283 auto& layer_node_decl = node_decl->op->get_layer(); 282 auto& layer_node_decl = node_decl->op->get_layer();
284 DCHECK(layer_node_decl->layer_rect); 283 DCHECK(layer_node_decl->layer_rect);
285 284
286 const mojo::RectF& layer_rect = *layer_node_decl->layer_rect; 285 const mojo::RectF& layer_rect = *layer_node_decl->layer_rect;
287 mojo::gfx::composition::BlendPtr blend = layer_node_decl->blend.Pass(); 286 mojo::gfx::composition::BlendPtr blend = layer_node_decl->blend.Pass();
288 return new LayerNodeDef(node_id, std::move(content_transform), 287 return new LayerNode(node_id, std::move(content_transform),
289 content_clip.Pass(), hit_test_behavior.Pass(), 288 content_clip.Pass(), hit_test_behavior.Pass(),
290 combinator, child_node_ids, layer_rect, 289 combinator, child_node_ids, layer_rect, blend.Pass());
291 blend.Pass());
292 } 290 }
293 291
294 err << "Unsupported node op type: node_id=" << node_id 292 err << "Unsupported node op type: node_id=" << node_id
295 << ", node_op=" << node_decl->op; 293 << ", node_op=" << node_decl->op;
296 return nullptr; 294 return nullptr;
297 } 295 }
298 296
299 const NodeDef* SceneDef::FindNode(uint32_t node_id) const { 297 const Node* SceneDef::FindNode(uint32_t node_id) const {
300 auto it = nodes_.find(node_id); 298 auto it = nodes_.find(node_id);
301 return it != nodes_.end() ? it->second.get() : nullptr; 299 return it != nodes_.end() ? it->second.get() : nullptr;
302 } 300 }
303 301
304 const ResourceDef* SceneDef::FindResource(uint32_t resource_id) const { 302 const Resource* SceneDef::FindResource(uint32_t resource_id) const {
305 auto it = resources_.find(resource_id); 303 auto it = resources_.find(resource_id);
306 return it != resources_.end() ? it->second.get() : nullptr; 304 return it != resources_.end() ? it->second.get() : nullptr;
307 } 305 }
308 306
309 const SceneContent* SceneDef::FindContent(uint32_t version) const { 307 const SceneContent* SceneDef::FindContent(uint32_t version) const {
310 if (!content_) 308 if (!content_)
311 return nullptr; 309 return nullptr;
312 310
313 // TODO(jeffbrown): Consider briefly caching older versions to allow them 311 // TODO(jeffbrown): Consider briefly caching older versions to allow them
314 // to be used to provide alternate content for node combinators. 312 // to be used to provide alternate content for node combinators.
315 if (version != mojo::gfx::composition::kSceneVersionNone && 313 if (version != mojo::gfx::composition::kSceneVersionNone &&
316 version != content_->version() && 314 version != content_->version() &&
317 content_->version() != mojo::gfx::composition::kSceneVersionNone) 315 content_->version() != mojo::gfx::composition::kSceneVersionNone)
318 return nullptr; 316 return nullptr;
319 return content_.get(); 317 return content_.get();
320 } 318 }
321 319
322 SceneDef::Publication::Publication( 320 SceneDef::Publication::Publication(
323 mojo::gfx::composition::SceneMetadataPtr metadata) 321 mojo::gfx::composition::SceneMetadataPtr metadata)
324 : metadata(metadata.Pass()) { 322 : metadata(metadata.Pass()) {
325 DCHECK(this->metadata); 323 DCHECK(this->metadata);
326 } 324 }
327 325
328 SceneDef::Publication::~Publication() {} 326 SceneDef::Publication::~Publication() {}
329 327
330 } // namespace compositor 328 } // namespace compositor
OLDNEW
« no previous file with comments | « services/gfx/compositor/graph/scene_def.h ('k') | services/gfx/compositor/graph/snapshot.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698