File: CompositingReasons.h

package info (click to toggle)
chromium-browser 57.0.2987.98-1~deb8u1
  • links: PTS, VCS
  • area: main
  • in suites: jessie
  • size: 2,637,852 kB
  • ctags: 2,544,394
  • sloc: cpp: 12,815,961; ansic: 3,676,222; python: 1,147,112; asm: 526,608; java: 523,212; xml: 286,794; perl: 92,654; sh: 86,408; objc: 73,271; makefile: 27,698; cs: 18,487; yacc: 13,031; tcl: 12,957; pascal: 4,875; ml: 4,716; lex: 3,904; sql: 3,862; ruby: 1,982; lisp: 1,508; php: 1,368; exp: 404; awk: 325; csh: 117; jsp: 39; sed: 37
file content (191 lines) | stat: -rw-r--r-- 10,000 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CompositingReasons_h
#define CompositingReasons_h

#include "platform/PlatformExport.h"
#include "wtf/Allocator.h"
#include "wtf/text/WTFString.h"
#include <stdint.h>

namespace blink {

const uint64_t CompositingReasonNone = 0;
const uint64_t CompositingReasonAll = ~static_cast<uint64_t>(0);

// Intrinsic reasons that can be known right away by the layer
const uint64_t CompositingReason3DTransform = UINT64_C(1) << 0;
const uint64_t CompositingReasonVideo = UINT64_C(1) << 1;
const uint64_t CompositingReasonCanvas = UINT64_C(1) << 2;
const uint64_t CompositingReasonPlugin = UINT64_C(1) << 3;
const uint64_t CompositingReasonIFrame = UINT64_C(1) << 4;
const uint64_t CompositingReasonBackfaceVisibilityHidden = UINT64_C(1) << 5;
const uint64_t CompositingReasonActiveAnimation = UINT64_C(1) << 6;
const uint64_t CompositingReasonTransitionProperty = UINT64_C(1) << 7;
const uint64_t CompositingReasonScrollDependentPosition = UINT64_C(1) << 8;
const uint64_t CompositingReasonOverflowScrollingTouch = UINT64_C(1) << 9;
const uint64_t CompositingReasonOverflowScrollingParent = UINT64_C(1) << 10;
const uint64_t CompositingReasonOutOfFlowClipping = UINT64_C(1) << 11;
const uint64_t CompositingReasonVideoOverlay = UINT64_C(1) << 12;
const uint64_t CompositingReasonWillChangeCompositingHint = UINT64_C(1) << 13;
const uint64_t CompositingReasonBackdropFilter = UINT64_C(1) << 14;

// Overlap reasons that require knowing what's behind you in paint-order before
// knowing the answer.
const uint64_t CompositingReasonAssumedOverlap = UINT64_C(1) << 15;
const uint64_t CompositingReasonOverlap = UINT64_C(1) << 16;
const uint64_t CompositingReasonNegativeZIndexChildren = UINT64_C(1) << 17;
const uint64_t CompositingReasonSquashingDisallowed = UINT64_C(1) << 18;

// Subtree reasons that require knowing what the status of your subtree is
// before knowing the answer.
const uint64_t CompositingReasonTransformWithCompositedDescendants = UINT64_C(1)
                                                                     << 19;
const uint64_t CompositingReasonOpacityWithCompositedDescendants = UINT64_C(1)
                                                                   << 20;
const uint64_t CompositingReasonMaskWithCompositedDescendants = UINT64_C(1)
                                                                << 21;
const uint64_t CompositingReasonReflectionWithCompositedDescendants =
    UINT64_C(1) << 22;
const uint64_t CompositingReasonFilterWithCompositedDescendants = UINT64_C(1)
                                                                  << 23;
const uint64_t CompositingReasonBlendingWithCompositedDescendants = UINT64_C(1)
                                                                    << 24;
const uint64_t CompositingReasonClipsCompositingDescendants = UINT64_C(1) << 25;
const uint64_t CompositingReasonPerspectiveWith3DDescendants = UINT64_C(1)
                                                               << 26;
const uint64_t CompositingReasonPreserve3DWith3DDescendants = UINT64_C(1) << 27;
const uint64_t CompositingReasonReflectionOfCompositedParent = UINT64_C(1)
                                                               << 28;
const uint64_t CompositingReasonIsolateCompositedDescendants = UINT64_C(1)
                                                               << 29;
const uint64_t CompositingReasonPositionFixedWithCompositedDescendants =
    UINT64_C(1) << 30;

// The root layer is a special case. It may be forced to be a layer, but it also
// needs to be a layer if anything else in the subtree is composited.
const uint64_t CompositingReasonRoot = UINT64_C(1) << 31;

// CompositedLayerMapping internal hierarchy reasons
const uint64_t CompositingReasonLayerForAncestorClip = UINT64_C(1) << 32;
const uint64_t CompositingReasonLayerForDescendantClip = UINT64_C(1) << 33;
const uint64_t CompositingReasonLayerForPerspective = UINT64_C(1) << 34;
const uint64_t CompositingReasonLayerForHorizontalScrollbar = UINT64_C(1) << 35;
const uint64_t CompositingReasonLayerForVerticalScrollbar = UINT64_C(1) << 36;
const uint64_t CompositingReasonLayerForOverflowControlsHost = UINT64_C(1)
                                                               << 37;
const uint64_t CompositingReasonLayerForScrollCorner = UINT64_C(1) << 38;
const uint64_t CompositingReasonLayerForScrollingContents = UINT64_C(1) << 39;
const uint64_t CompositingReasonLayerForScrollingContainer = UINT64_C(1) << 40;
const uint64_t CompositingReasonLayerForSquashingContents = UINT64_C(1) << 41;
const uint64_t CompositingReasonLayerForSquashingContainer = UINT64_C(1) << 42;
const uint64_t CompositingReasonLayerForForeground = UINT64_C(1) << 43;
const uint64_t CompositingReasonLayerForBackground = UINT64_C(1) << 44;
const uint64_t CompositingReasonLayerForMask = UINT64_C(1) << 45;
const uint64_t CompositingReasonLayerForClippingMask = UINT64_C(1) << 46;
const uint64_t CompositingReasonLayerForAncestorClippingMask = UINT64_C(1)
                                                               << 47;
const uint64_t CompositingReasonLayerForScrollingBlockSelection = UINT64_C(1)
                                                                  << 48;
// Composited layer painted on top of all other layers as decoration
const uint64_t CompositingReasonLayerForDecoration = UINT64_C(1) << 49;

// Composited elements with inline transforms trigger assumed overlap so that
// we can update their transforms quickly.
const uint64_t CompositingReasonInlineTransform = UINT64_C(1) << 50;

const uint64_t CompositingReasonCompositorProxy = UINT64_C(1) << 51;

// Various combinations of compositing reasons are defined here also, for more
// intutive and faster bitwise logic.
const uint64_t CompositingReasonComboAllDirectReasons =
    CompositingReason3DTransform | CompositingReasonVideo |
    CompositingReasonCanvas | CompositingReasonPlugin |
    CompositingReasonIFrame | CompositingReasonBackfaceVisibilityHidden |
    CompositingReasonActiveAnimation | CompositingReasonTransitionProperty |
    CompositingReasonScrollDependentPosition |
    CompositingReasonOverflowScrollingTouch |
    CompositingReasonOverflowScrollingParent |
    CompositingReasonOutOfFlowClipping | CompositingReasonVideoOverlay |
    CompositingReasonWillChangeCompositingHint |
    CompositingReasonCompositorProxy | CompositingReasonBackdropFilter;

const uint64_t CompositingReasonComboAllDirectStyleDeterminedReasons =
    CompositingReason3DTransform | CompositingReasonBackfaceVisibilityHidden |
    CompositingReasonActiveAnimation | CompositingReasonTransitionProperty |
    CompositingReasonWillChangeCompositingHint |
    CompositingReasonCompositorProxy | CompositingReasonBackdropFilter;

const uint64_t CompositingReasonComboCompositedDescendants =
    CompositingReasonTransformWithCompositedDescendants |
    CompositingReasonIsolateCompositedDescendants |
    CompositingReasonOpacityWithCompositedDescendants |
    CompositingReasonMaskWithCompositedDescendants |
    CompositingReasonFilterWithCompositedDescendants |
    CompositingReasonBlendingWithCompositedDescendants |
    CompositingReasonReflectionWithCompositedDescendants |
    CompositingReasonClipsCompositingDescendants |
    CompositingReasonPositionFixedWithCompositedDescendants;

const uint64_t CompositingReasonCombo3DDescendants =
    CompositingReasonPreserve3DWith3DDescendants |
    CompositingReasonPerspectiveWith3DDescendants;

const uint64_t CompositingReasonComboAllStyleDeterminedReasons =
    CompositingReasonComboAllDirectStyleDeterminedReasons |
    CompositingReasonComboCompositedDescendants |
    CompositingReasonCombo3DDescendants | CompositingReasonInlineTransform;

const uint64_t CompositingReasonComboReasonsThatRequireOwnBacking =
    CompositingReasonComboAllDirectReasons | CompositingReasonOverlap |
    CompositingReasonAssumedOverlap | CompositingReasonNegativeZIndexChildren |
    CompositingReasonSquashingDisallowed |
    CompositingReasonTransformWithCompositedDescendants |
    CompositingReasonOpacityWithCompositedDescendants |
    CompositingReasonMaskWithCompositedDescendants |
    CompositingReasonFilterWithCompositedDescendants |
    CompositingReasonBlendingWithCompositedDescendants |
    CompositingReasonIsolateCompositedDescendants |
    CompositingReasonPreserve3DWith3DDescendants |  // preserve-3d has to create
                                                    // a backing store to ensure
                                                    // that 3d-transformed
                                                    // elements intersect.
    CompositingReasonBackdropFilter |
    CompositingReasonPositionFixedWithCompositedDescendants;

const uint64_t CompositingReasonComboSquashableReasons =
    CompositingReasonOverlap | CompositingReasonAssumedOverlap |
    CompositingReasonOverflowScrollingParent;

typedef uint64_t CompositingReasons;

// Any reasons other than overlap or assumed overlap will require the layer to
// be separately compositing.
inline bool requiresCompositing(CompositingReasons reasons) {
  return reasons & ~CompositingReasonComboSquashableReasons;
}

// If the layer has overlap or assumed overlap, but no other reasons, then it
// should be squashed.
inline bool requiresSquashing(CompositingReasons reasons) {
  return !requiresCompositing(reasons) &&
         (reasons & CompositingReasonComboSquashableReasons);
}

struct CompositingReasonStringMap {
  STACK_ALLOCATED();
  CompositingReasons reason;
  const char* shortName;
  const char* description;
};

PLATFORM_EXPORT extern const CompositingReasonStringMap
    kCompositingReasonStringMap[];
PLATFORM_EXPORT extern const size_t kNumberOfCompositingReasons;
PLATFORM_EXPORT String compositingReasonsAsString(CompositingReasons);

}  // namespace blink

#endif  // CompositingReasons_h