summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/platform/graphics/compositing_reasons.cc
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2018-05-15 10:20:33 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2018-05-15 10:28:57 +0000
commitd17ea114e5ef69ad5d5d7413280a13e6428098aa (patch)
tree2c01a75df69f30d27b1432467cfe7c1467a498da /chromium/third_party/blink/renderer/platform/graphics/compositing_reasons.cc
parent8c5c43c7b138c9b4b0bf56d946e61d3bbc111bec (diff)
downloadqtwebengine-chromium-d17ea114e5ef69ad5d5d7413280a13e6428098aa.tar.gz
BASELINE: Update Chromium to 67.0.3396.47
Change-Id: Idcb1341782e417561a2473eeecc82642dafda5b7 Reviewed-by: Michal Klocek <michal.klocek@qt.io>
Diffstat (limited to 'chromium/third_party/blink/renderer/platform/graphics/compositing_reasons.cc')
-rw-r--r--chromium/third_party/blink/renderer/platform/graphics/compositing_reasons.cc209
1 files changed, 209 insertions, 0 deletions
diff --git a/chromium/third_party/blink/renderer/platform/graphics/compositing_reasons.cc b/chromium/third_party/blink/renderer/platform/graphics/compositing_reasons.cc
new file mode 100644
index 00000000000..843a84a4fe7
--- /dev/null
+++ b/chromium/third_party/blink/renderer/platform/graphics/compositing_reasons.cc
@@ -0,0 +1,209 @@
+// 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.
+
+#include "third_party/blink/renderer/platform/graphics/compositing_reasons.h"
+
+#include "third_party/blink/renderer/platform/wtf/std_lib_extras.h"
+#include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
+
+namespace blink {
+
+namespace {
+
+struct CompositingReasonStringMap {
+ CompositingReasons reason;
+ const char* short_name;
+ const char* description;
+};
+
+constexpr CompositingReasonStringMap kCompositingReasonsStringMap[] = {
+ {CompositingReason::k3DTransform, "transform3D", "Has a 3d transform"},
+ {CompositingReason::kVideo, "video", "Is an accelerated video"},
+ {CompositingReason::kCanvas, "canvas",
+ "Is an accelerated canvas, or is a display list backed canvas that was "
+ "promoted to a layer based on a performance heuristic."},
+ {CompositingReason::kPlugin, "plugin", "Is an accelerated plugin"},
+ {CompositingReason::kIFrame, "iFrame", "Is an accelerated iFrame"},
+ {CompositingReason::kBackfaceVisibilityHidden, "backfaceVisibilityHidden",
+ "Has backface-visibility: hidden"},
+ {CompositingReason::kActiveTransformAnimation, "activeTransformAnimation",
+ "Has an active accelerated transform animation or transition"},
+ {CompositingReason::kActiveOpacityAnimation, "activeOpacityAnimation",
+ "Has an active accelerated opacity animation or transition"},
+ {CompositingReason::kActiveFilterAnimation, "activeFilterAnimation",
+ "Has an active accelerated filter animation or transition"},
+ {CompositingReason::kActiveBackdropFilterAnimation,
+ "activeBackdropFilterAnimation",
+ "Has an active accelerated backdrop filter animation or transition"},
+ {CompositingReason::kTransitionProperty, "transitionProperty",
+ "Has an acceleratable transition property (active or inactive)"},
+ {CompositingReason::kScrollDependentPosition, "scrollDependentPosition",
+ "Is fixed or sticky position"},
+ {CompositingReason::kOverflowScrollingTouch, "overflowScrollingTouch",
+ "Is a scrollable overflow element"},
+ {CompositingReason::kOverflowScrollingParent, "overflowScrollingParent",
+ "Scroll parent is not an ancestor"},
+ {CompositingReason::kOutOfFlowClipping, "outOfFlowClipping",
+ "Has clipping ancestor"},
+ {CompositingReason::kVideoOverlay, "videoOverlay",
+ "Is overlay controls for video"},
+ {CompositingReason::kWillChangeCompositingHint, "willChange",
+ "Has a will-change compositing hint"},
+ {CompositingReason::kBackdropFilter, "backdropFilter",
+ "Has a backdrop filter"},
+ {CompositingReason::kRootScroller, "rootScroller",
+ "Is the document.rootScroller"},
+ {CompositingReason::kAssumedOverlap, "assumedOverlap",
+ "Might overlap other composited content"},
+ {CompositingReason::kOverlap, "overlap",
+ "Overlaps other composited content"},
+ {CompositingReason::kNegativeZIndexChildren, "negativeZIndexChildren",
+ "Parent with composited negative z-index content"},
+ {CompositingReason::kSquashingDisallowed, "squashingDisallowed",
+ "Layer was separately composited because it could not be squashed."},
+ {CompositingReason::kTransformWithCompositedDescendants,
+ "transformWithCompositedDescendants",
+ "Has a transform that needs to be known by compositor because of "
+ "composited descendants"},
+ {CompositingReason::kOpacityWithCompositedDescendants,
+ "opacityWithCompositedDescendants",
+ "Has opacity that needs to be applied by compositor because of composited "
+ "descendants"},
+ {CompositingReason::kMaskWithCompositedDescendants,
+ "maskWithCompositedDescendants",
+ "Has a mask that needs to be known by compositor because of composited "
+ "descendants"},
+ {CompositingReason::kReflectionWithCompositedDescendants,
+ "reflectionWithCompositedDescendants",
+ "Has a reflection that needs to be known by compositor because of "
+ "composited descendants"},
+ {CompositingReason::kFilterWithCompositedDescendants,
+ "filterWithCompositedDescendants",
+ "Has a filter effect that needs to be known by compositor because of "
+ "composited descendants"},
+ {CompositingReason::kBlendingWithCompositedDescendants,
+ "blendingWithCompositedDescendants",
+ "Has a blending effect that needs to be known by compositor because of "
+ "composited descendants"},
+ {CompositingReason::kClipsCompositingDescendants,
+ "clipsCompositingDescendants",
+ "Has a clip that needs to be known by compositor because of composited "
+ "descendants"},
+ {CompositingReason::kPerspectiveWith3DDescendants,
+ "perspectiveWith3DDescendants",
+ "Has a perspective transform that needs to be known by compositor because "
+ "of 3d descendants"},
+ {CompositingReason::kPreserve3DWith3DDescendants,
+ "preserve3DWith3DDescendants",
+ "Has a preserves-3d property that needs to be known by compositor because "
+ "of 3d descendants"},
+ {CompositingReason::kReflectionOfCompositedParent,
+ "reflectionOfCompositedParent", "Is a reflection of a composited layer"},
+ {CompositingReason::kIsolateCompositedDescendants,
+ "isolateCompositedDescendants",
+ "Should isolate descendants to apply a blend effect"},
+ {CompositingReason::kPositionFixedOrStickyWithCompositedDescendants,
+ "positionFixedOrStickyWithCompositedDescendants"
+ "Is a position:fixed or position:sticky element with composited "
+ "descendants"},
+ {CompositingReason::kRoot, "root", "Is the root layer"},
+ {CompositingReason::kLayerForAncestorClip, "layerForAncestorClip",
+ "Secondary layer, applies a clip due to a sibling in the compositing "
+ "tree"},
+ {CompositingReason::kLayerForDescendantClip, "layerForDescendantClip",
+ "Secondary layer, to clip descendants of the owning layer"},
+ {CompositingReason::kLayerForPerspective, "layerForPerspective",
+ "Secondary layer, to house the perspective transform for all descendants"},
+ {CompositingReason::kLayerForHorizontalScrollbar,
+ "layerForHorizontalScrollbar",
+ "Secondary layer, the horizontal scrollbar layer"},
+ {CompositingReason::kLayerForVerticalScrollbar, "layerForVerticalScrollbar",
+ "Secondary layer, the vertical scrollbar layer"},
+ {CompositingReason::kLayerForOverflowControlsHost,
+ "layerForOverflowControlsHost",
+ "Secondary layer, the overflow controls host layer"},
+ {CompositingReason::kLayerForScrollCorner, "layerForScrollCorner",
+ "Secondary layer, the scroll corner layer"},
+ {CompositingReason::kLayerForScrollingContents, "layerForScrollingContents",
+ "Secondary layer, to house contents that can be scrolled"},
+ {CompositingReason::kLayerForScrollingContainer,
+ "layerForScrollingContainer",
+ "Secondary layer, used to position the scrolling contents while "
+ "scrolling"},
+ {CompositingReason::kLayerForSquashingContents, "layerForSquashingContents",
+ "Secondary layer, home for a group of squashable content"},
+ {CompositingReason::kLayerForSquashingContainer,
+ "layerForSquashingContainer",
+ "Secondary layer, no-op layer to place the squashing layer correctly in "
+ "the composited layer tree"},
+ {CompositingReason::kLayerForForeground, "layerForForeground",
+ "Secondary layer, to contain any normal flow and positive z-index "
+ "contents on top of a negative z-index layer"},
+ {CompositingReason::kLayerForBackground, "layerForBackground",
+ "Secondary layer, to contain acceleratable background content"},
+ {CompositingReason::kLayerForMask, "layerForMask",
+ "Secondary layer, to contain the mask contents"},
+ {CompositingReason::kLayerForClippingMask, "layerForClippingMask",
+ "Secondary layer, for clipping mask"},
+ {CompositingReason::kLayerForAncestorClippingMask,
+ "layerForAncestorClippingMask",
+ "Secondary layer, applies a clipping mask due to a sibling in the "
+ "composited layer tree"},
+ {CompositingReason::kLayerForScrollingBlockSelection,
+ "layerForScrollingBlockSelection",
+ "Secondary layer, to house block selection gaps for composited scrolling "
+ "with no scrolling contents"},
+ {CompositingReason::kLayerForDecoration, "layerForDecoration",
+ "Layer painted on top of other layers as decoration"},
+ {CompositingReason::kInlineTransform, "inlineTransform",
+ "Has an inline transform, which causes subsequent layers to assume "
+ "overlap"},
+
+};
+
+} // anonymous namespace
+
+Vector<const char*> CompositingReason::ShortNames(CompositingReasons reasons) {
+#define V(name) \
+ static_assert( \
+ CompositingReason::k##name == \
+ kCompositingReasonsStringMap[CompositingReason::kE##name].reason, \
+ "kCompositingReasonsStringMap needs update for " \
+ "CompositingReason::k" #name); \
+ FOR_EACH_COMPOSITING_REASON(V)
+#undef V
+
+ Vector<const char*> result;
+ if (reasons == kNone)
+ return result;
+ for (auto& map : kCompositingReasonsStringMap) {
+ if (reasons & map.reason)
+ result.push_back(map.short_name);
+ }
+ return result;
+}
+
+Vector<const char*> CompositingReason::Descriptions(
+ CompositingReasons reasons) {
+ Vector<const char*> result;
+ if (reasons == kNone)
+ return result;
+ for (auto& map : kCompositingReasonsStringMap) {
+ if (reasons & map.reason)
+ result.push_back(map.description);
+ }
+ return result;
+}
+
+String CompositingReason::ToString(CompositingReasons reasons) {
+ StringBuilder builder;
+ for (const char* name : ShortNames(reasons)) {
+ if (builder.length())
+ builder.Append(',');
+ builder.Append(name);
+ }
+ return builder.ToString();
+}
+
+} // namespace blink