| OLD | NEW |
| 1 // Copyright 2010 The Chromium Authors. All rights reserved. | 1 // Copyright 2010 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 "cc/layers/layer.h" | 5 #include "cc/layers/layer.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/atomic_sequence_num.h" | 9 #include "base/atomic_sequence_num.h" |
| 10 #include "base/location.h" | 10 #include "base/location.h" |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 149 children_[i]->SetLayerTreeHost(host); | 149 children_[i]->SetLayerTreeHost(host); |
| 150 | 150 |
| 151 if (mask_layer_.get()) | 151 if (mask_layer_.get()) |
| 152 mask_layer_->SetLayerTreeHost(host); | 152 mask_layer_->SetLayerTreeHost(host); |
| 153 if (replica_layer_.get()) | 153 if (replica_layer_.get()) |
| 154 replica_layer_->SetLayerTreeHost(host); | 154 replica_layer_->SetLayerTreeHost(host); |
| 155 | 155 |
| 156 if (host) | 156 if (host) |
| 157 RegisterForAnimations(host->animation_registrar()); | 157 RegisterForAnimations(host->animation_registrar()); |
| 158 | 158 |
| 159 if (host && layer_animation_controller_->has_any_animation()) | 159 bool has_any_animation = false; |
| 160 if (layer_animation_controller_) |
| 161 has_any_animation = layer_animation_controller_->has_any_animation(); |
| 162 else if (layer_tree_host_) |
| 163 has_any_animation = layer_tree_host_->HasAnyAnimation(this); |
| 164 |
| 165 if (host && has_any_animation) |
| 160 host->SetNeedsCommit(); | 166 host->SetNeedsCommit(); |
| 161 } | 167 } |
| 162 | 168 |
| 163 void Layer::SetNeedsUpdate() { | 169 void Layer::SetNeedsUpdate() { |
| 164 if (layer_tree_host_ && !ignore_set_needs_commit_) | 170 if (layer_tree_host_ && !ignore_set_needs_commit_) |
| 165 layer_tree_host_->SetNeedsUpdateLayers(); | 171 layer_tree_host_->SetNeedsUpdateLayers(); |
| 166 } | 172 } |
| 167 | 173 |
| 168 void Layer::SetNeedsCommit() { | 174 void Layer::SetNeedsCommit() { |
| 169 if (!layer_tree_host_) | 175 if (!layer_tree_host_) |
| (...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 495 | 501 |
| 496 void Layer::SetFilters(const FilterOperations& filters) { | 502 void Layer::SetFilters(const FilterOperations& filters) { |
| 497 DCHECK(IsPropertyChangeAllowed()); | 503 DCHECK(IsPropertyChangeAllowed()); |
| 498 if (filters_ == filters) | 504 if (filters_ == filters) |
| 499 return; | 505 return; |
| 500 filters_ = filters; | 506 filters_ = filters; |
| 501 SetNeedsCommit(); | 507 SetNeedsCommit(); |
| 502 } | 508 } |
| 503 | 509 |
| 504 bool Layer::FilterIsAnimating() const { | 510 bool Layer::FilterIsAnimating() const { |
| 505 return layer_animation_controller_->IsAnimatingProperty(Animation::FILTER); | 511 DCHECK(layer_tree_host_); |
| 512 return layer_animation_controller_ |
| 513 ? layer_animation_controller_->IsAnimatingProperty( |
| 514 Animation::FILTER) |
| 515 : layer_tree_host_->IsAnimatingFilterProperty(this); |
| 506 } | 516 } |
| 507 | 517 |
| 508 void Layer::SetBackgroundFilters(const FilterOperations& filters) { | 518 void Layer::SetBackgroundFilters(const FilterOperations& filters) { |
| 509 DCHECK(IsPropertyChangeAllowed()); | 519 DCHECK(IsPropertyChangeAllowed()); |
| 510 if (background_filters_ == filters) | 520 if (background_filters_ == filters) |
| 511 return; | 521 return; |
| 512 background_filters_ = filters; | 522 background_filters_ = filters; |
| 513 SetNeedsCommit(); | 523 SetNeedsCommit(); |
| 514 } | 524 } |
| 515 | 525 |
| 516 void Layer::SetOpacity(float opacity) { | 526 void Layer::SetOpacity(float opacity) { |
| 517 DCHECK(IsPropertyChangeAllowed()); | 527 DCHECK(IsPropertyChangeAllowed()); |
| 518 if (opacity_ == opacity) | 528 if (opacity_ == opacity) |
| 519 return; | 529 return; |
| 520 opacity_ = opacity; | 530 opacity_ = opacity; |
| 521 SetNeedsCommit(); | 531 SetNeedsCommit(); |
| 522 } | 532 } |
| 523 | 533 |
| 524 bool Layer::OpacityIsAnimating() const { | 534 bool Layer::OpacityIsAnimating() const { |
| 525 return layer_animation_controller_->IsAnimatingProperty(Animation::OPACITY); | 535 DCHECK(layer_tree_host_); |
| 536 return layer_animation_controller_ |
| 537 ? layer_animation_controller_->IsAnimatingProperty( |
| 538 Animation::OPACITY) |
| 539 : layer_tree_host_->IsAnimatingOpacityProperty(this); |
| 540 } |
| 541 |
| 542 bool Layer::HasPotentiallyRunningOpacityAnimation() const { |
| 543 if (layer_animation_controller_) { |
| 544 if (Animation* animation = |
| 545 layer_animation_controller()->GetAnimation(Animation::OPACITY)) { |
| 546 return !animation->is_finished(); |
| 547 } |
| 548 return false; |
| 549 } else { |
| 550 DCHECK(layer_tree_host_); |
| 551 return layer_tree_host_->HasPotentiallyRunningOpacityAnimation(this); |
| 552 } |
| 526 } | 553 } |
| 527 | 554 |
| 528 bool Layer::OpacityCanAnimateOnImplThread() const { | 555 bool Layer::OpacityCanAnimateOnImplThread() const { |
| 529 return false; | 556 return false; |
| 530 } | 557 } |
| 531 | 558 |
| 532 void Layer::SetBlendMode(SkXfermode::Mode blend_mode) { | 559 void Layer::SetBlendMode(SkXfermode::Mode blend_mode) { |
| 533 DCHECK(IsPropertyChangeAllowed()); | 560 DCHECK(IsPropertyChangeAllowed()); |
| 534 if (blend_mode_ == blend_mode) | 561 if (blend_mode_ == blend_mode) |
| 535 return; | 562 return; |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 699 layer_tree_host_->property_trees()->transform_tree.set_needs_update(true); | 726 layer_tree_host_->property_trees()->transform_tree.set_needs_update(true); |
| 700 SetNeedsCommitNoRebuild(); | 727 SetNeedsCommitNoRebuild(); |
| 701 return; | 728 return; |
| 702 } | 729 } |
| 703 } | 730 } |
| 704 | 731 |
| 705 SetNeedsCommit(); | 732 SetNeedsCommit(); |
| 706 } | 733 } |
| 707 | 734 |
| 708 bool Layer::AnimationsPreserveAxisAlignment() const { | 735 bool Layer::AnimationsPreserveAxisAlignment() const { |
| 709 return layer_animation_controller_->AnimationsPreserveAxisAlignment(); | 736 DCHECK(layer_tree_host_); |
| 737 return layer_animation_controller_ |
| 738 ? layer_animation_controller_->AnimationsPreserveAxisAlignment() |
| 739 : layer_tree_host_->AnimationsPreserveAxisAlignment(this); |
| 710 } | 740 } |
| 711 | 741 |
| 712 bool Layer::TransformIsAnimating() const { | 742 bool Layer::TransformIsAnimating() const { |
| 713 return layer_animation_controller_->IsAnimatingProperty(Animation::TRANSFORM); | 743 DCHECK(layer_tree_host_); |
| 744 return layer_animation_controller_ |
| 745 ? layer_animation_controller_->IsAnimatingProperty( |
| 746 Animation::TRANSFORM) |
| 747 : layer_tree_host_->IsAnimatingTransformProperty(this); |
| 748 } |
| 749 |
| 750 bool Layer::HasPotentiallyRunningTransformAnimation() const { |
| 751 if (layer_animation_controller_) { |
| 752 if (Animation* animation = |
| 753 layer_animation_controller()->GetAnimation(Animation::TRANSFORM)) { |
| 754 return !animation->is_finished(); |
| 755 } |
| 756 return false; |
| 757 } else { |
| 758 DCHECK(layer_tree_host_); |
| 759 return layer_tree_host_->HasPotentiallyRunningTransformAnimation(this); |
| 760 } |
| 761 } |
| 762 |
| 763 bool Layer::ScrollOffsetAnimationWasInterrupted() const { |
| 764 DCHECK(layer_tree_host_); |
| 765 return layer_animation_controller_ |
| 766 ? layer_animation_controller_ |
| 767 ->scroll_offset_animation_was_interrupted() |
| 768 : layer_tree_host_->ScrollOffsetAnimationWasInterrupted(this); |
| 714 } | 769 } |
| 715 | 770 |
| 716 void Layer::SetScrollParent(Layer* parent) { | 771 void Layer::SetScrollParent(Layer* parent) { |
| 717 DCHECK(IsPropertyChangeAllowed()); | 772 DCHECK(IsPropertyChangeAllowed()); |
| 718 if (scroll_parent_ == parent) | 773 if (scroll_parent_ == parent) |
| 719 return; | 774 return; |
| 720 | 775 |
| 721 if (scroll_parent_) | 776 if (scroll_parent_) |
| 722 scroll_parent_->RemoveScrollChild(this); | 777 scroll_parent_->RemoveScrollChild(this); |
| 723 | 778 |
| (...skipping 489 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1213 } | 1268 } |
| 1214 layer->SetClipChildren(clip_children); | 1269 layer->SetClipChildren(clip_children); |
| 1215 } else { | 1270 } else { |
| 1216 layer->SetClipChildren(nullptr); | 1271 layer->SetClipChildren(nullptr); |
| 1217 } | 1272 } |
| 1218 | 1273 |
| 1219 // When a scroll offset animation is interrupted the new scroll position on | 1274 // When a scroll offset animation is interrupted the new scroll position on |
| 1220 // the pending tree will clobber any impl-side scrolling occuring on the | 1275 // the pending tree will clobber any impl-side scrolling occuring on the |
| 1221 // active tree. To do so, avoid scrolling the pending tree along with it | 1276 // active tree. To do so, avoid scrolling the pending tree along with it |
| 1222 // instead of trying to undo that scrolling later. | 1277 // instead of trying to undo that scrolling later. |
| 1223 if (layer_animation_controller_->scroll_offset_animation_was_interrupted()) | 1278 if (ScrollOffsetAnimationWasInterrupted()) |
| 1224 layer->PushScrollOffsetFromMainThreadAndClobberActiveValue(scroll_offset_); | 1279 layer->PushScrollOffsetFromMainThreadAndClobberActiveValue(scroll_offset_); |
| 1225 else | 1280 else |
| 1226 layer->PushScrollOffsetFromMainThread(scroll_offset_); | 1281 layer->PushScrollOffsetFromMainThread(scroll_offset_); |
| 1227 layer->SetScrollCompensationAdjustment(ScrollCompensationAdjustment()); | 1282 layer->SetScrollCompensationAdjustment(ScrollCompensationAdjustment()); |
| 1228 | 1283 |
| 1229 // Wrap the copy_requests_ in a PostTask to the main thread. | 1284 // Wrap the copy_requests_ in a PostTask to the main thread. |
| 1230 bool had_copy_requests = !copy_requests_.empty(); | 1285 bool had_copy_requests = !copy_requests_.empty(); |
| 1231 ScopedPtrVector<CopyOutputRequest> main_thread_copy_requests; | 1286 ScopedPtrVector<CopyOutputRequest> main_thread_copy_requests; |
| 1232 for (ScopedPtrVector<CopyOutputRequest>::iterator it = copy_requests_.begin(); | 1287 for (ScopedPtrVector<CopyOutputRequest>::iterator it = copy_requests_.begin(); |
| 1233 it != copy_requests_.end(); | 1288 it != copy_requests_.end(); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1253 | 1308 |
| 1254 // If the main thread commits multiple times before the impl thread actually | 1309 // If the main thread commits multiple times before the impl thread actually |
| 1255 // draws, then damage tracking will become incorrect if we simply clobber the | 1310 // draws, then damage tracking will become incorrect if we simply clobber the |
| 1256 // update_rect here. The LayerImpl's update_rect needs to accumulate (i.e. | 1311 // update_rect here. The LayerImpl's update_rect needs to accumulate (i.e. |
| 1257 // union) any update changes that have occurred on the main thread. | 1312 // union) any update changes that have occurred on the main thread. |
| 1258 update_rect_.Union(layer->update_rect()); | 1313 update_rect_.Union(layer->update_rect()); |
| 1259 layer->SetUpdateRect(update_rect_); | 1314 layer->SetUpdateRect(update_rect_); |
| 1260 | 1315 |
| 1261 layer->SetStackingOrderChanged(stacking_order_changed_); | 1316 layer->SetStackingOrderChanged(stacking_order_changed_); |
| 1262 | 1317 |
| 1263 layer_animation_controller_->PushAnimationUpdatesTo( | 1318 if (layer->layer_animation_controller() && layer_animation_controller_) |
| 1264 layer->layer_animation_controller()); | 1319 layer_animation_controller_->PushAnimationUpdatesTo( |
| 1320 layer->layer_animation_controller()); |
| 1265 | 1321 |
| 1266 if (frame_timing_requests_dirty_) { | 1322 if (frame_timing_requests_dirty_) { |
| 1267 layer->SetFrameTimingRequests(frame_timing_requests_); | 1323 layer->SetFrameTimingRequests(frame_timing_requests_); |
| 1268 frame_timing_requests_dirty_ = false; | 1324 frame_timing_requests_dirty_ = false; |
| 1269 } | 1325 } |
| 1270 | 1326 |
| 1271 bool is_page_scale_layer = this == layer_tree_host()->page_scale_layer(); | 1327 bool is_page_scale_layer = this == layer_tree_host()->page_scale_layer(); |
| 1272 bool parent_affected = | 1328 bool parent_affected = |
| 1273 layer->parent() && layer->parent()->IsAffectedByPageScale(); | 1329 layer->parent() && layer->parent()->IsAffectedByPageScale(); |
| 1274 layer->SetIsAffectedByPageScale(is_page_scale_layer || parent_affected); | 1330 layer->SetIsAffectedByPageScale(is_page_scale_layer || parent_affected); |
| (...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1469 | 1525 |
| 1470 void Layer::RemoveAnimation(int animation_id, | 1526 void Layer::RemoveAnimation(int animation_id, |
| 1471 Animation::TargetProperty property) { | 1527 Animation::TargetProperty property) { |
| 1472 DCHECK(layer_animation_controller_); | 1528 DCHECK(layer_animation_controller_); |
| 1473 layer_animation_controller_->RemoveAnimation(animation_id, property); | 1529 layer_animation_controller_->RemoveAnimation(animation_id, property); |
| 1474 SetNeedsCommit(); | 1530 SetNeedsCommit(); |
| 1475 } | 1531 } |
| 1476 | 1532 |
| 1477 void Layer::SetLayerAnimationControllerForTest( | 1533 void Layer::SetLayerAnimationControllerForTest( |
| 1478 scoped_refptr<LayerAnimationController> controller) { | 1534 scoped_refptr<LayerAnimationController> controller) { |
| 1535 DCHECK(layer_animation_controller_); |
| 1479 layer_animation_controller_->RemoveValueObserver(this); | 1536 layer_animation_controller_->RemoveValueObserver(this); |
| 1480 layer_animation_controller_ = controller; | 1537 layer_animation_controller_ = controller; |
| 1481 layer_animation_controller_->AddValueObserver(this); | 1538 layer_animation_controller_->AddValueObserver(this); |
| 1482 SetNeedsCommit(); | 1539 SetNeedsCommit(); |
| 1483 } | 1540 } |
| 1484 | 1541 |
| 1485 bool Layer::HasActiveAnimation() const { | 1542 bool Layer::HasActiveAnimation() const { |
| 1486 DCHECK(layer_animation_controller_); | 1543 DCHECK(layer_tree_host_); |
| 1487 return layer_animation_controller_->HasActiveAnimation(); | 1544 return layer_animation_controller_ |
| 1545 ? layer_animation_controller_->HasActiveAnimation() |
| 1546 : layer_tree_host_->HasActiveAnimation(this); |
| 1488 } | 1547 } |
| 1489 | 1548 |
| 1490 void Layer::RegisterForAnimations(AnimationRegistrar* registrar) { | 1549 void Layer::RegisterForAnimations(AnimationRegistrar* registrar) { |
| 1491 if (layer_animation_controller_) | 1550 if (layer_animation_controller_) |
| 1492 layer_animation_controller_->SetAnimationRegistrar(registrar); | 1551 layer_animation_controller_->SetAnimationRegistrar(registrar); |
| 1493 } | 1552 } |
| 1494 | 1553 |
| 1495 void Layer::AddLayerAnimationEventObserver( | 1554 void Layer::AddLayerAnimationEventObserver( |
| 1496 LayerAnimationEventObserver* animation_observer) { | 1555 LayerAnimationEventObserver* animation_observer) { |
| 1497 DCHECK(layer_animation_controller_); | 1556 DCHECK(layer_animation_controller_); |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1600 ? layer_tree_host()->meta_information_sequence_number() | 1659 ? layer_tree_host()->meta_information_sequence_number() |
| 1601 : 0; | 1660 : 0; |
| 1602 } | 1661 } |
| 1603 | 1662 |
| 1604 bool Layer::sorted_for_recursion() { | 1663 bool Layer::sorted_for_recursion() { |
| 1605 return sorted_for_recursion_tracker_ == | 1664 return sorted_for_recursion_tracker_ == |
| 1606 layer_tree_host()->meta_information_sequence_number(); | 1665 layer_tree_host()->meta_information_sequence_number(); |
| 1607 } | 1666 } |
| 1608 | 1667 |
| 1609 } // namespace cc | 1668 } // namespace cc |
| OLD | NEW |