summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/platform/graphics/squashing_disallowed_reasons.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/platform/graphics/squashing_disallowed_reasons.cc')
-rw-r--r--chromium/third_party/blink/renderer/platform/graphics/squashing_disallowed_reasons.cc120
1 files changed, 120 insertions, 0 deletions
diff --git a/chromium/third_party/blink/renderer/platform/graphics/squashing_disallowed_reasons.cc b/chromium/third_party/blink/renderer/platform/graphics/squashing_disallowed_reasons.cc
new file mode 100644
index 00000000000..0e8d14de9f2
--- /dev/null
+++ b/chromium/third_party/blink/renderer/platform/graphics/squashing_disallowed_reasons.cc
@@ -0,0 +1,120 @@
+// Copyright 2016 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/squashing_disallowed_reasons.h"
+
+#include "third_party/blink/renderer/platform/wtf/std_lib_extras.h"
+
+namespace blink {
+
+namespace {
+
+struct SquashingDisallowedReasonStringMap {
+ SquashingDisallowedReasons reason;
+ const char* short_name;
+ const char* description;
+};
+
+constexpr SquashingDisallowedReasonStringMap
+ kSquashingDisallowedReasonsStringMap[] = {
+ {SquashingDisallowedReason::kScrollsWithRespectToSquashingLayer,
+ "scrollsWithRespectToSquashingLayer",
+ "Cannot be squashed since this layer scrolls with respect to the "
+ "squashing layer"},
+ {SquashingDisallowedReason::kSquashingSparsityExceeded,
+ "squashingSparsityExceeded",
+ "Cannot be squashed as the squashing layer would become too sparse"},
+ {SquashingDisallowedReason::kClippingContainerMismatch,
+ "squashingClippingContainerMismatch",
+ "Cannot be squashed because this layer has a different clipping "
+ "container than the squashing layer"},
+ {SquashingDisallowedReason::kOpacityAncestorMismatch,
+ "squashingOpacityAncestorMismatch",
+ "Cannot be squashed because this layer has a different opacity "
+ "ancestor than the squashing layer"},
+ {SquashingDisallowedReason::kTransformAncestorMismatch,
+ "squashingTransformAncestorMismatch",
+ "Cannot be squashed because this layer has a different transform "
+ "ancestor than the squashing layer"},
+ {SquashingDisallowedReason::kFilterMismatch,
+ "squashingFilterAncestorMismatch",
+ "Cannot be squashed because this layer has a different filter "
+ "ancestor than the squashing layer, or this layer has a filter"},
+ {SquashingDisallowedReason::kWouldBreakPaintOrder,
+ "squashingWouldBreakPaintOrder",
+ "Cannot be squashed without breaking paint order"},
+ {SquashingDisallowedReason::kSquashingVideoIsDisallowed,
+ "squashingVideoIsDisallowed", "Squashing video is not supported"},
+ {SquashingDisallowedReason::kSquashedLayerClipsCompositingDescendants,
+ "squashedLayerClipsSquashingDisallowedDescendants",
+ "Squashing a layer that clips composited descendants is not "
+ "supported."},
+ {SquashingDisallowedReason::kSquashingLayoutEmbeddedContentIsDisallowed,
+ "squashingLayoutEmbeddedContentIsDisallowed",
+ "Squashing a frame, iframe or plugin is not supported."},
+ {SquashingDisallowedReason::kSquashingBlendingIsDisallowed,
+ "squashingBlendingDisallowed",
+ "Squashing a layer with blending is not supported."},
+ {SquashingDisallowedReason::kNearestFixedPositionMismatch,
+ "squashingNearestFixedPositionMismatch",
+ "Cannot be squashed because this layer has a different nearest fixed "
+ "position layer than the squashing layer"},
+ {SquashingDisallowedReason::kScrollChildWithCompositedDescendants,
+ "scrollChildWithCompositedDescendants",
+ "Squashing a scroll child with composited descendants is not "
+ "supported."},
+ {SquashingDisallowedReason::kSquashingLayerIsAnimating,
+ "squashingLayerIsAnimating",
+ "Cannot squash into a layer that is animating."},
+ {SquashingDisallowedReason::kRenderingContextMismatch,
+ "squashingLayerRenderingContextMismatch",
+ "Cannot squash layers with different 3D contexts."},
+ {SquashingDisallowedReason::kFragmentedContent,
+ "SquashingDisallowedReasonFragmentedContent",
+ "Cannot squash layers that are inside fragmentation contexts."},
+ {SquashingDisallowedReason::kClipPathMismatch,
+ "SquashingDisallowedReasonClipPathMismatch",
+ "Cannot squash layers across clip-path boundaries."},
+ {SquashingDisallowedReason::kMaskMismatch,
+ "SquashingDisallowedReasonMaskMismatch",
+ "Cannot squash layers across mask boundaries."},
+};
+
+} // anonymous namespace
+
+Vector<const char*> SquashingDisallowedReason::ShortNames(
+ SquashingDisallowedReasons reasons) {
+#define V(name) \
+ static_assert(SquashingDisallowedReason::k##name == \
+ kSquashingDisallowedReasonsStringMap \
+ [SquashingDisallowedReason::kE##name] \
+ .reason, \
+ "kSquashingDisallowedReasonsStringMap needs update for " \
+ "SquashingDisallowedReason::k" #name); \
+ FOR_EACH_COMPOSITING_REASON(V)
+#undef V
+
+ Vector<const char*> result;
+ if (reasons == kNone)
+ return result;
+ for (auto& map : kSquashingDisallowedReasonsStringMap) {
+ if (reasons & map.reason)
+ result.push_back(map.short_name);
+ }
+ return result;
+}
+
+Vector<const char*> SquashingDisallowedReason::Descriptions(
+ SquashingDisallowedReasons reasons) {
+ Vector<const char*> result;
+ if (reasons == kNone)
+ return result;
+ for (auto& map : kSquashingDisallowedReasonsStringMap) {
+ if (reasons & map.reason)
+ result.push_back(map.description);
+ }
+ return result;
+}
+
+} // namespace blink