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
3// found in the LICENSE file.
4
5#include "config.h"
6#include "platform/graphics/CompositingReasons.h"
7
8#include "wtf/StdLibExtras.h"
9
10namespace blink {
11
12const CompositingReasonStringMap kCompositingReasonStringMap[] = {
13    { CompositingReasonNone,
14        "Unknown",
15        "No reason given" },
16    { CompositingReason3DTransform,
17        "transform3D",
18        "Has a 3d transform" },
19    { CompositingReasonVideo,
20        "video",
21        "Is an accelerated video" },
22    { CompositingReasonCanvas,
23        "canvas",
24        "Is an accelerated canvas" },
25    { CompositingReasonPlugin,
26        "plugin",
27        "Is an accelerated plugin" },
28    { CompositingReasonIFrame,
29        "iFrame",
30        "Is an accelerated iFrame" },
31    { CompositingReasonBackfaceVisibilityHidden,
32        "backfaceVisibilityHidden",
33        "Has backface-visibility: hidden" },
34    { CompositingReasonActiveAnimation,
35        "activeAnimation",
36        "Has an active accelerated animation or transition" },
37    { CompositingReasonTransitionProperty,
38        "transitionProperty",
39        "Has an acceleratable transition property (active or inactive)" },
40    { CompositingReasonPositionFixed,
41        "positionFixed",
42        "Is fixed position" },
43    { CompositingReasonOverflowScrollingTouch,
44        "overflowScrollingTouch",
45        "Is a scrollable overflow element" },
46    { CompositingReasonOverflowScrollingParent,
47        "overflowScrollingParent",
48        "Scroll parent is not an ancestor" },
49    { CompositingReasonOutOfFlowClipping,
50        "outOfFlowClipping",
51        "Has clipping ancestor" },
52    { CompositingReasonVideoOverlay,
53        "videoOverlay",
54        "Is overlay controls for video" },
55    { CompositingReasonWillChangeCompositingHint,
56        "willChange",
57        "Has a will-change compositing hint" },
58    { CompositingReasonAssumedOverlap,
59        "assumedOverlap",
60        "Might overlap other composited content" },
61    { CompositingReasonOverlap,
62        "overlap",
63        "Overlaps other composited content" },
64    { CompositingReasonNegativeZIndexChildren,
65        "negativeZIndexChildren",
66        "Parent with composited negative z-index content" },
67    { CompositingReasonScrollsWithRespectToSquashingLayer,
68        "scrollsWithRespectToSquashingLayer",
69        "Cannot be squashed since this layer scrolls with respect to the squashing layer" },
70    { CompositingReasonSquashingSparsityExceeded,
71        "squashingSparsityExceeded",
72        "Cannot be squashed as the squashing layer would become too sparse" },
73    { CompositingReasonSquashingClippingContainerMismatch,
74        "squashingClippingContainerMismatch",
75        "Cannot be squashed because this layer has a different clipping container than the squashing layer" },
76    { CompositingReasonSquashingOpacityAncestorMismatch,
77        "squashingOpacityAncestorMismatch",
78        "Cannot be squashed because this layer has a different opacity ancestor than the squashing layer" },
79    { CompositingReasonSquashingTransformAncestorMismatch,
80        "squashingTransformAncestorMismatch",
81        "Cannot be squashed because this layer has a different transform ancestor than the squashing layer" },
82    { CompositingReasonSquashingFilterMismatch,
83        "squashingFilterAncestorMismatch",
84        "Cannot be squashed because this layer has a different filter ancestor than the squashing layer, or this layer has a filter" },
85    { CompositingReasonSquashingWouldBreakPaintOrder,
86        "squashingWouldBreakPaintOrder",
87        "Cannot be squashed without breaking paint order" },
88    { CompositingReasonSquashingVideoIsDisallowed,
89        "squashingVideoIsDisallowed",
90        "Squashing video is not supported" },
91    { CompositingReasonSquashedLayerClipsCompositingDescendants,
92        "squashedLayerClipsCompositingDescendants",
93        "Squashing a layer that clips composited descendants is not supported." },
94    { CompositingReasonSquashingRenderPartIsDisallowed,
95        "squashingRenderPartIsDisallowed",
96        "Squashing a frame, iframe or plugin is not supported." },
97    { CompositingReasonSquashingReflectionIsDisallowed,
98        "squashingReflectionDisallowed",
99        "Squashing a element with a reflection is not supported." },
100    { CompositingReasonSquashingBlendingIsDisallowed,
101        "squashingBlendingDisallowed",
102        "Squashing a layer with blending is not supported." },
103    { CompositingReasonTransformWithCompositedDescendants,
104        "transformWithCompositedDescendants",
105        "Has a transform that needs to be known by compositor because of composited descendants" },
106    { CompositingReasonOpacityWithCompositedDescendants,
107        "opacityWithCompositedDescendants",
108        "Has opacity that needs to be applied by compositor because of composited descendants" },
109    { CompositingReasonMaskWithCompositedDescendants,
110        "maskWithCompositedDescendants",
111        "Has a mask that needs to be known by compositor because of composited descendants" },
112    { CompositingReasonReflectionWithCompositedDescendants,
113        "reflectionWithCompositedDescendants",
114        "Has a reflection that needs to be known by compositor because of composited descendants" },
115    { CompositingReasonFilterWithCompositedDescendants,
116        "filterWithCompositedDescendants",
117        "Has a filter effect that needs to be known by compositor because of composited descendants" },
118    { CompositingReasonBlendingWithCompositedDescendants,
119        "blendingWithCompositedDescendants",
120        "Has a blenidng effect that needs to be known by compositor because of composited descendants" },
121    { CompositingReasonClipsCompositingDescendants,
122        "clipsCompositingDescendants",
123        "Has a clip that needs to be known by compositor because of composited descendants" },
124    { CompositingReasonPerspectiveWith3DDescendants,
125        "perspectiveWith3DDescendants",
126        "Has a perspective transform that needs to be known by compositor because of 3d descendants" },
127    { CompositingReasonPreserve3DWith3DDescendants,
128        "preserve3DWith3DDescendants",
129        "Has a preserves-3d property that needs to be known by compositor because of 3d descendants" },
130    { CompositingReasonReflectionOfCompositedParent,
131        "reflectionOfCompositedParent",
132        "Is a reflection of a composited layer" },
133    { CompositingReasonIsolateCompositedDescendants,
134        "isolateCompositedDescendants",
135        "Should isolate descendants to apply a blend effect" },
136    { CompositingReasonRoot,
137        "root",
138        "Is the root layer" },
139    { CompositingReasonLayerForAncestorClip,
140        "layerForAncestorClip",
141        "Secondary layer, applies a clip due to a sibling in the compositing tree" },
142    { CompositingReasonLayerForDescendantClip,
143        "layerForDescendantClip",
144        "Secondary layer, to clip descendants of the owning layer" },
145    { CompositingReasonLayerForPerspective,
146        "layerForPerspective",
147        "Secondary layer, to house the perspective transform for all descendants" },
148    { CompositingReasonLayerForHorizontalScrollbar,
149        "layerForHorizontalScrollbar",
150        "Secondary layer, the horizontal scrollbar layer" },
151    { CompositingReasonLayerForVerticalScrollbar,
152        "layerForVerticalScrollbar",
153        "Secondary layer, the vertical scrollbar layer" },
154    { CompositingReasonLayerForOverflowControlsHost,
155        "layerForOverflowControlsHost",
156        "Secondary layer, the overflow controls host layer" },
157    { CompositingReasonLayerForScrollCorner,
158        "layerForScrollCorner",
159        "Secondary layer, the scroll corner layer" },
160    { CompositingReasonLayerForScrollingContents,
161        "layerForScrollingContents",
162        "Secondary layer, to house contents that can be scrolled" },
163    { CompositingReasonLayerForScrollingContainer,
164        "layerForScrollingContainer",
165        "Secondary layer, used to position the scolling contents while scrolling" },
166    { CompositingReasonLayerForSquashingContents,
167        "layerForSquashingContents",
168        "Secondary layer, home for a group of squashable content" },
169    { CompositingReasonLayerForSquashingContainer,
170        "layerForSquashingContainer",
171        "Secondary layer, no-op layer to place the squashing layer correctly in the composited layer tree" },
172    { CompositingReasonLayerForForeground,
173        "layerForForeground",
174        "Secondary layer, to contain any normal flow and positive z-index contents on top of a negative z-index layer" },
175    { CompositingReasonLayerForBackground,
176        "layerForBackground",
177        "Secondary layer, to contain acceleratable background content" },
178    { CompositingReasonLayerForMask,
179        "layerForMask",
180        "Secondary layer, to contain the mask contents" },
181    { CompositingReasonLayerForClippingMask,
182        "layerForClippingMask",
183        "Secondary layer, for clipping mask" },
184    { CompositingReasonLayerForScrollingBlockSelection,
185        "layerForScrollingBlockSelection",
186        "Secondary layer, to house block selection gaps for composited scrolling with no scrolling contents" },
187    { CompositingReasonInlineTransform,
188        "inlineTransform",
189        "Has an inline transform, which causes subsequent layers to assume overlap" },
190};
191
192size_t kNumberOfCompositingReasons = WTF_ARRAY_LENGTH(kCompositingReasonStringMap);
193
194} // namespace blink
195