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

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

Issue 1752993002: cc : Delete LayerImpl::NoteLayerPropertyChangedForSubtree (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 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') | no next file » | 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 417 matching lines...) Expand 10 before | Expand all | Expand 10 after
428 } 428 }
429 429
430 EffectNodeData::EffectNodeData() 430 EffectNodeData::EffectNodeData()
431 : opacity(1.f), 431 : opacity(1.f),
432 screen_space_opacity(1.f), 432 screen_space_opacity(1.f),
433 has_render_surface(false), 433 has_render_surface(false),
434 has_copy_request(false), 434 has_copy_request(false),
435 has_background_filters(false), 435 has_background_filters(false),
436 is_drawn(true), 436 is_drawn(true),
437 has_animated_opacity(false), 437 has_animated_opacity(false),
438 opacity_changed(false), 438 effect_changed(false),
439 num_copy_requests_in_subtree(0), 439 num_copy_requests_in_subtree(0),
440 transform_id(0), 440 transform_id(0),
441 clip_id(0) {} 441 clip_id(0) {}
442 442
443 EffectNodeData::EffectNodeData(const EffectNodeData& other) = default; 443 EffectNodeData::EffectNodeData(const EffectNodeData& other) = default;
444 444
445 bool EffectNodeData::operator==(const EffectNodeData& other) const { 445 bool EffectNodeData::operator==(const EffectNodeData& other) const {
446 return opacity == other.opacity && 446 return opacity == other.opacity &&
447 screen_space_opacity == other.screen_space_opacity && 447 screen_space_opacity == other.screen_space_opacity &&
448 has_render_surface == other.has_render_surface && 448 has_render_surface == other.has_render_surface &&
449 has_copy_request == other.has_copy_request && 449 has_copy_request == other.has_copy_request &&
450 has_background_filters == other.has_background_filters && 450 has_background_filters == other.has_background_filters &&
451 is_drawn == other.is_drawn && 451 is_drawn == other.is_drawn &&
452 has_animated_opacity == other.has_animated_opacity && 452 has_animated_opacity == other.has_animated_opacity &&
453 opacity_changed == other.opacity_changed && 453 effect_changed == other.effect_changed &&
454 num_copy_requests_in_subtree == other.num_copy_requests_in_subtree && 454 num_copy_requests_in_subtree == other.num_copy_requests_in_subtree &&
455 transform_id == other.transform_id && clip_id == other.clip_id; 455 transform_id == other.transform_id && clip_id == other.clip_id;
456 } 456 }
457 457
458 void EffectNodeData::ToProtobuf(proto::TreeNode* proto) const { 458 void EffectNodeData::ToProtobuf(proto::TreeNode* proto) const {
459 DCHECK(!proto->has_effect_node_data()); 459 DCHECK(!proto->has_effect_node_data());
460 proto::EffectNodeData* data = proto->mutable_effect_node_data(); 460 proto::EffectNodeData* data = proto->mutable_effect_node_data();
461 data->set_opacity(opacity); 461 data->set_opacity(opacity);
462 data->set_screen_space_opacity(screen_space_opacity); 462 data->set_screen_space_opacity(screen_space_opacity);
463 data->set_has_render_surface(has_render_surface); 463 data->set_has_render_surface(has_render_surface);
464 data->set_has_copy_request(has_copy_request); 464 data->set_has_copy_request(has_copy_request);
465 data->set_has_background_filters(has_background_filters); 465 data->set_has_background_filters(has_background_filters);
466 data->set_is_drawn(is_drawn); 466 data->set_is_drawn(is_drawn);
467 data->set_has_animated_opacity(has_animated_opacity); 467 data->set_has_animated_opacity(has_animated_opacity);
468 data->set_opacity_changed(opacity_changed); 468 data->set_effect_changed(effect_changed);
469 data->set_num_copy_requests_in_subtree(num_copy_requests_in_subtree); 469 data->set_num_copy_requests_in_subtree(num_copy_requests_in_subtree);
470 data->set_transform_id(transform_id); 470 data->set_transform_id(transform_id);
471 data->set_clip_id(clip_id); 471 data->set_clip_id(clip_id);
472 } 472 }
473 473
474 void EffectNodeData::FromProtobuf(const proto::TreeNode& proto) { 474 void EffectNodeData::FromProtobuf(const proto::TreeNode& proto) {
475 DCHECK(proto.has_effect_node_data()); 475 DCHECK(proto.has_effect_node_data());
476 const proto::EffectNodeData& data = proto.effect_node_data(); 476 const proto::EffectNodeData& data = proto.effect_node_data();
477 477
478 opacity = data.opacity(); 478 opacity = data.opacity();
479 screen_space_opacity = data.screen_space_opacity(); 479 screen_space_opacity = data.screen_space_opacity();
480 has_render_surface = data.has_render_surface(); 480 has_render_surface = data.has_render_surface();
481 has_copy_request = data.has_copy_request(); 481 has_copy_request = data.has_copy_request();
482 has_background_filters = data.has_background_filters(); 482 has_background_filters = data.has_background_filters();
483 is_drawn = data.is_drawn(); 483 is_drawn = data.is_drawn();
484 has_animated_opacity = data.has_animated_opacity(); 484 has_animated_opacity = data.has_animated_opacity();
485 opacity_changed = data.opacity_changed(); 485 effect_changed = data.effect_changed();
486 num_copy_requests_in_subtree = data.num_copy_requests_in_subtree(); 486 num_copy_requests_in_subtree = data.num_copy_requests_in_subtree();
487 transform_id = data.transform_id(); 487 transform_id = data.transform_id();
488 clip_id = data.clip_id(); 488 clip_id = data.clip_id();
489 } 489 }
490 490
491 ScrollNodeData::ScrollNodeData() 491 ScrollNodeData::ScrollNodeData()
492 : scrollable(false), 492 : scrollable(false),
493 main_thread_scrolling_reasons( 493 main_thread_scrolling_reasons(
494 MainThreadScrollingReason::kNotScrollingOnMain), 494 MainThreadScrollingReason::kNotScrollingOnMain),
495 contains_non_fast_scrollable_region(false), 495 contains_non_fast_scrollable_region(false),
(...skipping 675 matching lines...) Expand 10 before | Expand all | Expand 10 after
1171 if (node->data.has_copy_request || node->data.has_background_filters) 1171 if (node->data.has_copy_request || node->data.has_background_filters)
1172 node->data.is_drawn = true; 1172 node->data.is_drawn = true;
1173 else if (node->data.opacity == 0.f && !node->data.has_animated_opacity) 1173 else if (node->data.opacity == 0.f && !node->data.has_animated_opacity)
1174 node->data.is_drawn = false; 1174 node->data.is_drawn = false;
1175 else if (parent_node) 1175 else if (parent_node)
1176 node->data.is_drawn = parent_node->data.is_drawn; 1176 node->data.is_drawn = parent_node->data.is_drawn;
1177 else 1177 else
1178 node->data.is_drawn = true; 1178 node->data.is_drawn = true;
1179 } 1179 }
1180 1180
1181 void EffectTree::UpdateOpacityChanged(EffectNode* node, 1181 void EffectTree::UpdateEffectChanged(EffectNode* node,
1182 EffectNode* parent_node) { 1182 EffectNode* parent_node) {
1183 if (parent_node && parent_node->data.opacity_changed) { 1183 if (parent_node && parent_node->data.effect_changed) {
1184 node->data.opacity_changed = true; 1184 node->data.effect_changed = true;
1185 } 1185 }
1186 } 1186 }
1187 1187
1188 void EffectTree::UpdateEffects(int id) { 1188 void EffectTree::UpdateEffects(int id) {
1189 EffectNode* node = Node(id); 1189 EffectNode* node = Node(id);
1190 EffectNode* parent_node = parent(node); 1190 EffectNode* parent_node = parent(node);
1191 1191
1192 UpdateOpacities(node, parent_node); 1192 UpdateOpacities(node, parent_node);
1193 UpdateIsDrawn(node, parent_node); 1193 UpdateIsDrawn(node, parent_node);
1194 UpdateOpacityChanged(node, parent_node); 1194 UpdateEffectChanged(node, parent_node);
1195 } 1195 }
1196 1196
1197 void EffectTree::ClearCopyRequests() { 1197 void EffectTree::ClearCopyRequests() {
1198 for (auto& node : nodes()) { 1198 for (auto& node : nodes()) {
1199 node.data.num_copy_requests_in_subtree = 0; 1199 node.data.num_copy_requests_in_subtree = 0;
1200 node.data.has_copy_request = false; 1200 node.data.has_copy_request = false;
1201 } 1201 }
1202 set_needs_update(true); 1202 set_needs_update(true);
1203 } 1203 }
1204 1204
1205 bool EffectTree::ContributesToDrawnSurface(int id) { 1205 bool EffectTree::ContributesToDrawnSurface(int id) {
1206 // All drawn nodes contribute to drawn surface. 1206 // All drawn nodes contribute to drawn surface.
1207 // Exception : Nodes that are hidden and are drawn only for the sake of 1207 // Exception : Nodes that are hidden and are drawn only for the sake of
1208 // copy requests. 1208 // copy requests.
1209 EffectNode* node = Node(id); 1209 EffectNode* node = Node(id);
1210 EffectNode* parent_node = parent(node); 1210 EffectNode* parent_node = parent(node);
1211 bool contributes_to_drawn_surface = 1211 bool contributes_to_drawn_surface =
1212 node->data.is_drawn && 1212 node->data.is_drawn &&
1213 (node->data.opacity != 0.f || node->data.has_animated_opacity || 1213 (node->data.opacity != 0.f || node->data.has_animated_opacity ||
1214 node->data.has_background_filters); 1214 node->data.has_background_filters);
1215 if (parent_node && !parent_node->data.is_drawn) 1215 if (parent_node && !parent_node->data.is_drawn)
1216 contributes_to_drawn_surface = false; 1216 contributes_to_drawn_surface = false;
1217 return contributes_to_drawn_surface; 1217 return contributes_to_drawn_surface;
1218 } 1218 }
1219 1219
1220 void EffectTree::ResetChangeTracking() { 1220 void EffectTree::ResetChangeTracking() {
1221 for (int id = 1; id < static_cast<int>(size()); ++id) { 1221 for (int id = 1; id < static_cast<int>(size()); ++id) {
1222 EffectNode* node = Node(id); 1222 EffectNode* node = Node(id);
1223 node->data.opacity_changed = false; 1223 node->data.effect_changed = false;
1224 } 1224 }
1225 } 1225 }
1226 1226
1227 void TransformTree::UpdateNodeAndAncestorsHaveIntegerTranslations( 1227 void TransformTree::UpdateNodeAndAncestorsHaveIntegerTranslations(
1228 TransformNode* node, 1228 TransformNode* node,
1229 TransformNode* parent_node) { 1229 TransformNode* parent_node) {
1230 node->data.node_and_ancestors_have_only_integer_translation = 1230 node->data.node_and_ancestors_have_only_integer_translation =
1231 node->data.to_parent.IsIdentityOrIntegerTranslation(); 1231 node->data.to_parent.IsIdentityOrIntegerTranslation();
1232 if (parent_node) 1232 if (parent_node)
1233 node->data.node_and_ancestors_have_only_integer_translation = 1233 node->data.node_and_ancestors_have_only_integer_translation =
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
1396 screen_space_transform.ConcatTransform(transform_node->data.to_screen); 1396 screen_space_transform.ConcatTransform(transform_node->data.to_screen);
1397 if (scroll_node->data.should_flatten) 1397 if (scroll_node->data.should_flatten)
1398 screen_space_transform.FlattenTo2d(); 1398 screen_space_transform.FlattenTo2d();
1399 return screen_space_transform; 1399 return screen_space_transform;
1400 } 1400 }
1401 1401
1402 PropertyTrees::PropertyTrees() 1402 PropertyTrees::PropertyTrees()
1403 : needs_rebuild(true), 1403 : needs_rebuild(true),
1404 non_root_surfaces_enabled(true), 1404 non_root_surfaces_enabled(true),
1405 changed(false), 1405 changed(false),
1406 full_tree_damaged(false),
1406 sequence_number(0) { 1407 sequence_number(0) {
1407 transform_tree.SetPropertyTrees(this); 1408 transform_tree.SetPropertyTrees(this);
1408 effect_tree.SetPropertyTrees(this); 1409 effect_tree.SetPropertyTrees(this);
1409 clip_tree.SetPropertyTrees(this); 1410 clip_tree.SetPropertyTrees(this);
1410 scroll_tree.SetPropertyTrees(this); 1411 scroll_tree.SetPropertyTrees(this);
1411 } 1412 }
1412 1413
1413 PropertyTrees::~PropertyTrees() {} 1414 PropertyTrees::~PropertyTrees() {}
1414 1415
1415 bool PropertyTrees::operator==(const PropertyTrees& other) const { 1416 bool PropertyTrees::operator==(const PropertyTrees& other) const {
1416 return transform_tree == other.transform_tree && 1417 return transform_tree == other.transform_tree &&
1417 effect_tree == other.effect_tree && clip_tree == other.clip_tree && 1418 effect_tree == other.effect_tree && clip_tree == other.clip_tree &&
1418 scroll_tree == other.scroll_tree && 1419 scroll_tree == other.scroll_tree &&
1419 needs_rebuild == other.needs_rebuild && changed == other.changed && 1420 needs_rebuild == other.needs_rebuild && changed == other.changed &&
1421 full_tree_damaged == other.full_tree_damaged &&
1420 non_root_surfaces_enabled == other.non_root_surfaces_enabled && 1422 non_root_surfaces_enabled == other.non_root_surfaces_enabled &&
1421 sequence_number == other.sequence_number; 1423 sequence_number == other.sequence_number;
1422 } 1424 }
1423 1425
1424 PropertyTrees& PropertyTrees::operator=(const PropertyTrees& from) { 1426 PropertyTrees& PropertyTrees::operator=(const PropertyTrees& from) {
1425 transform_tree = from.transform_tree; 1427 transform_tree = from.transform_tree;
1426 effect_tree = from.effect_tree; 1428 effect_tree = from.effect_tree;
1427 clip_tree = from.clip_tree; 1429 clip_tree = from.clip_tree;
1428 scroll_tree = from.scroll_tree; 1430 scroll_tree = from.scroll_tree;
1429 needs_rebuild = from.needs_rebuild; 1431 needs_rebuild = from.needs_rebuild;
1430 changed = from.changed; 1432 changed = from.changed;
1433 full_tree_damaged = from.full_tree_damaged;
1431 non_root_surfaces_enabled = from.non_root_surfaces_enabled; 1434 non_root_surfaces_enabled = from.non_root_surfaces_enabled;
1432 sequence_number = from.sequence_number; 1435 sequence_number = from.sequence_number;
1433 inner_viewport_container_bounds_delta_ = 1436 inner_viewport_container_bounds_delta_ =
1434 from.inner_viewport_container_bounds_delta(); 1437 from.inner_viewport_container_bounds_delta();
1435 outer_viewport_container_bounds_delta_ = 1438 outer_viewport_container_bounds_delta_ =
1436 from.outer_viewport_container_bounds_delta(); 1439 from.outer_viewport_container_bounds_delta();
1437 inner_viewport_scroll_bounds_delta_ = 1440 inner_viewport_scroll_bounds_delta_ =
1438 from.inner_viewport_scroll_bounds_delta(); 1441 from.inner_viewport_scroll_bounds_delta();
1439 transform_tree.SetPropertyTrees(this); 1442 transform_tree.SetPropertyTrees(this);
1440 effect_tree.SetPropertyTrees(this); 1443 effect_tree.SetPropertyTrees(this);
1441 clip_tree.SetPropertyTrees(this); 1444 clip_tree.SetPropertyTrees(this);
1442 scroll_tree.SetPropertyTrees(this); 1445 scroll_tree.SetPropertyTrees(this);
1443 return *this; 1446 return *this;
1444 } 1447 }
1445 1448
1446 void PropertyTrees::ToProtobuf(proto::PropertyTrees* proto) const { 1449 void PropertyTrees::ToProtobuf(proto::PropertyTrees* proto) const {
1447 // TODO(khushalsagar): Add support for sending diffs when serializaing 1450 // TODO(khushalsagar): Add support for sending diffs when serializaing
1448 // property trees. See crbug/555370. 1451 // property trees. See crbug/555370.
1449 transform_tree.ToProtobuf(proto->mutable_transform_tree()); 1452 transform_tree.ToProtobuf(proto->mutable_transform_tree());
1450 effect_tree.ToProtobuf(proto->mutable_effect_tree()); 1453 effect_tree.ToProtobuf(proto->mutable_effect_tree());
1451 clip_tree.ToProtobuf(proto->mutable_clip_tree()); 1454 clip_tree.ToProtobuf(proto->mutable_clip_tree());
1452 scroll_tree.ToProtobuf(proto->mutable_scroll_tree()); 1455 scroll_tree.ToProtobuf(proto->mutable_scroll_tree());
1453 proto->set_needs_rebuild(needs_rebuild); 1456 proto->set_needs_rebuild(needs_rebuild);
1454 proto->set_changed(changed); 1457 proto->set_changed(changed);
1458 proto->set_full_tree_damaged(full_tree_damaged);
1455 proto->set_non_root_surfaces_enabled(non_root_surfaces_enabled); 1459 proto->set_non_root_surfaces_enabled(non_root_surfaces_enabled);
1456 1460
1457 // TODO(khushalsagar): Consider using the sequence number to decide if 1461 // TODO(khushalsagar): Consider using the sequence number to decide if
1458 // property trees need to be serialized again for a commit. See crbug/555370. 1462 // property trees need to be serialized again for a commit. See crbug/555370.
1459 proto->set_sequence_number(sequence_number); 1463 proto->set_sequence_number(sequence_number);
1460 } 1464 }
1461 1465
1462 // static 1466 // static
1463 void PropertyTrees::FromProtobuf(const proto::PropertyTrees& proto) { 1467 void PropertyTrees::FromProtobuf(const proto::PropertyTrees& proto) {
1464 transform_tree.FromProtobuf(proto.transform_tree()); 1468 transform_tree.FromProtobuf(proto.transform_tree());
1465 effect_tree.FromProtobuf(proto.effect_tree()); 1469 effect_tree.FromProtobuf(proto.effect_tree());
1466 clip_tree.FromProtobuf(proto.clip_tree()); 1470 clip_tree.FromProtobuf(proto.clip_tree());
1467 scroll_tree.FromProtobuf(proto.scroll_tree()); 1471 scroll_tree.FromProtobuf(proto.scroll_tree());
1468 1472
1469 needs_rebuild = proto.needs_rebuild(); 1473 needs_rebuild = proto.needs_rebuild();
1470 changed = proto.changed(); 1474 changed = proto.changed();
1475 full_tree_damaged = proto.full_tree_damaged();
1471 non_root_surfaces_enabled = proto.non_root_surfaces_enabled(); 1476 non_root_surfaces_enabled = proto.non_root_surfaces_enabled();
1472 sequence_number = proto.sequence_number(); 1477 sequence_number = proto.sequence_number();
1473 1478
1474 transform_tree.SetPropertyTrees(this); 1479 transform_tree.SetPropertyTrees(this);
1475 effect_tree.SetPropertyTrees(this); 1480 effect_tree.SetPropertyTrees(this);
1476 clip_tree.SetPropertyTrees(this); 1481 clip_tree.SetPropertyTrees(this);
1477 scroll_tree.SetPropertyTrees(this); 1482 scroll_tree.SetPropertyTrees(this);
1478 } 1483 }
1479 1484
1480 void PropertyTrees::SetInnerViewportContainerBoundsDelta( 1485 void PropertyTrees::SetInnerViewportContainerBoundsDelta(
(...skipping 15 matching lines...) Expand all
1496 } 1501 }
1497 1502
1498 void PropertyTrees::SetInnerViewportScrollBoundsDelta( 1503 void PropertyTrees::SetInnerViewportScrollBoundsDelta(
1499 gfx::Vector2dF bounds_delta) { 1504 gfx::Vector2dF bounds_delta) {
1500 inner_viewport_scroll_bounds_delta_ = bounds_delta; 1505 inner_viewport_scroll_bounds_delta_ = bounds_delta;
1501 } 1506 }
1502 1507
1503 void PropertyTrees::PushChangeTrackingTo(PropertyTrees* tree) { 1508 void PropertyTrees::PushChangeTrackingTo(PropertyTrees* tree) {
1504 for (int id = 1; id < static_cast<int>(effect_tree.size()); ++id) { 1509 for (int id = 1; id < static_cast<int>(effect_tree.size()); ++id) {
1505 EffectNode* node = effect_tree.Node(id); 1510 EffectNode* node = effect_tree.Node(id);
1506 if (node->data.opacity_changed) { 1511 if (node->data.effect_changed) {
1507 EffectNode* target_node = tree->effect_tree.Node(node->id); 1512 EffectNode* target_node = tree->effect_tree.Node(node->id);
1508 target_node->data.opacity_changed = true; 1513 target_node->data.effect_changed = true;
1509 } 1514 }
1510 } 1515 }
1511 for (int id = 1; id < static_cast<int>(transform_tree.size()); ++id) { 1516 for (int id = 1; id < static_cast<int>(transform_tree.size()); ++id) {
1512 TransformNode* node = transform_tree.Node(id); 1517 TransformNode* node = transform_tree.Node(id);
1513 if (node->data.transform_changed) { 1518 if (node->data.transform_changed) {
1514 TransformNode* target_node = tree->transform_tree.Node(node->id); 1519 TransformNode* target_node = tree->transform_tree.Node(node->id);
1515 target_node->data.transform_changed = true; 1520 target_node->data.transform_changed = true;
1516 } 1521 }
1517 } 1522 }
1523 tree->full_tree_damaged = full_tree_damaged;
1524 }
1525
1526 void PropertyTrees::ResetAllChangeTracking(ResetFlags flag) {
1527 switch (flag) {
1528 case EFFECT_TREE:
1529 effect_tree.ResetChangeTracking();
1530 break;
1531 case TRANSFORM_TREE:
1532 transform_tree.ResetChangeTracking();
1533 break;
1534 case ALL_TREES:
1535 transform_tree.ResetChangeTracking();
1536 effect_tree.ResetChangeTracking();
1537 }
1538 changed = false;
1539 full_tree_damaged = false;
1518 } 1540 }
1519 1541
1520 } // namespace cc 1542 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/property_tree.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698