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
|