| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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_impl.h" | 5 #include "cc/layers/layer_impl.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 68 draws_content_(false), | 68 draws_content_(false), |
| 69 is_drawn_render_surface_layer_list_member_(false), | 69 is_drawn_render_surface_layer_list_member_(false), |
| 70 was_ever_ready_since_last_transform_animation_(true), | 70 was_ever_ready_since_last_transform_animation_(true), |
| 71 background_color_(0), | 71 background_color_(0), |
| 72 safe_opaque_background_color_(0), | 72 safe_opaque_background_color_(0), |
| 73 draw_blend_mode_(SkBlendMode::kSrcOver), | 73 draw_blend_mode_(SkBlendMode::kSrcOver), |
| 74 transform_tree_index_(TransformTree::kInvalidNodeId), | 74 transform_tree_index_(TransformTree::kInvalidNodeId), |
| 75 effect_tree_index_(EffectTree::kInvalidNodeId), | 75 effect_tree_index_(EffectTree::kInvalidNodeId), |
| 76 clip_tree_index_(ClipTree::kInvalidNodeId), | 76 clip_tree_index_(ClipTree::kInvalidNodeId), |
| 77 scroll_tree_index_(ScrollTree::kInvalidNodeId), | 77 scroll_tree_index_(ScrollTree::kInvalidNodeId), |
| 78 sorting_context_id_(0), | |
| 79 current_draw_mode_(DRAW_MODE_NONE), | 78 current_draw_mode_(DRAW_MODE_NONE), |
| 80 mutable_properties_(MutableProperty::kNone), | 79 mutable_properties_(MutableProperty::kNone), |
| 81 debug_info_(nullptr), | 80 debug_info_(nullptr), |
| 82 has_preferred_raster_bounds_(false), | 81 has_preferred_raster_bounds_(false), |
| 83 has_will_change_transform_hint_(false), | 82 has_will_change_transform_hint_(false), |
| 84 needs_push_properties_(false), | 83 needs_push_properties_(false), |
| 85 scrollbars_hidden_(false) { | 84 scrollbars_hidden_(false) { |
| 86 DCHECK_GT(layer_id_, 0); | 85 DCHECK_GT(layer_id_, 0); |
| 87 | 86 |
| 88 DCHECK(layer_tree_impl_); | 87 DCHECK(layer_tree_impl_); |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 163 | 162 |
| 164 void LayerImpl::ClearRenderSurfaceLayerList() { | 163 void LayerImpl::ClearRenderSurfaceLayerList() { |
| 165 if (render_surface_) | 164 if (render_surface_) |
| 166 render_surface_->ClearLayerLists(); | 165 render_surface_->ClearLayerLists(); |
| 167 } | 166 } |
| 168 | 167 |
| 169 void LayerImpl::PopulateSharedQuadState(SharedQuadState* state) const { | 168 void LayerImpl::PopulateSharedQuadState(SharedQuadState* state) const { |
| 170 state->SetAll(draw_properties_.target_space_transform, bounds(), | 169 state->SetAll(draw_properties_.target_space_transform, bounds(), |
| 171 draw_properties_.visible_layer_rect, draw_properties_.clip_rect, | 170 draw_properties_.visible_layer_rect, draw_properties_.clip_rect, |
| 172 draw_properties_.is_clipped, draw_properties_.opacity, | 171 draw_properties_.is_clipped, draw_properties_.opacity, |
| 173 draw_blend_mode_, sorting_context_id_); | 172 draw_blend_mode_, GetSortingContextId()); |
| 174 } | 173 } |
| 175 | 174 |
| 176 void LayerImpl::PopulateScaledSharedQuadState( | 175 void LayerImpl::PopulateScaledSharedQuadState( |
| 177 SharedQuadState* state, | 176 SharedQuadState* state, |
| 178 float layer_to_content_scale_x, | 177 float layer_to_content_scale_x, |
| 179 float layer_to_content_scale_y) const { | 178 float layer_to_content_scale_y) const { |
| 180 gfx::Transform scaled_draw_transform = | 179 gfx::Transform scaled_draw_transform = |
| 181 draw_properties_.target_space_transform; | 180 draw_properties_.target_space_transform; |
| 182 scaled_draw_transform.Scale(SK_MScalar1 / layer_to_content_scale_x, | 181 scaled_draw_transform.Scale(SK_MScalar1 / layer_to_content_scale_x, |
| 183 SK_MScalar1 / layer_to_content_scale_y); | 182 SK_MScalar1 / layer_to_content_scale_y); |
| 184 gfx::Size scaled_bounds = gfx::ScaleToCeiledSize( | 183 gfx::Size scaled_bounds = gfx::ScaleToCeiledSize( |
| 185 bounds(), layer_to_content_scale_x, layer_to_content_scale_y); | 184 bounds(), layer_to_content_scale_x, layer_to_content_scale_y); |
| 186 gfx::Rect scaled_visible_layer_rect = gfx::ScaleToEnclosingRect( | 185 gfx::Rect scaled_visible_layer_rect = gfx::ScaleToEnclosingRect( |
| 187 visible_layer_rect(), layer_to_content_scale_x, layer_to_content_scale_y); | 186 visible_layer_rect(), layer_to_content_scale_x, layer_to_content_scale_y); |
| 188 scaled_visible_layer_rect.Intersect(gfx::Rect(scaled_bounds)); | 187 scaled_visible_layer_rect.Intersect(gfx::Rect(scaled_bounds)); |
| 189 | 188 |
| 190 state->SetAll(scaled_draw_transform, scaled_bounds, scaled_visible_layer_rect, | 189 state->SetAll(scaled_draw_transform, scaled_bounds, scaled_visible_layer_rect, |
| 191 draw_properties().clip_rect, draw_properties().is_clipped, | 190 draw_properties().clip_rect, draw_properties().is_clipped, |
| 192 draw_properties().opacity, draw_blend_mode_, | 191 draw_properties().opacity, draw_blend_mode_, |
| 193 sorting_context_id_); | 192 GetSortingContextId()); |
| 194 } | 193 } |
| 195 | 194 |
| 196 bool LayerImpl::WillDraw(DrawMode draw_mode, | 195 bool LayerImpl::WillDraw(DrawMode draw_mode, |
| 197 ResourceProvider* resource_provider) { | 196 ResourceProvider* resource_provider) { |
| 198 // WillDraw/DidDraw must be matched. | 197 // WillDraw/DidDraw must be matched. |
| 199 DCHECK_NE(DRAW_MODE_NONE, draw_mode); | 198 DCHECK_NE(DRAW_MODE_NONE, draw_mode); |
| 200 DCHECK_EQ(DRAW_MODE_NONE, current_draw_mode_); | 199 DCHECK_EQ(DRAW_MODE_NONE, current_draw_mode_); |
| 201 current_draw_mode_ = draw_mode; | 200 current_draw_mode_ = draw_mode; |
| 202 return true; | 201 return true; |
| 203 } | 202 } |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 346 layer->non_fast_scrollable_region_ = non_fast_scrollable_region_; | 345 layer->non_fast_scrollable_region_ = non_fast_scrollable_region_; |
| 347 layer->touch_event_handler_region_ = touch_event_handler_region_; | 346 layer->touch_event_handler_region_ = touch_event_handler_region_; |
| 348 layer->background_color_ = background_color_; | 347 layer->background_color_ = background_color_; |
| 349 layer->safe_opaque_background_color_ = safe_opaque_background_color_; | 348 layer->safe_opaque_background_color_ = safe_opaque_background_color_; |
| 350 layer->draw_blend_mode_ = draw_blend_mode_; | 349 layer->draw_blend_mode_ = draw_blend_mode_; |
| 351 layer->position_ = position_; | 350 layer->position_ = position_; |
| 352 layer->transform_tree_index_ = transform_tree_index_; | 351 layer->transform_tree_index_ = transform_tree_index_; |
| 353 layer->effect_tree_index_ = effect_tree_index_; | 352 layer->effect_tree_index_ = effect_tree_index_; |
| 354 layer->clip_tree_index_ = clip_tree_index_; | 353 layer->clip_tree_index_ = clip_tree_index_; |
| 355 layer->scroll_tree_index_ = scroll_tree_index_; | 354 layer->scroll_tree_index_ = scroll_tree_index_; |
| 356 layer->sorting_context_id_ = sorting_context_id_; | |
| 357 layer->has_will_change_transform_hint_ = has_will_change_transform_hint_; | 355 layer->has_will_change_transform_hint_ = has_will_change_transform_hint_; |
| 358 layer->scrollbars_hidden_ = scrollbars_hidden_; | 356 layer->scrollbars_hidden_ = scrollbars_hidden_; |
| 359 | 357 |
| 360 if (layer_property_changed_) { | 358 if (layer_property_changed_) { |
| 361 layer->layer_tree_impl()->set_needs_update_draw_properties(); | 359 layer->layer_tree_impl()->set_needs_update_draw_properties(); |
| 362 layer->layer_property_changed_ = true; | 360 layer->layer_property_changed_ = true; |
| 363 } | 361 } |
| 364 | 362 |
| 365 // If whether layer has render surface changes, we need to update draw | 363 // If whether layer has render surface changes, we need to update draw |
| 366 // properties. | 364 // properties. |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 443 | 441 |
| 444 list = new base::ListValue; | 442 list = new base::ListValue; |
| 445 for (size_t i = 0; i < test_properties()->children.size(); ++i) | 443 for (size_t i = 0; i < test_properties()->children.size(); ++i) |
| 446 list->Append(test_properties()->children[i]->LayerTreeAsJson()); | 444 list->Append(test_properties()->children[i]->LayerTreeAsJson()); |
| 447 result->Set("Children", list); | 445 result->Set("Children", list); |
| 448 | 446 |
| 449 return result; | 447 return result; |
| 450 } | 448 } |
| 451 | 449 |
| 452 bool LayerImpl::LayerPropertyChanged() const { | 450 bool LayerImpl::LayerPropertyChanged() const { |
| 453 if (layer_property_changed_ || | 451 if (layer_property_changed_ || GetPropertyTrees()->full_tree_damaged) |
| 454 (GetPropertyTrees() && GetPropertyTrees()->full_tree_damaged)) | |
| 455 return true; | 452 return true; |
| 456 if (transform_tree_index() == TransformTree::kInvalidNodeId) | 453 if (transform_tree_index() == TransformTree::kInvalidNodeId) |
| 457 return false; | 454 return false; |
| 458 TransformNode* transform_node = | 455 TransformNode* transform_node = |
| 459 GetTransformTree().Node(transform_tree_index()); | 456 GetTransformTree().Node(transform_tree_index()); |
| 460 if (transform_node && transform_node->transform_changed) | 457 if (transform_node && transform_node->transform_changed) |
| 461 return true; | 458 return true; |
| 462 if (effect_tree_index() == EffectTree::kInvalidNodeId) | 459 if (effect_tree_index() == EffectTree::kInvalidNodeId) |
| 463 return false; | 460 return false; |
| 464 EffectNode* effect_node = GetEffectTree().Node(effect_tree_index()); | 461 EffectNode* effect_node = GetEffectTree().Node(effect_tree_index()); |
| (...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 761 | 758 |
| 762 mutable_properties_ = properties; | 759 mutable_properties_ = properties; |
| 763 // If this layer is already in the element map, update its properties. | 760 // If this layer is already in the element map, update its properties. |
| 764 layer_tree_impl_->AddToElementMap(this); | 761 layer_tree_impl_->AddToElementMap(this); |
| 765 } | 762 } |
| 766 | 763 |
| 767 void LayerImpl::SetPosition(const gfx::PointF& position) { | 764 void LayerImpl::SetPosition(const gfx::PointF& position) { |
| 768 position_ = position; | 765 position_ = position; |
| 769 } | 766 } |
| 770 | 767 |
| 771 void LayerImpl::Set3dSortingContextId(int id) { | |
| 772 sorting_context_id_ = id; | |
| 773 } | |
| 774 | |
| 775 bool LayerImpl::TransformIsAnimating() const { | 768 bool LayerImpl::TransformIsAnimating() const { |
| 776 return GetMutatorHost()->IsAnimatingTransformProperty( | 769 return GetMutatorHost()->IsAnimatingTransformProperty( |
| 777 element_id(), GetElementTypeForAnimation()); | 770 element_id(), GetElementTypeForAnimation()); |
| 778 } | 771 } |
| 779 | 772 |
| 780 bool LayerImpl::HasPotentiallyRunningTransformAnimation() const { | 773 bool LayerImpl::HasPotentiallyRunningTransformAnimation() const { |
| 781 return GetMutatorHost()->HasPotentiallyRunningTransformAnimation( | 774 return GetMutatorHost()->HasPotentiallyRunningTransformAnimation( |
| 782 element_id(), GetElementTypeForAnimation()); | 775 element_id(), GetElementTypeForAnimation()); |
| 783 } | 776 } |
| 784 | 777 |
| (...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1031 return false; | 1024 return false; |
| 1032 if (static_cast<int>(offset_to_transform_parent().x()) != | 1025 if (static_cast<int>(offset_to_transform_parent().x()) != |
| 1033 offset_to_transform_parent().x()) | 1026 offset_to_transform_parent().x()) |
| 1034 return false; | 1027 return false; |
| 1035 if (static_cast<int>(offset_to_transform_parent().y()) != | 1028 if (static_cast<int>(offset_to_transform_parent().y()) != |
| 1036 offset_to_transform_parent().y()) | 1029 offset_to_transform_parent().y()) |
| 1037 return false; | 1030 return false; |
| 1038 return true; | 1031 return true; |
| 1039 } | 1032 } |
| 1040 | 1033 |
| 1034 int LayerImpl::GetSortingContextId() const { |
| 1035 return layer_tree_impl() |
| 1036 ->property_trees() |
| 1037 ->transform_tree.Node(transform_tree_index()) |
| 1038 ->sorting_context_id; |
| 1039 } |
| 1040 |
| 1041 Region LayerImpl::GetInvalidationRegionForDebugging() { | 1041 Region LayerImpl::GetInvalidationRegionForDebugging() { |
| 1042 return Region(update_rect_); | 1042 return Region(update_rect_); |
| 1043 } | 1043 } |
| 1044 | 1044 |
| 1045 gfx::Rect LayerImpl::GetEnclosingRectInTargetSpace() const { | 1045 gfx::Rect LayerImpl::GetEnclosingRectInTargetSpace() const { |
| 1046 return MathUtil::MapEnclosingClippedRect(DrawTransform(), | 1046 return MathUtil::MapEnclosingClippedRect(DrawTransform(), |
| 1047 gfx::Rect(bounds())); | 1047 gfx::Rect(bounds())); |
| 1048 } | 1048 } |
| 1049 | 1049 |
| 1050 gfx::Rect LayerImpl::GetScaledEnclosingRectInTargetSpace(float scale) const { | 1050 gfx::Rect LayerImpl::GetScaledEnclosingRectInTargetSpace(float scale) const { |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1100 | 1100 |
| 1101 ScrollTree& LayerImpl::GetScrollTree() const { | 1101 ScrollTree& LayerImpl::GetScrollTree() const { |
| 1102 return GetPropertyTrees()->scroll_tree; | 1102 return GetPropertyTrees()->scroll_tree; |
| 1103 } | 1103 } |
| 1104 | 1104 |
| 1105 TransformTree& LayerImpl::GetTransformTree() const { | 1105 TransformTree& LayerImpl::GetTransformTree() const { |
| 1106 return GetPropertyTrees()->transform_tree; | 1106 return GetPropertyTrees()->transform_tree; |
| 1107 } | 1107 } |
| 1108 | 1108 |
| 1109 } // namespace cc | 1109 } // namespace cc |
| OLD | NEW |