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

Side by Side Diff: cc/trees/property_tree.cc

Issue 1811423002: SubtreeShouldBeSkipped uses information from property trees (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase 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 | « cc/trees/property_tree.h ('k') | cc/trees/property_tree_builder.cc » ('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 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 <stddef.h> 5 #include <stddef.h>
6 6
7 #include <set> 7 #include <set>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after
431 data.layers_are_clipped_when_surfaces_disabled(); 431 data.layers_are_clipped_when_surfaces_disabled();
432 resets_clip = data.resets_clip(); 432 resets_clip = data.resets_clip();
433 } 433 }
434 434
435 EffectNodeData::EffectNodeData() 435 EffectNodeData::EffectNodeData()
436 : opacity(1.f), 436 : opacity(1.f),
437 screen_space_opacity(1.f), 437 screen_space_opacity(1.f),
438 has_render_surface(false), 438 has_render_surface(false),
439 has_copy_request(false), 439 has_copy_request(false),
440 has_background_filters(false), 440 has_background_filters(false),
441 node_or_ancestor_has_background_filters(false),
442 to_screen_opacity_is_animated(false),
443 hidden_by_backface_visibility(false),
444 double_sided(false),
441 is_drawn(true), 445 is_drawn(true),
442 has_animated_opacity(false), 446 has_animated_opacity(false),
443 effect_changed(false), 447 effect_changed(false),
444 num_copy_requests_in_subtree(0), 448 num_copy_requests_in_subtree(0),
445 transform_id(0), 449 transform_id(0),
446 clip_id(0), 450 clip_id(0),
447 target_id(0) {} 451 target_id(0) {}
448 452
449 EffectNodeData::EffectNodeData(const EffectNodeData& other) = default; 453 EffectNodeData::EffectNodeData(const EffectNodeData& other) = default;
450 454
451 bool EffectNodeData::operator==(const EffectNodeData& other) const { 455 bool EffectNodeData::operator==(const EffectNodeData& other) const {
452 return opacity == other.opacity && 456 return opacity == other.opacity &&
453 screen_space_opacity == other.screen_space_opacity && 457 screen_space_opacity == other.screen_space_opacity &&
454 has_render_surface == other.has_render_surface && 458 has_render_surface == other.has_render_surface &&
455 has_copy_request == other.has_copy_request && 459 has_copy_request == other.has_copy_request &&
456 has_background_filters == other.has_background_filters && 460 has_background_filters == other.has_background_filters &&
457 is_drawn == other.is_drawn && 461 node_or_ancestor_has_background_filters ==
462 other.node_or_ancestor_has_background_filters &&
463 to_screen_opacity_is_animated == other.to_screen_opacity_is_animated &&
464 hidden_by_backface_visibility == other.hidden_by_backface_visibility &&
465 double_sided == other.double_sided && is_drawn == other.is_drawn &&
458 has_animated_opacity == other.has_animated_opacity && 466 has_animated_opacity == other.has_animated_opacity &&
459 effect_changed == other.effect_changed && 467 effect_changed == other.effect_changed &&
460 num_copy_requests_in_subtree == other.num_copy_requests_in_subtree && 468 num_copy_requests_in_subtree == other.num_copy_requests_in_subtree &&
461 transform_id == other.transform_id && clip_id == other.clip_id && 469 transform_id == other.transform_id && clip_id == other.clip_id &&
462 target_id == other.target_id; 470 target_id == other.target_id;
463 } 471 }
464 472
465 void EffectNodeData::ToProtobuf(proto::TreeNode* proto) const { 473 void EffectNodeData::ToProtobuf(proto::TreeNode* proto) const {
466 DCHECK(!proto->has_effect_node_data()); 474 DCHECK(!proto->has_effect_node_data());
467 proto::EffectNodeData* data = proto->mutable_effect_node_data(); 475 proto::EffectNodeData* data = proto->mutable_effect_node_data();
468 data->set_opacity(opacity); 476 data->set_opacity(opacity);
469 data->set_screen_space_opacity(screen_space_opacity); 477 data->set_screen_space_opacity(screen_space_opacity);
470 data->set_has_render_surface(has_render_surface); 478 data->set_has_render_surface(has_render_surface);
471 data->set_has_copy_request(has_copy_request); 479 data->set_has_copy_request(has_copy_request);
472 data->set_has_background_filters(has_background_filters); 480 data->set_has_background_filters(has_background_filters);
481 data->set_node_or_ancestor_has_background_filters(
482 node_or_ancestor_has_background_filters);
483 data->set_to_screen_opacity_is_animated(to_screen_opacity_is_animated);
484 data->set_hidden_by_backface_visibility(hidden_by_backface_visibility);
485 data->set_double_sided(double_sided);
473 data->set_is_drawn(is_drawn); 486 data->set_is_drawn(is_drawn);
474 data->set_has_animated_opacity(has_animated_opacity); 487 data->set_has_animated_opacity(has_animated_opacity);
475 data->set_effect_changed(effect_changed); 488 data->set_effect_changed(effect_changed);
476 data->set_num_copy_requests_in_subtree(num_copy_requests_in_subtree); 489 data->set_num_copy_requests_in_subtree(num_copy_requests_in_subtree);
477 data->set_transform_id(transform_id); 490 data->set_transform_id(transform_id);
478 data->set_clip_id(clip_id); 491 data->set_clip_id(clip_id);
479 data->set_target_id(target_id); 492 data->set_target_id(target_id);
480 } 493 }
481 494
482 void EffectNodeData::FromProtobuf(const proto::TreeNode& proto) { 495 void EffectNodeData::FromProtobuf(const proto::TreeNode& proto) {
483 DCHECK(proto.has_effect_node_data()); 496 DCHECK(proto.has_effect_node_data());
484 const proto::EffectNodeData& data = proto.effect_node_data(); 497 const proto::EffectNodeData& data = proto.effect_node_data();
485 498
486 opacity = data.opacity(); 499 opacity = data.opacity();
487 screen_space_opacity = data.screen_space_opacity(); 500 screen_space_opacity = data.screen_space_opacity();
488 has_render_surface = data.has_render_surface(); 501 has_render_surface = data.has_render_surface();
489 has_copy_request = data.has_copy_request(); 502 has_copy_request = data.has_copy_request();
490 has_background_filters = data.has_background_filters(); 503 has_background_filters = data.has_background_filters();
504 node_or_ancestor_has_background_filters =
505 data.node_or_ancestor_has_background_filters();
506 to_screen_opacity_is_animated = data.to_screen_opacity_is_animated();
507 hidden_by_backface_visibility = data.hidden_by_backface_visibility();
508 double_sided = data.double_sided();
491 is_drawn = data.is_drawn(); 509 is_drawn = data.is_drawn();
492 has_animated_opacity = data.has_animated_opacity(); 510 has_animated_opacity = data.has_animated_opacity();
493 effect_changed = data.effect_changed(); 511 effect_changed = data.effect_changed();
494 num_copy_requests_in_subtree = data.num_copy_requests_in_subtree(); 512 num_copy_requests_in_subtree = data.num_copy_requests_in_subtree();
495 transform_id = data.transform_id(); 513 transform_id = data.transform_id();
496 clip_id = data.clip_id(); 514 clip_id = data.clip_id();
497 target_id = data.target_id(); 515 target_id = data.target_id();
498 } 516 }
499 517
500 ScrollNodeData::ScrollNodeData() 518 ScrollNodeData::ScrollNodeData()
(...skipping 701 matching lines...) Expand 10 before | Expand all | Expand 10 after
1202 node->data.is_drawn = true; 1220 node->data.is_drawn = true;
1203 } 1221 }
1204 1222
1205 void EffectTree::UpdateEffectChanged(EffectNode* node, 1223 void EffectTree::UpdateEffectChanged(EffectNode* node,
1206 EffectNode* parent_node) { 1224 EffectNode* parent_node) {
1207 if (parent_node && parent_node->data.effect_changed) { 1225 if (parent_node && parent_node->data.effect_changed) {
1208 node->data.effect_changed = true; 1226 node->data.effect_changed = true;
1209 } 1227 }
1210 } 1228 }
1211 1229
1230 void EffectTree::UpdateBackfaceVisibility(EffectNode* node,
1231 EffectNode* parent_node) {
1232 if (!parent_node) {
1233 node->data.hidden_by_backface_visibility = false;
1234 return;
1235 }
1236 if (parent_node->data.hidden_by_backface_visibility) {
1237 node->data.hidden_by_backface_visibility = true;
1238 return;
1239 }
1240
1241 TransformTree& transform_tree = property_trees()->transform_tree;
1242 if (node->data.has_render_surface && !node->data.double_sided) {
1243 TransformNode* transform_node =
1244 transform_tree.Node(node->data.transform_id);
1245 if (transform_node->data.is_invertible &&
1246 transform_node->data.ancestors_are_invertible) {
1247 if (transform_node->data.sorting_context_id) {
1248 const TransformNode* parent_transform_node =
1249 transform_tree.parent(transform_node);
1250 if (parent_transform_node &&
1251 parent_transform_node->data.sorting_context_id ==
1252 transform_node->data.sorting_context_id) {
1253 gfx::Transform surface_draw_transform;
1254 transform_tree.ComputeTransform(transform_node->id,
1255 transform_node->data.target_id,
1256 &surface_draw_transform);
1257 node->data.hidden_by_backface_visibility =
1258 surface_draw_transform.IsBackFaceVisible();
1259 } else {
1260 node->data.hidden_by_backface_visibility =
1261 transform_node->data.local.IsBackFaceVisible();
1262 }
1263 return;
1264 }
1265 }
1266 }
1267 node->data.hidden_by_backface_visibility = false;
1268 }
1269
1212 void EffectTree::UpdateEffects(int id) { 1270 void EffectTree::UpdateEffects(int id) {
1213 EffectNode* node = Node(id); 1271 EffectNode* node = Node(id);
1214 EffectNode* parent_node = parent(node); 1272 EffectNode* parent_node = parent(node);
1215 1273
1216 UpdateOpacities(node, parent_node); 1274 UpdateOpacities(node, parent_node);
1217 UpdateIsDrawn(node, parent_node); 1275 UpdateIsDrawn(node, parent_node);
1218 UpdateEffectChanged(node, parent_node); 1276 UpdateEffectChanged(node, parent_node);
1277 UpdateBackfaceVisibility(node, parent_node);
1219 } 1278 }
1220 1279
1221 void EffectTree::ClearCopyRequests() { 1280 void EffectTree::ClearCopyRequests() {
1222 for (auto& node : nodes()) { 1281 for (auto& node : nodes()) {
1223 node.data.num_copy_requests_in_subtree = 0; 1282 node.data.num_copy_requests_in_subtree = 0;
1224 node.data.has_copy_request = false; 1283 node.data.has_copy_request = false;
1225 } 1284 }
1226 set_needs_update(true); 1285 set_needs_update(true);
1227 } 1286 }
1228 1287
(...skipping 629 matching lines...) Expand 10 before | Expand all | Expand 10 after
1858 break; 1917 break;
1859 case ALL_TREES: 1918 case ALL_TREES:
1860 transform_tree.ResetChangeTracking(); 1919 transform_tree.ResetChangeTracking();
1861 effect_tree.ResetChangeTracking(); 1920 effect_tree.ResetChangeTracking();
1862 } 1921 }
1863 changed = false; 1922 changed = false;
1864 full_tree_damaged = false; 1923 full_tree_damaged = false;
1865 } 1924 }
1866 1925
1867 } // namespace cc 1926 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/property_tree.h ('k') | cc/trees/property_tree_builder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698