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 #ifndef CC_LAYERS_LAYER_H_ | 5 #ifndef CC_LAYERS_LAYER_H_ |
6 #define CC_LAYERS_LAYER_H_ | 6 #define CC_LAYERS_LAYER_H_ |
7 | 7 |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 | 10 |
11 #include <set> | 11 #include <set> |
12 #include <string> | 12 #include <string> |
13 #include <unordered_map> | 13 #include <unordered_map> |
14 #include <vector> | 14 #include <vector> |
15 | 15 |
16 #include "base/callback.h" | 16 #include "base/callback.h" |
17 #include "base/macros.h" | 17 #include "base/macros.h" |
18 #include "base/memory/ref_counted.h" | 18 #include "base/memory/ref_counted.h" |
19 #include "base/observer_list.h" | 19 #include "base/observer_list.h" |
20 #include "cc/animation/element_id.h" | 20 #include "cc/animation/element_id.h" |
21 #include "cc/animation/target_property.h" | 21 #include "cc/animation/target_property.h" |
22 #include "cc/base/cc_export.h" | 22 #include "cc/base/cc_export.h" |
23 #include "cc/base/region.h" | 23 #include "cc/base/region.h" |
24 #include "cc/debug/micro_benchmark.h" | 24 #include "cc/debug/micro_benchmark.h" |
25 #include "cc/input/input_handler.h" | 25 #include "cc/input/input_handler.h" |
26 #include "cc/layers/layer_collections.h" | 26 #include "cc/layers/layer_collections.h" |
27 #include "cc/layers/layer_position_constraint.h" | 27 #include "cc/layers/layer_position_constraint.h" |
28 #include "cc/layers/paint_properties.h" | 28 #include "cc/layers/paint_properties.h" |
29 #include "cc/output/filter_operations.h" | 29 #include "cc/output/filter_operations.h" |
| 30 #include "cc/trees/mutator_host_client.h" |
30 #include "cc/trees/property_tree.h" | 31 #include "cc/trees/property_tree.h" |
31 #include "third_party/skia/include/core/SkColor.h" | 32 #include "third_party/skia/include/core/SkColor.h" |
32 #include "third_party/skia/include/core/SkPicture.h" | 33 #include "third_party/skia/include/core/SkPicture.h" |
33 #include "third_party/skia/include/core/SkXfermode.h" | 34 #include "third_party/skia/include/core/SkXfermode.h" |
34 #include "ui/gfx/geometry/point3_f.h" | 35 #include "ui/gfx/geometry/point3_f.h" |
35 #include "ui/gfx/geometry/rect.h" | 36 #include "ui/gfx/geometry/rect.h" |
36 #include "ui/gfx/geometry/rect_f.h" | 37 #include "ui/gfx/geometry/rect_f.h" |
37 #include "ui/gfx/geometry/scroll_offset.h" | 38 #include "ui/gfx/geometry/scroll_offset.h" |
38 #include "ui/gfx/transform.h" | 39 #include "ui/gfx/transform.h" |
39 | 40 |
40 namespace gfx { | 41 namespace gfx { |
41 class BoxF; | 42 class BoxF; |
42 } | 43 } |
43 | 44 |
44 namespace base { | 45 namespace base { |
45 namespace trace_event { | 46 namespace trace_event { |
46 class ConvertableToTraceFormat; | 47 class ConvertableToTraceFormat; |
47 } | 48 } |
48 } | 49 } |
49 | 50 |
50 namespace cc { | 51 namespace cc { |
51 | 52 |
| 53 class AnimationHost; |
52 class CopyOutputRequest; | 54 class CopyOutputRequest; |
53 class LayerAnimationEventObserver; | 55 class LayerAnimationEventObserver; |
54 class LayerClient; | 56 class LayerClient; |
55 class LayerImpl; | 57 class LayerImpl; |
56 class LayerTreeHost; | 58 class LayerTreeHost; |
57 class LayerTreeHostCommon; | 59 class LayerTreeHostCommon; |
58 class LayerTreeImpl; | 60 class LayerTreeImpl; |
59 class LayerTreeSettings; | 61 class LayerTreeSettings; |
60 class RenderingStatsInstrumentation; | 62 class RenderingStatsInstrumentation; |
61 class ResourceUpdateQueue; | 63 class ResourceUpdateQueue; |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
126 void SetMaskLayer(Layer* mask_layer); | 128 void SetMaskLayer(Layer* mask_layer); |
127 Layer* mask_layer() { return inputs_.mask_layer.get(); } | 129 Layer* mask_layer() { return inputs_.mask_layer.get(); } |
128 const Layer* mask_layer() const { return inputs_.mask_layer.get(); } | 130 const Layer* mask_layer() const { return inputs_.mask_layer.get(); } |
129 | 131 |
130 virtual void SetNeedsDisplayRect(const gfx::Rect& dirty_rect); | 132 virtual void SetNeedsDisplayRect(const gfx::Rect& dirty_rect); |
131 void SetNeedsDisplay() { SetNeedsDisplayRect(gfx::Rect(bounds())); } | 133 void SetNeedsDisplay() { SetNeedsDisplayRect(gfx::Rect(bounds())); } |
132 | 134 |
133 virtual void SetOpacity(float opacity); | 135 virtual void SetOpacity(float opacity); |
134 float opacity() const { return inputs_.opacity; } | 136 float opacity() const { return inputs_.opacity; } |
135 float EffectiveOpacity() const; | 137 float EffectiveOpacity() const; |
136 bool OpacityIsAnimating() const; | |
137 bool HasPotentiallyRunningOpacityAnimation() const; | |
138 virtual bool OpacityCanAnimateOnImplThread() const; | 138 virtual bool OpacityCanAnimateOnImplThread() const; |
139 | 139 |
140 virtual bool AlwaysUseActiveTreeOpacity() const; | 140 virtual bool AlwaysUseActiveTreeOpacity() const; |
141 | 141 |
142 void SetBlendMode(SkXfermode::Mode blend_mode); | 142 void SetBlendMode(SkXfermode::Mode blend_mode); |
143 SkXfermode::Mode blend_mode() const { return inputs_.blend_mode; } | 143 SkXfermode::Mode blend_mode() const { return inputs_.blend_mode; } |
144 | 144 |
145 void set_draw_blend_mode(SkXfermode::Mode blend_mode) { | 145 void set_draw_blend_mode(SkXfermode::Mode blend_mode) { |
146 if (draw_blend_mode_ == blend_mode) | 146 if (draw_blend_mode_ == blend_mode) |
147 return; | 147 return; |
(...skipping 10 matching lines...) Expand all Loading... |
158 // drawn over a black and fully transparent background, creating an isolated | 158 // drawn over a black and fully transparent background, creating an isolated |
159 // group. It should be used along with SetBlendMode(), in order to restrict | 159 // group. It should be used along with SetBlendMode(), in order to restrict |
160 // layers within the group to blend with layers outside this group. | 160 // layers within the group to blend with layers outside this group. |
161 void SetIsRootForIsolatedGroup(bool root); | 161 void SetIsRootForIsolatedGroup(bool root); |
162 bool is_root_for_isolated_group() const { | 162 bool is_root_for_isolated_group() const { |
163 return inputs_.is_root_for_isolated_group; | 163 return inputs_.is_root_for_isolated_group; |
164 } | 164 } |
165 | 165 |
166 void SetFilters(const FilterOperations& filters); | 166 void SetFilters(const FilterOperations& filters); |
167 const FilterOperations& filters() const { return inputs_.filters; } | 167 const FilterOperations& filters() const { return inputs_.filters; } |
168 bool FilterIsAnimating() const; | |
169 bool HasPotentiallyRunningFilterAnimation() const; | |
170 | 168 |
171 // Background filters are filters applied to what is behind this layer, when | 169 // Background filters are filters applied to what is behind this layer, when |
172 // they are viewed through non-opaque regions in this layer. They are used | 170 // they are viewed through non-opaque regions in this layer. They are used |
173 // through the WebLayer interface, and are not exposed to HTML. | 171 // through the WebLayer interface, and are not exposed to HTML. |
174 void SetBackgroundFilters(const FilterOperations& filters); | 172 void SetBackgroundFilters(const FilterOperations& filters); |
175 const FilterOperations& background_filters() const { | 173 const FilterOperations& background_filters() const { |
176 return inputs_.background_filters; | 174 return inputs_.background_filters; |
177 } | 175 } |
178 | 176 |
179 virtual void SetContentsOpaque(bool opaque); | 177 virtual void SetContentsOpaque(bool opaque); |
(...skipping 11 matching lines...) Expand all Loading... |
191 return gfx::Vector2dF(); | 189 return gfx::Vector2dF(); |
192 } | 190 } |
193 | 191 |
194 void SetPositionConstraint(const LayerPositionConstraint& constraint); | 192 void SetPositionConstraint(const LayerPositionConstraint& constraint); |
195 const LayerPositionConstraint& position_constraint() const { | 193 const LayerPositionConstraint& position_constraint() const { |
196 return inputs_.position_constraint; | 194 return inputs_.position_constraint; |
197 } | 195 } |
198 | 196 |
199 void SetTransform(const gfx::Transform& transform); | 197 void SetTransform(const gfx::Transform& transform); |
200 const gfx::Transform& transform() const { return inputs_.transform; } | 198 const gfx::Transform& transform() const { return inputs_.transform; } |
201 bool TransformIsAnimating() const; | |
202 bool HasPotentiallyRunningTransformAnimation() const; | |
203 bool HasOnlyTranslationTransforms() const; | |
204 bool AnimationsPreserveAxisAlignment() const; | |
205 | |
206 bool MaximumTargetScale(float* max_scale) const; | |
207 bool AnimationStartScale(float* start_scale) const; | |
208 | 199 |
209 void SetTransformOrigin(const gfx::Point3F&); | 200 void SetTransformOrigin(const gfx::Point3F&); |
210 gfx::Point3F transform_origin() const { return inputs_.transform_origin; } | 201 gfx::Point3F transform_origin() const { return inputs_.transform_origin; } |
211 | 202 |
212 bool HasAnyAnimationTargetingProperty(TargetProperty::Type property) const; | |
213 | |
214 bool ScrollOffsetAnimationWasInterrupted() const; | |
215 | |
216 void SetScrollParent(Layer* parent); | 203 void SetScrollParent(Layer* parent); |
217 | 204 |
218 Layer* scroll_parent() { return inputs_.scroll_parent; } | 205 Layer* scroll_parent() { return inputs_.scroll_parent; } |
219 const Layer* scroll_parent() const { return inputs_.scroll_parent; } | 206 const Layer* scroll_parent() const { return inputs_.scroll_parent; } |
220 | 207 |
221 void AddScrollChild(Layer* child); | |
222 void RemoveScrollChild(Layer* child); | |
223 | |
224 std::set<Layer*>* scroll_children() { return scroll_children_.get(); } | 208 std::set<Layer*>* scroll_children() { return scroll_children_.get(); } |
225 const std::set<Layer*>* scroll_children() const { | 209 const std::set<Layer*>* scroll_children() const { |
226 return scroll_children_.get(); | 210 return scroll_children_.get(); |
227 } | 211 } |
228 | 212 |
229 void SetClipParent(Layer* ancestor); | 213 void SetClipParent(Layer* ancestor); |
230 | 214 |
231 Layer* clip_parent() { return inputs_.clip_parent; } | 215 Layer* clip_parent() { return inputs_.clip_parent; } |
232 const Layer* clip_parent() const { return inputs_.clip_parent; } | 216 const Layer* clip_parent() const { return inputs_.clip_parent; } |
233 | 217 |
234 void AddClipChild(Layer* child); | |
235 void RemoveClipChild(Layer* child); | |
236 | |
237 std::set<Layer*>* clip_children() { return clip_children_.get(); } | 218 std::set<Layer*>* clip_children() { return clip_children_.get(); } |
238 const std::set<Layer*>* clip_children() const { | 219 const std::set<Layer*>* clip_children() const { |
239 return clip_children_.get(); | 220 return clip_children_.get(); |
240 } | 221 } |
241 | 222 |
242 // TODO(enne): Fix style here (and everywhere) once LayerImpl does the same. | 223 // TODO(enne): Fix style here (and everywhere) once LayerImpl does the same. |
243 gfx::Transform screen_space_transform() const; | 224 gfx::Transform screen_space_transform() const; |
244 | 225 |
245 void set_num_unclipped_descendants(size_t descendants) { | 226 void set_num_unclipped_descendants(size_t descendants) { |
246 num_unclipped_descendants_ = descendants; | 227 num_unclipped_descendants_ = descendants; |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
415 virtual ScrollbarLayerInterface* ToScrollbarLayer(); | 396 virtual ScrollbarLayerInterface* ToScrollbarLayer(); |
416 | 397 |
417 virtual sk_sp<SkPicture> GetPicture() const; | 398 virtual sk_sp<SkPicture> GetPicture() const; |
418 | 399 |
419 // Constructs a LayerImpl of the correct runtime type for this Layer type. | 400 // Constructs a LayerImpl of the correct runtime type for this Layer type. |
420 virtual std::unique_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl); | 401 virtual std::unique_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl); |
421 | 402 |
422 bool NeedsDisplayForTesting() const { return !inputs_.update_rect.IsEmpty(); } | 403 bool NeedsDisplayForTesting() const { return !inputs_.update_rect.IsEmpty(); } |
423 void ResetNeedsDisplayForTesting() { inputs_.update_rect = gfx::Rect(); } | 404 void ResetNeedsDisplayForTesting() { inputs_.update_rect = gfx::Rect(); } |
424 | 405 |
425 RenderingStatsInstrumentation* rendering_stats_instrumentation() const; | |
426 | |
427 const PaintProperties& paint_properties() const { | 406 const PaintProperties& paint_properties() const { |
428 return paint_properties_; | 407 return paint_properties_; |
429 } | 408 } |
430 | 409 |
431 void SetNeedsPushProperties(); | 410 void SetNeedsPushProperties(); |
432 void ResetNeedsPushPropertiesForTesting(); | 411 void ResetNeedsPushPropertiesForTesting(); |
433 | 412 |
434 virtual void RunMicroBenchmark(MicroBenchmark* benchmark); | 413 virtual void RunMicroBenchmark(MicroBenchmark* benchmark); |
435 | 414 |
436 void Set3dSortingContextId(int id); | 415 void Set3dSortingContextId(int id); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
501 void SetMutableProperties(uint32_t properties); | 480 void SetMutableProperties(uint32_t properties); |
502 uint32_t mutable_properties() const { return inputs_.mutable_properties; } | 481 uint32_t mutable_properties() const { return inputs_.mutable_properties; } |
503 | 482 |
504 bool HasActiveAnimationForTesting() const; | 483 bool HasActiveAnimationForTesting() const; |
505 | 484 |
506 void SetHasWillChangeTransformHint(bool has_will_change); | 485 void SetHasWillChangeTransformHint(bool has_will_change); |
507 bool has_will_change_transform_hint() const { | 486 bool has_will_change_transform_hint() const { |
508 return inputs_.has_will_change_transform_hint; | 487 return inputs_.has_will_change_transform_hint; |
509 } | 488 } |
510 | 489 |
| 490 AnimationHost* GetAnimationHost() const; |
| 491 |
| 492 ElementListType GetElementTypeForAnimation() const; |
| 493 |
511 protected: | 494 protected: |
512 friend class LayerImpl; | 495 friend class LayerImpl; |
513 friend class TreeSynchronizer; | 496 friend class TreeSynchronizer; |
514 virtual ~Layer(); | 497 virtual ~Layer(); |
515 Layer(); | 498 Layer(); |
516 | 499 |
517 // These SetNeeds functions are in order of severity of update: | 500 // These SetNeeds functions are in order of severity of update: |
518 // | 501 // |
519 // Called when this layer has been modified in some way, but isn't sure | 502 // Called when this layer has been modified in some way, but isn't sure |
520 // that it needs a commit yet. It needs CalcDrawProperties and UpdateLayers | 503 // that it needs a commit yet. It needs CalcDrawProperties and UpdateLayers |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
574 gfx::ScrollOffset ScrollOffsetForAnimation() const; | 557 gfx::ScrollOffset ScrollOffsetForAnimation() const; |
575 void OnFilterAnimated(const FilterOperations& filters); | 558 void OnFilterAnimated(const FilterOperations& filters); |
576 void OnOpacityAnimated(float opacity); | 559 void OnOpacityAnimated(float opacity); |
577 void OnTransformAnimated(const gfx::Transform& transform); | 560 void OnTransformAnimated(const gfx::Transform& transform); |
578 void OnScrollOffsetAnimated(const gfx::ScrollOffset& scroll_offset); | 561 void OnScrollOffsetAnimated(const gfx::ScrollOffset& scroll_offset); |
579 void OnTransformIsCurrentlyAnimatingChanged(bool is_animating); | 562 void OnTransformIsCurrentlyAnimatingChanged(bool is_animating); |
580 void OnTransformIsPotentiallyAnimatingChanged(bool is_animating); | 563 void OnTransformIsPotentiallyAnimatingChanged(bool is_animating); |
581 void OnOpacityIsCurrentlyAnimatingChanged(bool is_currently_animating); | 564 void OnOpacityIsCurrentlyAnimatingChanged(bool is_currently_animating); |
582 void OnOpacityIsPotentiallyAnimatingChanged(bool has_potential_animation); | 565 void OnOpacityIsPotentiallyAnimatingChanged(bool has_potential_animation); |
583 | 566 |
| 567 bool FilterIsAnimating() const; |
| 568 bool TransformIsAnimating() const; |
| 569 bool ScrollOffsetAnimationWasInterrupted() const; |
| 570 bool HasOnlyTranslationTransforms() const; |
| 571 |
| 572 void AddScrollChild(Layer* child); |
| 573 void RemoveScrollChild(Layer* child); |
| 574 |
| 575 void AddClipChild(Layer* child); |
| 576 void RemoveClipChild(Layer* child); |
| 577 |
584 void SetParent(Layer* layer); | 578 void SetParent(Layer* layer); |
585 bool DescendantIsFixedToContainerLayer() const; | 579 bool DescendantIsFixedToContainerLayer() const; |
586 | 580 |
587 // This should only be called from RemoveFromParent(). | 581 // This should only be called from RemoveFromParent(). |
588 void RemoveChildOrDependent(Layer* child); | 582 void RemoveChildOrDependent(Layer* child); |
589 | 583 |
590 // If this layer has a scroll parent, it removes |this| from its list of | 584 // If this layer has a scroll parent, it removes |this| from its list of |
591 // scroll children. | 585 // scroll children. |
592 void RemoveFromScrollTree(); | 586 void RemoveFromScrollTree(); |
593 | 587 |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
724 // These all act like draw properties, so don't need push properties. | 718 // These all act like draw properties, so don't need push properties. |
725 gfx::Rect visible_layer_rect_; | 719 gfx::Rect visible_layer_rect_; |
726 size_t num_unclipped_descendants_; | 720 size_t num_unclipped_descendants_; |
727 | 721 |
728 DISALLOW_COPY_AND_ASSIGN(Layer); | 722 DISALLOW_COPY_AND_ASSIGN(Layer); |
729 }; | 723 }; |
730 | 724 |
731 } // namespace cc | 725 } // namespace cc |
732 | 726 |
733 #endif // CC_LAYERS_LAYER_H_ | 727 #endif // CC_LAYERS_LAYER_H_ |
OLD | NEW |