Bug 1883861 - Part 1: Move visitMemoryBarrier into the common CodeGenerator file...
[gecko.git] / layout / style / LayerAnimationInfo.h
blob8125d1442a550a668d1a9005bbd1daeb172f0c36
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #ifndef mozilla_LayerAnimationInfo_h
8 #define mozilla_LayerAnimationInfo_h
10 #include "nsChangeHint.h"
11 #include "nsCSSPropertyID.h"
12 #include "nsCSSPropertyIDSet.h"
13 #include "nsDisplayItemTypes.h" // For nsDisplayItem::Type
14 #include "mozilla/Array.h"
16 namespace mozilla {
18 struct LayerAnimationInfo {
19 // Returns the corresponding display item type for |aProperty| when it is
20 // animated on the compositor.
21 // Returns DisplayItemType::TYPE_ZERO if |aProperty| cannot be animated on the
22 // compositor.
23 static DisplayItemType GetDisplayItemTypeForProperty(
24 nsCSSPropertyID aProperty);
26 // Returns the corresponding CSS properties for |aDisplayItemType|.
28 // This function works only for display items tied to CSS properties that can
29 // be animated on the compositor.
30 static inline const nsCSSPropertyIDSet& GetCSSPropertiesFor(
31 DisplayItemType aDisplayItemType) {
32 static const nsCSSPropertyIDSet transformProperties =
33 nsCSSPropertyIDSet::TransformLikeProperties();
34 static const nsCSSPropertyIDSet opacityProperties =
35 nsCSSPropertyIDSet{eCSSProperty_opacity};
36 static const nsCSSPropertyIDSet backgroundColorProperties =
37 nsCSSPropertyIDSet{eCSSProperty_background_color};
38 static const nsCSSPropertyIDSet empty = nsCSSPropertyIDSet();
40 switch (aDisplayItemType) {
41 case DisplayItemType::TYPE_BACKGROUND_COLOR:
42 return backgroundColorProperties;
43 case DisplayItemType::TYPE_OPACITY:
44 return opacityProperties;
45 case DisplayItemType::TYPE_TRANSFORM:
46 return transformProperties;
47 default:
48 MOZ_ASSERT_UNREACHABLE(
49 "Should not be called for display item types "
50 "that are not able to have animations on the "
51 "compositor");
52 return empty;
56 // Returns the appropriate change hint for updating the display item for
57 // |aDisplayItemType|.
59 // This function works only for display items tied to CSS properties that can
60 // be animated on the compositor.
61 static inline nsChangeHint GetChangeHintFor(
62 DisplayItemType aDisplayItemType) {
63 switch (aDisplayItemType) {
64 case DisplayItemType::TYPE_BACKGROUND_COLOR:
65 return nsChangeHint_RepaintFrame;
66 case DisplayItemType::TYPE_OPACITY:
67 return nsChangeHint_UpdateOpacityLayer;
68 case DisplayItemType::TYPE_TRANSFORM:
69 return nsChangeHint_UpdateTransformLayer;
70 default:
71 MOZ_ASSERT_UNREACHABLE(
72 "Should not be called for display item types "
73 "that are not able to have animations on the "
74 "compositor");
75 return nsChangeHint(0);
79 // An array of DisplayItemType corresponding to the display item that we can
80 // animate on the compositor.
82 // This is used to look up the appropriate change hint in cases when
83 // animations need updating but no other change hint is generated.
84 static const Array<DisplayItemType,
85 nsCSSPropertyIDSet::CompositorAnimatableDisplayItemCount()>
86 sDisplayItemTypes;
89 } // namespace mozilla
91 #endif /* !defined(mozilla_LayerAnimationInfo_h) */