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

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

Issue 1621013002: Revert of Compute if a layer is drawn without LayerTree hierarchy (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 11 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 397 matching lines...) Expand 10 before | Expand all | Expand 10 after
408 layers_are_clipped = data.layers_are_clipped(); 408 layers_are_clipped = data.layers_are_clipped();
409 layers_are_clipped_when_surfaces_disabled = 409 layers_are_clipped_when_surfaces_disabled =
410 data.layers_are_clipped_when_surfaces_disabled(); 410 data.layers_are_clipped_when_surfaces_disabled();
411 resets_clip = data.resets_clip(); 411 resets_clip = data.resets_clip();
412 } 412 }
413 413
414 EffectNodeData::EffectNodeData() 414 EffectNodeData::EffectNodeData()
415 : opacity(1.f), 415 : opacity(1.f),
416 screen_space_opacity(1.f), 416 screen_space_opacity(1.f),
417 has_render_surface(false), 417 has_render_surface(false),
418 has_copy_request(false),
419 has_background_filters(false),
420 is_drawn(true),
421 screen_space_opacity_is_animating(false),
422 num_copy_requests_in_subtree(0), 418 num_copy_requests_in_subtree(0),
423 transform_id(0), 419 transform_id(0),
424 clip_id(0) {} 420 clip_id(0) {}
425 421
426 bool EffectNodeData::operator==(const EffectNodeData& other) const { 422 bool EffectNodeData::operator==(const EffectNodeData& other) const {
427 return opacity == other.opacity && 423 return opacity == other.opacity &&
428 screen_space_opacity == other.screen_space_opacity && 424 screen_space_opacity == other.screen_space_opacity &&
429 has_render_surface == other.has_render_surface && 425 has_render_surface == other.has_render_surface &&
430 has_copy_request == other.has_copy_request &&
431 has_background_filters == other.has_background_filters &&
432 is_drawn == other.is_drawn &&
433 screen_space_opacity_is_animating ==
434 other.screen_space_opacity_is_animating &&
435 num_copy_requests_in_subtree == other.num_copy_requests_in_subtree && 426 num_copy_requests_in_subtree == other.num_copy_requests_in_subtree &&
436 transform_id == other.transform_id && clip_id == other.clip_id; 427 transform_id == other.transform_id && clip_id == other.clip_id;
437 } 428 }
438 429
439 void EffectNodeData::ToProtobuf(proto::TreeNode* proto) const { 430 void EffectNodeData::ToProtobuf(proto::TreeNode* proto) const {
440 DCHECK(!proto->has_effect_node_data()); 431 DCHECK(!proto->has_effect_node_data());
441 proto::EffectNodeData* data = proto->mutable_effect_node_data(); 432 proto::EffectNodeData* data = proto->mutable_effect_node_data();
442 data->set_opacity(opacity); 433 data->set_opacity(opacity);
443 data->set_screen_space_opacity(screen_space_opacity); 434 data->set_screen_space_opacity(screen_space_opacity);
444 data->set_has_render_surface(has_render_surface); 435 data->set_has_render_surface(has_render_surface);
445 data->set_has_copy_request(has_copy_request);
446 data->set_has_background_filters(has_background_filters);
447 data->set_is_drawn(is_drawn);
448 data->set_screen_space_opacity_is_animating(
449 screen_space_opacity_is_animating);
450 data->set_num_copy_requests_in_subtree(num_copy_requests_in_subtree); 436 data->set_num_copy_requests_in_subtree(num_copy_requests_in_subtree);
451 data->set_transform_id(transform_id); 437 data->set_transform_id(transform_id);
452 data->set_clip_id(clip_id); 438 data->set_clip_id(clip_id);
453 } 439 }
454 440
455 void EffectNodeData::FromProtobuf(const proto::TreeNode& proto) { 441 void EffectNodeData::FromProtobuf(const proto::TreeNode& proto) {
456 DCHECK(proto.has_effect_node_data()); 442 DCHECK(proto.has_effect_node_data());
457 const proto::EffectNodeData& data = proto.effect_node_data(); 443 const proto::EffectNodeData& data = proto.effect_node_data();
458 444
459 opacity = data.opacity(); 445 opacity = data.opacity();
460 screen_space_opacity = data.screen_space_opacity(); 446 screen_space_opacity = data.screen_space_opacity();
461 has_render_surface = data.has_render_surface(); 447 has_render_surface = data.has_render_surface();
462 has_copy_request = data.has_copy_request();
463 has_background_filters = data.has_background_filters();
464 is_drawn = data.is_drawn();
465 screen_space_opacity_is_animating = data.screen_space_opacity_is_animating();
466 num_copy_requests_in_subtree = data.num_copy_requests_in_subtree(); 448 num_copy_requests_in_subtree = data.num_copy_requests_in_subtree();
467 transform_id = data.transform_id(); 449 transform_id = data.transform_id();
468 clip_id = data.clip_id(); 450 clip_id = data.clip_id();
469 } 451 }
470 452
471 ScrollNodeData::ScrollNodeData() 453 ScrollNodeData::ScrollNodeData()
472 : scrollable(false), 454 : scrollable(false),
473 should_scroll_on_main_thread(false), 455 should_scroll_on_main_thread(false),
474 scroll_blocks_on(ScrollBlocksOn::SCROLL_BLOCKS_ON_NONE), 456 scroll_blocks_on(ScrollBlocksOn::SCROLL_BLOCKS_ON_NONE),
475 contains_non_fast_scrollable_region(false), 457 contains_non_fast_scrollable_region(false),
(...skipping 610 matching lines...) Expand 10 before | Expand all | Expand 10 after
1086 } 1068 }
1087 } 1069 }
1088 1070
1089 void EffectTree::UpdateOpacities(EffectNode* node, EffectNode* parent_node) { 1071 void EffectTree::UpdateOpacities(EffectNode* node, EffectNode* parent_node) {
1090 node->data.screen_space_opacity = node->data.opacity; 1072 node->data.screen_space_opacity = node->data.opacity;
1091 1073
1092 if (parent_node) 1074 if (parent_node)
1093 node->data.screen_space_opacity *= parent_node->data.screen_space_opacity; 1075 node->data.screen_space_opacity *= parent_node->data.screen_space_opacity;
1094 } 1076 }
1095 1077
1096 void EffectTree::UpdateIsDrawn(EffectNode* node, EffectNode* parent_node) {
1097 // Nodes that have screen space opacity 0 are hidden. So they are not drawn.
1098 // Exceptions:
1099 // 1) Nodes that contribute to copy requests, whether hidden or not, must be
1100 // drawn.
1101 // 2) Nodes that have a background filter.
1102 // 3) Nodes with animating screen space opacity.
1103 if (node->data.has_copy_request ||
1104 node->data.screen_space_opacity_is_animating ||
1105 node->data.has_background_filters)
1106 node->data.is_drawn = true;
1107 else if (node->data.opacity == 0.f)
1108 node->data.is_drawn = false;
1109 else if (parent_node)
1110 node->data.is_drawn = parent_node->data.is_drawn;
1111 else
1112 node->data.is_drawn = true;
1113 }
1114
1115 void EffectTree::UpdateEffects(int id) { 1078 void EffectTree::UpdateEffects(int id) {
1116 EffectNode* node = Node(id); 1079 EffectNode* node = Node(id);
1117 EffectNode* parent_node = parent(node); 1080 EffectNode* parent_node = parent(node);
1118 1081
1119 UpdateOpacities(node, parent_node); 1082 UpdateOpacities(node, parent_node);
1120 UpdateIsDrawn(node, parent_node);
1121 } 1083 }
1122 1084
1123 void EffectTree::ClearCopyRequests() { 1085 void EffectTree::ClearCopyRequests() {
1124 for (auto& node : nodes()) { 1086 for (auto& node : nodes())
1125 node.data.num_copy_requests_in_subtree = 0; 1087 node.data.num_copy_requests_in_subtree = 0;
1126 node.data.has_copy_request = false;
1127 }
1128 set_needs_update(true);
1129 }
1130
1131 bool EffectTree::ContributesToDrawnSurface(int id) {
1132 // All drawn nodes contribute to drawn surface.
1133 // Exception : Nodes that are hidden and are drawn only for the sake of
1134 // copy requests.
1135 EffectNode* node = Node(id);
1136 EffectNode* parent_node = parent(node);
1137 bool contributes_to_drawn_surface =
1138 node->data.is_drawn &&
1139 (node->data.opacity != 0.f || node->data.has_background_filters);
1140 if (parent_node && !parent_node->data.is_drawn)
1141 contributes_to_drawn_surface = false;
1142 return contributes_to_drawn_surface;
1143 } 1088 }
1144 1089
1145 void TransformTree::UpdateNodeAndAncestorsHaveIntegerTranslations( 1090 void TransformTree::UpdateNodeAndAncestorsHaveIntegerTranslations(
1146 TransformNode* node, 1091 TransformNode* node,
1147 TransformNode* parent_node) { 1092 TransformNode* parent_node) {
1148 node->data.node_and_ancestors_have_only_integer_translation = 1093 node->data.node_and_ancestors_have_only_integer_translation =
1149 node->data.to_parent.IsIdentityOrIntegerTranslation(); 1094 node->data.to_parent.IsIdentityOrIntegerTranslation();
1150 if (parent_node) 1095 if (parent_node)
1151 node->data.node_and_ancestors_have_only_integer_translation = 1096 node->data.node_and_ancestors_have_only_integer_translation =
1152 node->data.node_and_ancestors_have_only_integer_translation && 1097 node->data.node_and_ancestors_have_only_integer_translation &&
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
1260 effect_tree.FromProtobuf(proto.effect_tree()); 1205 effect_tree.FromProtobuf(proto.effect_tree());
1261 clip_tree.FromProtobuf(proto.clip_tree()); 1206 clip_tree.FromProtobuf(proto.clip_tree());
1262 scroll_tree.FromProtobuf(proto.scroll_tree()); 1207 scroll_tree.FromProtobuf(proto.scroll_tree());
1263 1208
1264 needs_rebuild = proto.needs_rebuild(); 1209 needs_rebuild = proto.needs_rebuild();
1265 non_root_surfaces_enabled = proto.non_root_surfaces_enabled(); 1210 non_root_surfaces_enabled = proto.non_root_surfaces_enabled();
1266 sequence_number = proto.sequence_number(); 1211 sequence_number = proto.sequence_number();
1267 } 1212 }
1268 1213
1269 } // namespace cc 1214 } // 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