Commit f6e075c5 authored by Mason Freed's avatar Mason Freed Committed by Commit Bot

Removing the kInlineTransform compositing reason

This optimization was the cause of at least one bug (crbug.com/812166), and
will hopefully not be needed once Composite After Paint is implemented.

Bug: 812166
Change-Id: I2024b887949904bad5515d76b2fa29607dae3ff9
Reviewed-on: https://chromium-review.googlesource.com/c/1354572
Commit-Queue: Mason Freed <masonfreed@chromium.org>
Reviewed-by: default avatarChris Harrelson <chrishtr@chromium.org>
Reviewed-by: default avatarXianzhu Wang <wangxianzhu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#612670}
parent 6c2dfeb5
...@@ -94,9 +94,6 @@ CompositingReasonFinder::PotentialCompositingReasonsFromStyle( ...@@ -94,9 +94,6 @@ CompositingReasonFinder::PotentialCompositingReasonsFromStyle(
!style.SubtreeWillChangeContents()) !style.SubtreeWillChangeContents())
reasons |= CompositingReason::kWillChangeCompositingHint; reasons |= CompositingReason::kWillChangeCompositingHint;
if (style.HasInlineTransform())
reasons |= CompositingReason::kInlineTransform;
if (style.UsedTransformStyle3D() == ETransformStyle3D::kPreserve3d) if (style.UsedTransformStyle3D() == ETransformStyle3D::kPreserve3d)
reasons |= CompositingReason::kPreserve3DWith3DDescendants; reasons |= CompositingReason::kPreserve3DWith3DDescendants;
......
...@@ -608,11 +608,6 @@ void CompositingRequirementsUpdater::UpdateRecursive( ...@@ -608,11 +608,6 @@ void CompositingRequirementsUpdater::UpdateRecursive(
will_be_composited_or_squashed = true; will_be_composited_or_squashed = true;
} }
if (will_be_composited_or_squashed) {
reasons_to_composite |= layer->PotentialCompositingReasonsFromStyle() &
CompositingReason::kInlineTransform;
}
if (will_be_composited_or_squashed && if (will_be_composited_or_squashed &&
layer->GetLayoutObject().StyleRef().HasBlendMode()) { layer->GetLayoutObject().StyleRef().HasBlendMode()) {
current_recursion_data.has_unisolated_composited_blending_descendant_ = current_recursion_data.has_unisolated_composited_blending_descendant_ =
...@@ -631,12 +626,9 @@ void CompositingRequirementsUpdater::UpdateRecursive( ...@@ -631,12 +626,9 @@ void CompositingRequirementsUpdater::UpdateRecursive(
bool is_composited_clipping_layer = bool is_composited_clipping_layer =
can_be_composited && (reasons_to_composite & can_be_composited && (reasons_to_composite &
CompositingReason::kClipsCompositingDescendants); CompositingReason::kClipsCompositingDescendants);
bool is_composited_with_inline_transform =
reasons_to_composite & CompositingReason::kInlineTransform;
if ((!child_recursion_data.testing_overlap_ && if ((!child_recursion_data.testing_overlap_ &&
!is_composited_clipping_layer) || !is_composited_clipping_layer) ||
layer->GetLayoutObject().StyleRef().HasCurrentTransformAnimation() || layer->GetLayoutObject().StyleRef().HasCurrentTransformAnimation())
is_composited_with_inline_transform)
current_recursion_data.testing_overlap_ = false; current_recursion_data.testing_overlap_ = false;
if (child_recursion_data.compositing_ancestor_ == layer) if (child_recursion_data.compositing_ancestor_ == layer)
......
...@@ -76,33 +76,6 @@ TEST_F(CompositingRequirementsUpdaterTest, ...@@ -76,33 +76,6 @@ TEST_F(CompositingRequirementsUpdaterTest,
EXPECT_EQ(CompositingReason::kOverlap, target->GetCompositingReasons()); EXPECT_EQ(CompositingReason::kOverlap, target->GetCompositingReasons());
} }
TEST_F(CompositingRequirementsUpdaterTest,
NoAssumedOverlapReasonForNonSelfPaintingLayer) {
SetBodyInnerHTML(R"HTML(
<style>
#target {
overflow: auto;
width: 100px;
height: 100px;
}
</style>
<div style="position: relative; width: 500px; height: 300px;
transform: translateZ(0)"></div>
<div id=target></div>
)HTML");
PaintLayer* target =
ToLayoutBoxModelObject(GetLayoutObjectByElementId("target"))->Layer();
EXPECT_FALSE(target->GetCompositingReasons());
// Now make |target| self-painting.
GetDocument().getElementById("target")->setAttribute(html_names::kStyleAttr,
"position: relative");
UpdateAllLifecyclePhasesForTest();
EXPECT_EQ(CompositingReason::kAssumedOverlap,
target->GetCompositingReasons());
}
TEST_F(CompositingRequirementsUpdaterTest, TEST_F(CompositingRequirementsUpdaterTest,
NoDescendantReasonForNonSelfPaintingLayer) { NoDescendantReasonForNonSelfPaintingLayer) {
SetBodyInnerHTML(R"HTML( SetBodyInnerHTML(R"HTML(
......
...@@ -3064,15 +3064,8 @@ bool PaintLayer::AttemptDirectCompositingUpdate( ...@@ -3064,15 +3064,8 @@ bool PaintLayer::AttemptDirectCompositingUpdate(
if (!rare_data_ || !rare_data_->composited_layer_mapping) if (!rare_data_ || !rare_data_->composited_layer_mapping)
return false; return false;
// To cut off almost all the work in the compositing update for // If a transform changed, we can't use the fast path.
// this case, we treat inline transforms has having assumed overlap if (diff.TransformChanged())
// (similar to how we treat animated transforms). Notice that we read
// CompositingReasonInlineTransform from the m_compositingReasons, which
// means that the inline transform actually triggered assumed overlap in
// the overlap map.
if (diff.TransformChanged() &&
(!rare_data_ || !(rare_data_->compositing_reasons &
CompositingReason::kInlineTransform)))
return false; return false;
// We composite transparent Layers differently from non-transparent // We composite transparent Layers differently from non-transparent
......
...@@ -156,9 +156,6 @@ constexpr CompositingReasonStringMap kCompositingReasonsStringMap[] = { ...@@ -156,9 +156,6 @@ constexpr CompositingReasonStringMap kCompositingReasonsStringMap[] = {
"with no scrolling contents"}, "with no scrolling contents"},
{CompositingReason::kLayerForDecoration, "layerForDecoration", {CompositingReason::kLayerForDecoration, "layerForDecoration",
"Layer painted on top of other layers as decoration"}, "Layer painted on top of other layers as decoration"},
{CompositingReason::kInlineTransform, "inlineTransform",
"Has an inline transform, which causes subsequent layers to assume "
"overlap"},
}; };
......
...@@ -82,11 +82,7 @@ using CompositingReasons = uint64_t; ...@@ -82,11 +82,7 @@ using CompositingReasons = uint64_t;
V(LayerForAncestorClippingMask) \ V(LayerForAncestorClippingMask) \
V(LayerForScrollingBlockSelection) \ V(LayerForScrollingBlockSelection) \
/* Composited layer painted on top of all other layers as decoration. */ \ /* Composited layer painted on top of all other layers as decoration. */ \
V(LayerForDecoration) \ V(LayerForDecoration)
\
/* Composited elements with inline transforms trigger assumed overlap so \
that we can update their transforms quickly. */ \
V(InlineTransform)
class PLATFORM_EXPORT CompositingReason { class PLATFORM_EXPORT CompositingReason {
private: private:
...@@ -147,7 +143,7 @@ class PLATFORM_EXPORT CompositingReason { ...@@ -147,7 +143,7 @@ class PLATFORM_EXPORT CompositingReason {
kComboAllStyleDeterminedReasons = kComboAllDirectStyleDeterminedReasons | kComboAllStyleDeterminedReasons = kComboAllDirectStyleDeterminedReasons |
kComboCompositedDescendants | kComboCompositedDescendants |
kCombo3DDescendants | kInlineTransform, kCombo3DDescendants,
kComboSquashableReasons = kComboSquashableReasons =
kOverlap | kAssumedOverlap | kOverflowScrollingParent, kOverlap | kAssumedOverlap | kOverflowScrollingParent,
......
...@@ -26,7 +26,6 @@ compositing/geometry/limit-layer-bounds-positioned-transition.html ...@@ -26,7 +26,6 @@ compositing/geometry/limit-layer-bounds-positioned-transition.html
compositing/gestures/gesture-tapHighlight-no-graphics-layer-region-based-multicol.html compositing/gestures/gesture-tapHighlight-no-graphics-layer-region-based-multicol.html
compositing/iframes/visibility-hidden-transformed-content.html compositing/iframes/visibility-hidden-transformed-content.html
compositing/images/clip-on-directly-composited-image.html compositing/images/clip-on-directly-composited-image.html
compositing/layer-creation/assumed-overlap-for-inline-transform.html
compositing/layer-creation/fixed-position-out-of-view-dynamic.html compositing/layer-creation/fixed-position-out-of-view-dynamic.html
compositing/layer-creation/fixed-position-out-of-view.html compositing/layer-creation/fixed-position-out-of-view.html
compositing/reflections/empty-reflection-with-mask.html compositing/reflections/empty-reflection-with-mask.html
......
...@@ -8,12 +8,12 @@ ...@@ -8,12 +8,12 @@
<div style="transform: translateZ(0); position: relative; left: 10px; top: 10px"></div> <div style="transform: translateZ(0); position: relative; left: 10px; top: 10px"></div>
<div id="targetDiv" style="position: relative; left: 10px; top: 40px; width: 200px; height: 100px; overflow-y: scroll; overflow-x: scroll;"> <div id="targetDiv" style="position: relative; left: 10px; top: 40px; width: 200px; height: 100px; overflow-y: scroll; overflow-x: scroll;">
<div id="divToForceCompositedLayer"> <div id="divToForceCompositedLayer">
<a href="">Link 1</a><br> <a href="">AAAAAA</a><br>
<a href="">Link 2</a><br> <a href="">AAAAAA</a><br>
<a href="">Link 3</a><br> <a href="">AAAAAA</a><br>
<a href="" class="activeLink" id="targetLink">Target Link.</a><br> <a href="" class="activeLink" id="targetLink">Target Link.</a><br>
<a href="">Link 4</a><br> <a href="">AAAAAA</a><br>
<a href="">Link 5</a><br> <a href="">AAAAAA</a><br>
</div></div> </div></div>
<div style="position: relative; left: 10px; top: 80px"> <div style="position: relative; left: 10px; top: 80px">
This test is successful if "Target Link" above is covered in a green rectangle with square corners. This test is successful if "Target Link" above is covered in a green rectangle with square corners.
......
...@@ -8,12 +8,12 @@ ...@@ -8,12 +8,12 @@
<div style="transform: translateZ(0); position: relative; left: 10px; top: 10px"></div> <div style="transform: translateZ(0); position: relative; left: 10px; top: 10px"></div>
<div id="targetDiv" style="position: relative; left: 10px; top: 40px; width: 200px; height: 100px; overflow-y: scroll; overflow-x: scroll;"> <div id="targetDiv" style="position: relative; left: 10px; top: 40px; width: 200px; height: 100px; overflow-y: scroll; overflow-x: scroll;">
<div id="divToForceCompositedLayer"> <div id="divToForceCompositedLayer">
<a href="">Link 1</a><br> <a href="">AAAAAA</a><br>
<a href="">Link 2</a><br> <a href="">AAAAAA</a><br>
<a href="">Link 3</a><br> <a href="">AAAAAA</a><br>
<a class="opaqueHighlight" href="" id="targetLink">Target Link.</a><br> <a class="opaqueHighlight" href="" id="targetLink">Target Link.</a><br>
<a href="">Link 4</a><br> <a href="">AAAAAA</a><br>
<a href="">Link 5</a><br> <a href="">AAAAAA</a><br>
</div></div> </div></div>
<div style="position: relative; left: 10px; top: 80px"> <div style="position: relative; left: 10px; top: 80px">
This test is successful if "Target Link" above is covered in a green rectangle with square corners. This test is successful if "Target Link" above is covered in a green rectangle with square corners.
......
...@@ -7,12 +7,12 @@ ...@@ -7,12 +7,12 @@
<div style="transform: translateZ(0); position: relative; left: 10px; top: 10px"></div> <div style="transform: translateZ(0); position: relative; left: 10px; top: 10px"></div>
<div id="targetDiv" style="position: relative; left: 10px; top: 40px; width: 200px; height: 100px; overflow-y: scroll; overflow-x: scroll;"> <div id="targetDiv" style="position: relative; left: 10px; top: 40px; width: 200px; height: 100px; overflow-y: scroll; overflow-x: scroll;">
<div id="divToControlCompositedLayer" style="transform: translateZ(0);"> <div id="divToControlCompositedLayer" style="transform: translateZ(0);">
<a href="">Link 1</a><br> <a href="">AAAAAA</a><br>
<a href="">Link 2</a><br> <a href="">AAAAAA</a><br>
<a href="">Link 3</a><br> <a href="">AAAAAA</a><br>
<span class="fauxHighlight" id="targetLink">Target Link.</span><br> <span class="fauxHighlight" id="targetLink">Target Link.</span><br>
<a href="">Link 4</a><br> <a href="">AAAAAA</a><br>
<a href="">Link 5</a><br> <a href="">AAAAAA</a><br>
</div></div> </div></div>
<div style="position: relative; left: 10px; top: 80px"> <div style="position: relative; left: 10px; top: 80px">
This test is successful if "Target Link" above is covered in a green rectangle with square corners. This test is successful if "Target Link" above is covered in a green rectangle with square corners.
......
...@@ -9,12 +9,12 @@ ...@@ -9,12 +9,12 @@
<div style="transform: translateZ(0); position: relative; left: 10px; top: 10px"></div> <div style="transform: translateZ(0); position: relative; left: 10px; top: 10px"></div>
<div id="targetDiv" style="position: relative; left: 10px; top: 40px; width: 200px; height: 100px; overflow-y: scroll; overflow-x: scroll;"> <div id="targetDiv" style="position: relative; left: 10px; top: 40px; width: 200px; height: 100px; overflow-y: scroll; overflow-x: scroll;">
<div id="divToControlCompositedLayer" style="transform: translateZ(0);"> <div id="divToControlCompositedLayer" style="transform: translateZ(0);">
<a href="">Link 1</a><br> <a href="">AAAAAA</a><br>
<a href="">Link 2</a><br> <a href="">AAAAAA</a><br>
<a href="">Link 3</a><br> <a href="">AAAAAA</a><br>
<a class="opaqueHighlight needsFix" href="" id="targetLink">Target Link.</a><br> <a class="opaqueHighlight needsFix" href="" id="targetLink">Target Link.</a><br>
<a href="">Link 4</a><br> <a href="">AAAAAA</a><br>
<a href="">Link 5</a><br> <a href="">AAAAAA</a><br>
</div></div> </div></div>
<div style="position: relative; left: 10px; top: 80px"> <div style="position: relative; left: 10px; top: 80px">
This test is successful if "Target Link" above is covered in a green rectangle with square corners. This test is successful if "Target Link" above is covered in a green rectangle with square corners.
......
...@@ -15,12 +15,12 @@ ...@@ -15,12 +15,12 @@
<body onload="runTest();"> <body onload="runTest();">
<div style="transform: translateZ(0); position: relative; left: 10px; top: 10px"></div> <div style="transform: translateZ(0); position: relative; left: 10px; top: 10px"></div>
<div id="targetDiv" style="position: relative; left: 10px; top: 40px; width: 200px; height: 100px; overflow-y: scroll; overflow-x: scroll;"> <div id="targetDiv" style="position: relative; left: 10px; top: 40px; width: 200px; height: 100px; overflow-y: scroll; overflow-x: scroll;">
<a href="">Link 1</a><br> <a href="">AAAAAA</a><br>
<a href="">Link 2</a><br> <a href="">AAAAAA</a><br>
<a href="">Link 3</a><br> <a href="">AAAAAA</a><br>
<a href="" class="activeLink" id="targetLink">Target Link.</a><br> <a href="" class="activeLink" id="targetLink">Target Link.</a><br>
<a href="">Link 4</a><br> <a href="">AAAAAA</a><br>
<a href="">Link 5</a><br> <a href="">AAAAAA</a><br>
</div> </div>
<div style="position: relative; left: 10px; top: 80px"> <div style="position: relative; left: 10px; top: 80px">
This test is successful if "Target Link" above is covered in a green This test is successful if "Target Link" above is covered in a green
......
...@@ -36,12 +36,12 @@ ...@@ -36,12 +36,12 @@
<body onload="runTest();"> <body onload="runTest();">
<div style="transform: translateZ(0); position: relative; left: 10px; top: 10px"></div> <div style="transform: translateZ(0); position: relative; left: 10px; top: 10px"></div>
<div id="targetDiv" style="position: relative; left: 10px; top: 40px; width: 200px; height: 100px; overflow-y: scroll; overflow-x: scroll;"> <div id="targetDiv" style="position: relative; left: 10px; top: 40px; width: 200px; height: 100px; overflow-y: scroll; overflow-x: scroll;">
<a href="">Link 1</a><br> <a href="">AAAAAA</a><br>
<a href="">Link 2</a><br> <a href="">AAAAAA</a><br>
<a href="">Link 3</a><br> <a href="">AAAAAA</a><br>
<a class="opaqueHighlight" href="" id="targetLink">Target Link.</a><br> <a class="opaqueHighlight" href="" id="targetLink">Target Link.</a><br>
<a href="">Link 4</a><br> <a href="">AAAAAA</a><br>
<a href="">Link 5</a><br> <a href="">AAAAAA</a><br>
</div> </div>
<div style="position: relative; left: 10px; top: 80px"> <div style="position: relative; left: 10px; top: 80px">
This test is successful if "Target Link" above is covered in a green This test is successful if "Target Link" above is covered in a green
......
<!DOCTYPE html>
<style>
.box {
position: relative;
width: 100px;
height: 100px;
}
</style>
<div class="box" style="transform: translateZ(0); background-color: blue;"></div>
<div class="box" style="background-color: yellow;"></div>
<script>
if (window.testRunner) {
testRunner.dumpAsText();
testRunner.setCustomTextOutput(internals.layerTreeAsText(document));
}
</script>
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
<div class="translated"> <div class="translated">
<div class="scrolled"></div> <div class="scrolled"></div>
</div> </div>
<div class="translated" style="transform: translate(0,430px)"> <div class="translated" style="transform: translate3D(0px,430px,0px)">
<div class="scrolled"></div> <div class="scrolled"></div>
</div> </div>
</div> </div>
......
...@@ -18,22 +18,11 @@ ...@@ -18,22 +18,11 @@
"backgroundColor": "#FFFFFF", "backgroundColor": "#FFFFFF",
"transform": 1 "transform": 1
}, },
{
"name": "Squashing Containment Layer",
"drawsContent": false,
"transform": 1
},
{ {
"name": "LayoutBlockFlow DIV", "name": "LayoutBlockFlow DIV",
"contentsOpaque": true, "contentsOpaque": true,
"drawsContent": false, "drawsContent": false,
"transform": 2 "transform": 2
},
{
"name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV)",
"position": [8, 8],
"bounds": [102, 2002],
"transform": 1
} }
], ],
"transforms": [ "transforms": [
...@@ -55,8 +44,7 @@ ...@@ -55,8 +44,7 @@
[0, 1, 0, 0], [0, 1, 0, 0],
[0, 0, 1, 0], [0, 0, 1, 0],
[8, 8, 0, 1] [8, 8, 0, 1]
], ]
"flattenInheritedTransform": false
} }
] ]
} }
......
...@@ -17,21 +17,12 @@ ...@@ -17,21 +17,12 @@
"contentsOpaque": true, "contentsOpaque": true,
"backgroundColor": "#FFFFFF" "backgroundColor": "#FFFFFF"
}, },
{
"name": "Squashing Containment Layer",
"drawsContent": false
},
{ {
"name": "LayoutBlockFlow (positioned) DIV id='squashing'", "name": "LayoutBlockFlow (positioned) DIV id='squashing'",
"bounds": [1, 1], "bounds": [1, 1],
"contentsOpaque": true, "contentsOpaque": true,
"backgroundColor": "#FFFFFF", "backgroundColor": "#FFFFFF",
"transform": 1 "transform": 1
},
{
"name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='squashed')",
"position": [600, 0],
"bounds": [200, 200]
} }
], ],
"transforms": [ "transforms": [
...@@ -42,8 +33,7 @@ ...@@ -42,8 +33,7 @@
[0, 1, 0, 0], [0, 1, 0, 0],
[0, 0, 1, 0], [0, 0, 1, 0],
[-33554430, 0, 0, 1] [-33554430, 0, 0, 1]
], ]
"flattenInheritedTransform": false
} }
] ]
} }
......
...@@ -28,21 +28,12 @@ ...@@ -28,21 +28,12 @@
"drawsContent": false, "drawsContent": false,
"transform": 2 "transform": 2
}, },
{
"name": "Squashing Containment Layer",
"drawsContent": false,
"transform": 2
},
{ {
"name": "LayoutBlockFlow (positioned) DIV", "name": "LayoutBlockFlow (positioned) DIV",
"bounds": [200, 200], "bounds": [200, 200],
"contentsOpaque": true, "contentsOpaque": true,
"backgroundColor": "#00008B", "backgroundColor": "#00008B",
"transform": 3 "transform": 3
},
{
"name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV)",
"transform": 2
} }
], ],
"transforms": [ "transforms": [
......
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
"transform": 1 "transform": 1
}, },
{ {
"name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='container')", "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) SPAN class='child')",
"position": [50, 50], "position": [50, 50],
"bounds": [50, 50], "bounds": [50, 50],
"paintInvalidations": [ "paintInvalidations": [
......
...@@ -40,23 +40,6 @@ ...@@ -40,23 +40,6 @@
"contentsOpaque": true, "contentsOpaque": true,
"backgroundColor": "#FFDDBB", "backgroundColor": "#FFDDBB",
"transform": 1 "transform": 1
},
{
"name": "Ancestor Clipping Layer",
"position": [23, 65],
"bounds": [285, 175],
"drawsContent": false
},
{
"name": "LayoutBlockFlow (relative positioned) DIV class='list'",
"position": [43, 35],
"bounds": [180, 250],
"drawsContent": false
},
{
"name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV class='commit')",
"position": [43, 35],
"bounds": [180, 250]
} }
], ],
"transforms": [ "transforms": [
......
...@@ -17,6 +17,10 @@ ...@@ -17,6 +17,10 @@
"contentsOpaque": true, "contentsOpaque": true,
"backgroundColor": "#FFFFFF" "backgroundColor": "#FFFFFF"
}, },
{
"name": "Squashing Containment Layer",
"drawsContent": false
},
{ {
"name": "LayoutBlockFlow (positioned) DIV id='target'", "name": "LayoutBlockFlow (positioned) DIV id='target'",
"position": [7, 57], "position": [7, 57],
...@@ -37,32 +41,9 @@ ...@@ -37,32 +41,9 @@
] ]
}, },
{ {
"name": "LayoutBlockFlow (positioned) DIV", "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV)",
"bounds": [440, 300], "position": [108, 158],
"backgroundColor": "#0000FF", "bounds": [300, 440]
"transform": 2
}
],
"transforms": [
{
"id": 1,
"transform": [
[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0],
[108, 158, 0, 1]
]
},
{
"id": 2,
"parent": 1,
"transform": [
[0, 1, 0, 0],
[-1, 0, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]
],
"origin": [150, 150]
} }
] ]
} }
......
...@@ -18,22 +18,11 @@ ...@@ -18,22 +18,11 @@
"backgroundColor": "#FFFFFF", "backgroundColor": "#FFFFFF",
"transform": 1 "transform": 1
}, },
{
"name": "Squashing Containment Layer",
"drawsContent": false,
"transform": 1
},
{ {
"name": "LayoutBlockFlow DIV", "name": "LayoutBlockFlow DIV",
"contentsOpaque": true, "contentsOpaque": true,
"drawsContent": false, "drawsContent": false,
"transform": 2 "transform": 2
},
{
"name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV)",
"position": [8, 8],
"bounds": [102, 2002],
"transform": 1
} }
], ],
"transforms": [ "transforms": [
...@@ -55,8 +44,7 @@ ...@@ -55,8 +44,7 @@
[0, 1, 0, 0], [0, 1, 0, 0],
[0, 0, 1, 0], [0, 0, 1, 0],
[8, 8, 0, 1] [8, 8, 0, 1]
], ]
"flattenInheritedTransform": false
} }
] ]
} }
......
...@@ -17,6 +17,10 @@ ...@@ -17,6 +17,10 @@
"contentsOpaque": true, "contentsOpaque": true,
"backgroundColor": "#FFFFFF" "backgroundColor": "#FFFFFF"
}, },
{
"name": "Squashing Containment Layer",
"drawsContent": false
},
{ {
"name": "LayoutBlockFlow (positioned) DIV id='target'", "name": "LayoutBlockFlow (positioned) DIV id='target'",
"position": [5, 55], "position": [5, 55],
...@@ -37,32 +41,9 @@ ...@@ -37,32 +41,9 @@
] ]
}, },
{ {
"name": "LayoutBlockFlow (positioned) DIV", "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV)",
"bounds": [440, 300], "position": [108, 158],
"backgroundColor": "#0000FF", "bounds": [300, 440]
"transform": 2
}
],
"transforms": [
{
"id": 1,
"transform": [
[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0],
[108, 158, 0, 1]
]
},
{
"id": 2,
"parent": 1,
"transform": [
[0, 1, 0, 0],
[-1, 0, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]
],
"origin": [150, 150]
} }
] ]
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment