| // 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 SKY_ENGINE_PLATFORM_GRAPHICS_COMPOSITINGREASONS_H_ |
| #define SKY_ENGINE_PLATFORM_GRAPHICS_COMPOSITINGREASONS_H_ |
| |
| #include <stdint.h> |
| #include "sky/engine/platform/PlatformExport.h" |
| #include "sky/engine/wtf/MathExtras.h" |
| |
| namespace blink { |
| |
| const uint64_t CompositingReasonNone = 0; |
| const uint64_t CompositingReasonAll = ~static_cast<uint64_t>(0); |
| |
| // FIXME(sky): Get rid of all this. |
| |
| // 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 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 CompositingReasonOverflowScrollingTouch = UINT64_C(1) << 9; |
| const uint64_t CompositingReasonOverflowScrollingParent = UINT64_C(1) << 10; |
| const uint64_t CompositingReasonOutOfFlowClipping = UINT64_C(1) << 11; |
| const uint64_t CompositingReasonWillChangeCompositingHint = UINT64_C(1) << 13; |
| |
| // Overlap reasons that require knowing what's behind you in paint-order before knowing the answer |
| const uint64_t CompositingReasonAssumedOverlap = UINT64_C(1) << 14; |
| const uint64_t CompositingReasonOverlap = UINT64_C(1) << 15; |
| const uint64_t CompositingReasonNegativeZIndexChildren = UINT64_C(1) << 16; |
| const uint64_t CompositingReasonScrollsWithRespectToSquashingLayer = UINT64_C(1) << 17; |
| const uint64_t CompositingReasonSquashingClippingContainerMismatch = UINT64_C(1) << 19; |
| const uint64_t CompositingReasonSquashingOpacityAncestorMismatch = UINT64_C(1) << 20; |
| const uint64_t CompositingReasonSquashingTransformAncestorMismatch = UINT64_C(1) << 21; |
| const uint64_t CompositingReasonSquashingFilterAncestorMismatch = UINT64_C(1) << 22; |
| const uint64_t CompositingReasonSquashingWouldBreakPaintOrder = UINT64_C(1) << 23; |
| const uint64_t CompositingReasonSquashingVideoIsDisallowed = UINT64_C(1) << 24; |
| const uint64_t CompositingReasonSquashedLayerClipsCompositingDescendants = UINT64_C(1) << 25; |
| |
| // Subtree reasons that require knowing what the status of your subtree is before knowing the answer |
| const uint64_t CompositingReasonTransformWithCompositedDescendants = UINT64_C(1) << 28; |
| const uint64_t CompositingReasonOpacityWithCompositedDescendants = UINT64_C(1) << 29; |
| const uint64_t CompositingReasonMaskWithCompositedDescendants = UINT64_C(1) << 30; |
| const uint64_t CompositingReasonFilterWithCompositedDescendants = UINT64_C(1) << 32; |
| // TODO(sky): Unused 33 |
| const uint64_t CompositingReasonClipsCompositingDescendants = UINT64_C(1) << 34; |
| const uint64_t CompositingReasonPerspectiveWith3DDescendants = UINT64_C(1) << 35; |
| const uint64_t CompositingReasonPreserve3DWith3DDescendants = UINT64_C(1) << 36; |
| // TODO(sky): Unused 37 & 38 |
| |
| // The root layer is a special case that may be forced to be a layer, but also it needs to be |
| // a layer if anything else in the subtree is composited. |
| const uint64_t CompositingReasonRoot = UINT64_C(1) << 39; |
| |
| // CompositedLayerMapping internal hierarchy reasons |
| const uint64_t CompositingReasonLayerForAncestorClip = UINT64_C(1) << 40; |
| const uint64_t CompositingReasonLayerForDescendantClip = UINT64_C(1) << 41; |
| const uint64_t CompositingReasonLayerForPerspective = UINT64_C(1) << 42; |
| // FIXME(sky): 43 is unused. |
| // FIXME(sky): 44 is unused. |
| const uint64_t CompositingReasonLayerForOverflowControlsHost = UINT64_C(1) << 45; |
| // FIXME(sky): 46 is unused. |
| const uint64_t CompositingReasonLayerForSquashingContents = UINT64_C(1) << 49; |
| const uint64_t CompositingReasonLayerForSquashingContainer = UINT64_C(1) << 50; |
| const uint64_t CompositingReasonLayerForForeground = UINT64_C(1) << 51; |
| const uint64_t CompositingReasonLayerForBackground = UINT64_C(1) << 52; |
| const uint64_t CompositingReasonLayerForMask = UINT64_C(1) << 53; |
| const uint64_t CompositingReasonLayerForClippingMask = UINT64_C(1) << 54; |
| // FIXME(sky): 55 is unused. |
| |
| // Composited elements with inline transforms trigger assumed overlap so that |
| // we can update their transforms quickly. |
| const uint64_t CompositingReasonInlineTransform = UINT64_C(1) << 56; |
| |
| // Various combinations of compositing reasons are defined here also, for more intutive and faster bitwise logic. |
| const uint64_t CompositingReasonComboAllDirectReasons = |
| CompositingReason3DTransform |
| | CompositingReasonVideo |
| | CompositingReasonCanvas |
| | CompositingReasonIFrame |
| | CompositingReasonBackfaceVisibilityHidden |
| | CompositingReasonActiveAnimation |
| | CompositingReasonTransitionProperty |
| | CompositingReasonOverflowScrollingTouch |
| | CompositingReasonOverflowScrollingParent |
| | CompositingReasonOutOfFlowClipping |
| | CompositingReasonWillChangeCompositingHint; |
| |
| const uint64_t CompositingReasonComboAllDirectStyleDeterminedReasons = |
| CompositingReason3DTransform |
| | CompositingReasonBackfaceVisibilityHidden |
| | CompositingReasonActiveAnimation |
| | CompositingReasonTransitionProperty |
| | CompositingReasonWillChangeCompositingHint; |
| |
| const uint64_t CompositingReasonComboCompositedDescendants = |
| CompositingReasonTransformWithCompositedDescendants |
| | CompositingReasonOpacityWithCompositedDescendants |
| | CompositingReasonMaskWithCompositedDescendants |
| | CompositingReasonFilterWithCompositedDescendants |
| | CompositingReasonClipsCompositingDescendants; |
| |
| const uint64_t CompositingReasonCombo3DDescendants = |
| CompositingReasonPreserve3DWith3DDescendants |
| | CompositingReasonPerspectiveWith3DDescendants; |
| |
| const uint64_t CompositingReasonComboAllStyleDeterminedReasons = |
| CompositingReasonComboAllDirectStyleDeterminedReasons |
| | CompositingReasonComboCompositedDescendants |
| | CompositingReasonCombo3DDescendants |
| | CompositingReasonInlineTransform; |
| |
| const uint64_t CompositingReasonComboReasonsThatRequireOwnBacking = |
| CompositingReasonComboAllDirectReasons |
| | CompositingReasonOverlap |
| | CompositingReasonAssumedOverlap |
| | CompositingReasonNegativeZIndexChildren |
| | CompositingReasonScrollsWithRespectToSquashingLayer |
| | CompositingReasonSquashingClippingContainerMismatch |
| | CompositingReasonSquashingOpacityAncestorMismatch |
| | CompositingReasonSquashingTransformAncestorMismatch |
| | CompositingReasonSquashingFilterAncestorMismatch |
| | CompositingReasonSquashingWouldBreakPaintOrder |
| | CompositingReasonSquashingVideoIsDisallowed |
| | CompositingReasonSquashedLayerClipsCompositingDescendants |
| | CompositingReasonTransformWithCompositedDescendants |
| | CompositingReasonOpacityWithCompositedDescendants |
| | CompositingReasonMaskWithCompositedDescendants |
| | CompositingReasonFilterWithCompositedDescendants |
| | CompositingReasonPreserve3DWith3DDescendants; // preserve-3d has to create backing store to ensure that 3d-transformed elements intersect. |
| |
| 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 { |
| CompositingReasons reason; |
| const char* shortName; |
| const char* description; |
| }; |
| |
| PLATFORM_EXPORT extern const CompositingReasonStringMap kCompositingReasonStringMap[]; |
| PLATFORM_EXPORT extern size_t kNumberOfCompositingReasons; |
| |
| } // namespace blink |
| |
| #endif // SKY_ENGINE_PLATFORM_GRAPHICS_COMPOSITINGREASONS_H_ |