1// Copyright 2013 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#ifndef CompositingReasons_h
6#define CompositingReasons_h
7
8#include "wtf/MathExtras.h"
9
10namespace WebCore {
11
12const uint64_t CompositingReasonNone                                   = 0;
13
14// Intrinsic reasons that can be known right away by the layer
15const uint64_t CompositingReason3DTransform                            = UINT64_C(1) << 0;
16const uint64_t CompositingReasonVideo                                  = UINT64_C(1) << 1;
17const uint64_t CompositingReasonCanvas                                 = UINT64_C(1) << 2;
18const uint64_t CompositingReasonPlugin                                 = UINT64_C(1) << 3;
19const uint64_t CompositingReasonIFrame                                 = UINT64_C(1) << 4;
20const uint64_t CompositingReasonBackfaceVisibilityHidden               = UINT64_C(1) << 5;
21const uint64_t CompositingReasonAnimation                              = UINT64_C(1) << 6;
22const uint64_t CompositingReasonFilters                                = UINT64_C(1) << 7;
23const uint64_t CompositingReasonPositionFixed                          = UINT64_C(1) << 8;
24const uint64_t CompositingReasonPositionSticky                         = UINT64_C(1) << 9;
25const uint64_t CompositingReasonOverflowScrollingTouch                 = UINT64_C(1) << 10;
26const uint64_t CompositingReasonBlending                               = UINT64_C(1) << 11;
27
28// Overlap reasons that require knowing what's behind you in paint-order before knowing the answer
29const uint64_t CompositingReasonAssumedOverlap                         = UINT64_C(1) << 12;
30const uint64_t CompositingReasonOverlap                                = UINT64_C(1) << 13;
31const uint64_t CompositingReasonNegativeZIndexChildren                 = UINT64_C(1) << 14;
32
33// Subtree reasons that require knowing what the status of your subtree is before knowing the answer
34const uint64_t CompositingReasonTransformWithCompositedDescendants     = UINT64_C(1) << 15;
35const uint64_t CompositingReasonOpacityWithCompositedDescendants       = UINT64_C(1) << 16;
36const uint64_t CompositingReasonMaskWithCompositedDescendants          = UINT64_C(1) << 17;
37const uint64_t CompositingReasonReflectionWithCompositedDescendants    = UINT64_C(1) << 18;
38const uint64_t CompositingReasonFilterWithCompositedDescendants        = UINT64_C(1) << 19;
39const uint64_t CompositingReasonBlendingWithCompositedDescendants      = UINT64_C(1) << 20;
40const uint64_t CompositingReasonClipsCompositingDescendants            = UINT64_C(1) << 21;
41const uint64_t CompositingReasonPerspective                            = UINT64_C(1) << 22;
42const uint64_t CompositingReasonPreserve3D                             = UINT64_C(1) << 23;
43const uint64_t CompositingReasonReflectionOfCompositedParent           = UINT64_C(1) << 24;
44
45// The root layer is a special case that may be forced to be a layer, but also it needs to be
46// a layer if anything else in the subtree is composited.
47const uint64_t CompositingReasonRoot                                   = UINT64_C(1) << 25;
48
49// RenderLayerBacking internal hierarchy reasons
50const uint64_t CompositingReasonLayerForClip                           = UINT64_C(1) << 26;
51const uint64_t CompositingReasonLayerForScrollbar                      = UINT64_C(1) << 27;
52const uint64_t CompositingReasonLayerForScrollingContainer             = UINT64_C(1) << 28;
53const uint64_t CompositingReasonLayerForForeground                     = UINT64_C(1) << 29;
54const uint64_t CompositingReasonLayerForBackground                     = UINT64_C(1) << 30;
55const uint64_t CompositingReasonLayerForMask                           = UINT64_C(1) << 31;
56
57// FIXME: the following compositing reasons need to be re-organized to fit with categories
58// used in all the other reasons above.
59const uint64_t CompositingReasonLayerForVideoOverlay                   = UINT64_C(1) << 32;
60
61// Note: if you add more reasons here, you will need to update WebCompositingReasons as well.
62typedef uint64_t CompositingReasons;
63
64
65} // namespace WebCore
66
67#endif // CompositingReasons_h
68