Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(46)

Side by Side Diff: third_party/WebKit/Source/core/layout/compositing/CompositedLayerMappingTest.cpp

Issue 1393083003: Implement interest rects for synchronized paint. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "config.h"
6 #include "core/layout/compositing/CompositedLayerMapping.h"
7
8 #include "core/frame/FrameView.h"
9 #include "core/layout/LayoutBoxModelObject.h"
10 #include "core/layout/LayoutTestHelper.h"
11 #include "core/paint/PaintLayer.h"
12 #include <gtest/gtest.h>
13
14 namespace blink {
15
16 class CompositedLayerMappingTest : public RenderingTest {
17 public:
18 CompositedLayerMappingTest()
19 : m_originalSlimmingPaintSynchronizedPaintingEnabled(RuntimeEnabledFeatu res::slimmingPaintSynchronizedPaintingEnabled()) { }
20
21 protected:
22 IntRect computeInterestRect(const GraphicsLayer* graphicsLayer, LayoutObject * owningLayoutObject)
23 {
24 return CompositedLayerMapping::computeInterestRect(graphicsLayer, owning LayoutObject);
25 }
26
27 private:
28 void SetUp() override
29 {
30 RuntimeEnabledFeatures::setSlimmingPaintSynchronizedPaintingEnabled(true );
31
32 RenderingTest::SetUp();
33 enableCompositing();
34 GraphicsLayer::setDrawDebugRedFillForTesting(false);
35 }
36
37 void TearDown() override
38 {
39 GraphicsLayer::setDrawDebugRedFillForTesting(true);
40 RuntimeEnabledFeatures::setSlimmingPaintSynchronizedPaintingEnabled(m_or iginalSlimmingPaintSynchronizedPaintingEnabled);
41 }
42
43 bool m_originalSlimmingPaintSynchronizedPaintingEnabled;
44 };
45
46 static void printRect(IntRect rect)
47 {
48 fprintf(stderr, "[x=%d y=%d maxX=%d maxY=%d]\n", rect.x(), rect.y(), rect.ma xX(), rect.maxY());
49 }
50
51 static bool checkRectsEqual(const IntRect& expected, const IntRect& actual)
52 {
53 if (expected != actual) {
54 fprintf(stderr, "Expected: ");
55 printRect(expected);
56 fprintf(stderr, "Actual: ");
57 printRect(actual);
58 return false;
59 }
60 return true;
61 }
62
63 TEST_F(CompositedLayerMappingTest, SimpleInterestRect)
64 {
65 setBodyInnerHTML("<div id='target' style='width: 200px; height: 200px; will- change: transform'></div>");
66
67 document().view()->updateAllLifecyclePhases();
68 Element* element = document().getElementById("target");
69 PaintLayer* paintLayer = toLayoutBoxModelObject(element->layoutObject())->la yer();
70 ASSERT_TRUE(!!paintLayer->graphicsLayerBacking());
71 EXPECT_TRUE(checkRectsEqual(IntRect(0, 0, 200, 200), computeInterestRect(pai ntLayer->graphicsLayerBacking(), paintLayer->layoutObject())));
72 }
73
74 TEST_F(CompositedLayerMappingTest, TallLayerInterestRect)
75 {
76 setBodyInnerHTML("<div id='target' style='width: 200px; height: 10000px; wil l-change: transform'></div>");
77
78 document().view()->updateAllLifecyclePhases();
79 Element* element = document().getElementById("target");
80 PaintLayer* paintLayer = toLayoutBoxModelObject(element->layoutObject())->la yer();
81 ASSERT_TRUE(paintLayer->graphicsLayerBacking());
82 // Screen-space visible content rect is [8, 8, 200, 600]. Mapping back to lo cal, adding 4000px in all directions, then
83 // clipping, yields this rect.
84 EXPECT_TRUE(checkRectsEqual(IntRect(0, 0, 200, 4592), computeInterestRect(pa intLayer->graphicsLayerBacking(), paintLayer->layoutObject())));
85 }
86
87 TEST_F(CompositedLayerMappingTest, RotatedInterestRect)
88 {
89 setBodyInnerHTML(
90 "<div id='target' style='width: 200px; height: 200px; will-change: trans form; transform: rotateZ(45deg)'></div>");
91
92 document().view()->updateAllLifecyclePhases();
93 Element* element = document().getElementById("target");
94 PaintLayer* paintLayer = toLayoutBoxModelObject(element->layoutObject())->la yer();
95 ASSERT_TRUE(!!paintLayer->graphicsLayerBacking());
96 EXPECT_TRUE(checkRectsEqual(IntRect(0, 0, 200, 200), computeInterestRect(pai ntLayer->graphicsLayerBacking(), paintLayer->layoutObject())));
97 }
98
99 TEST_F(CompositedLayerMappingTest, 3D90DegRotatedTallInterestRect)
100 {
101 // It's rotated 90 degrees about the X axis, which means its visual content rect is empty, and so the interest rect is the
102 // default (0, 0, 4000, 4000) intersected with the layer bounds.
103 setBodyInnerHTML(
104 "<div id='target' style='width: 200px; height: 10000px; will-change: tra nsform; transform: rotateY(90deg)'></div>");
105
106 document().view()->updateAllLifecyclePhases();
107 Element* element = document().getElementById("target");
108 PaintLayer* paintLayer = toLayoutBoxModelObject(element->layoutObject())->la yer();
109 ASSERT_TRUE(!!paintLayer->graphicsLayerBacking());
110 EXPECT_TRUE(checkRectsEqual(IntRect(0, 0, 200, 4000), computeInterestRect(pa intLayer->graphicsLayerBacking(), paintLayer->layoutObject())));
111 }
112
113 TEST_F(CompositedLayerMappingTest, 3D45DegRotatedTallInterestRect)
114 {
115 // It's rotated 90 degrees about the X axis, which means its visual content rect is empty, and so the interest rect is the
ajuma 2015/10/09 22:03:55 Comment doesn't match test.
chrishtr 2015/10/09 22:28:19 Fixed.
116 // default (0, 0, 4000, 4000) intersected with the layer bounds.
117 setBodyInnerHTML(
118 "<div id='target' style='width: 200px; height: 10000px; will-change: tra nsform; transform: rotateY(45deg)'></div>");
119
120 document().view()->updateAllLifecyclePhases();
121 Element* element = document().getElementById("target");
122 PaintLayer* paintLayer = toLayoutBoxModelObject(element->layoutObject())->la yer();
123 ASSERT_TRUE(!!paintLayer->graphicsLayerBacking());
124 EXPECT_TRUE(checkRectsEqual(IntRect(0, 0, 200, 4592), computeInterestRect(pa intLayer->graphicsLayerBacking(), paintLayer->layoutObject())));
125 }
126
127 TEST_F(CompositedLayerMappingTest, RotatedTallInterestRect)
128 {
129 setBodyInnerHTML(
130 "<div id='target' style='width: 200px; height: 10000px; will-change: tra nsform; transform: rotateZ(45deg)'></div>");
131
132 document().view()->updateAllLifecyclePhases();
133 Element* element = document().getElementById("target");
134 PaintLayer* paintLayer = toLayoutBoxModelObject(element->layoutObject())->la yer();
135 ASSERT_TRUE(!!paintLayer->graphicsLayerBacking());
136 EXPECT_TRUE(checkRectsEqual(IntRect(0, 0, 200, 4000), computeInterestRect(pa intLayer->graphicsLayerBacking(), paintLayer->layoutObject())));
137 }
138
139 TEST_F(CompositedLayerMappingTest, WideLayerInterestRect)
140 {
141 setBodyInnerHTML("<div id='target' style='width: 10000px; height: 200px; wil l-change: transform'></div>");
142
143 document().view()->updateAllLifecyclePhases();
144 Element* element = document().getElementById("target");
145 PaintLayer* paintLayer = toLayoutBoxModelObject(element->layoutObject())->la yer();
146 ASSERT_TRUE(!!paintLayer->graphicsLayerBacking());
147 // Screen-space visible content rect is [8, 8, 800, 200] (the screen is 800x 600).
148 // Mapping back to local, adding 4000px in all directions, then clipping, yi elds this rect.
149 EXPECT_TRUE(checkRectsEqual(IntRect(0, 0, 4792, 200), computeInterestRect(pa intLayer->graphicsLayerBacking(), paintLayer->layoutObject())));
150 }
151
152 TEST_F(CompositedLayerMappingTest, FixedPositionInterestRect)
153 {
154 setBodyInnerHTML(
155 "<div id='target' style='width: 300px; height: 400px; will-change: trans form; position: fixed; top: 100px; left: 200px;'></div>");
156
157 document().view()->updateAllLifecyclePhases();
158 Element* element = document().getElementById("target");
159 PaintLayer* paintLayer = toLayoutBoxModelObject(element->layoutObject())->la yer();
160 ASSERT_TRUE(!!paintLayer->graphicsLayerBacking());
161 EXPECT_TRUE(checkRectsEqual(IntRect(0, 0, 300, 400), computeInterestRect(pai ntLayer->graphicsLayerBacking(), paintLayer->layoutObject())));
162 }
163
164 TEST_F(CompositedLayerMappingTest, LayerOffscreenInterestRect)
165 {
166 setBodyInnerHTML(
167 "<div id='target' style='width: 200px; height: 200px; will-change: trans form; position: absolute; top: 9000px; left: 0px;'>"
168 "</div>");
169
170 document().view()->updateAllLifecyclePhases();
171 Element* element = document().getElementById("target");
172 PaintLayer* paintLayer = toLayoutBoxModelObject(element->layoutObject())->la yer();
173 ASSERT_TRUE(!!paintLayer->graphicsLayerBacking());
174 // Offscreen layers are painted as usual.
175 EXPECT_TRUE(checkRectsEqual(IntRect(0, 0, 200, 200), computeInterestRect(pai ntLayer->graphicsLayerBacking(), paintLayer->layoutObject())));
176 }
177
178 TEST_F(CompositedLayerMappingTest, ScrollingLayerInterestRect)
179 {
180 setBodyInnerHTML(
181 "<style>div::-webkit-scrollbar{ width: 5px; }</style>"
182 "<div id='target' style='width: 200px; height: 200px; will-change: trans form; overflow: scroll'>"
183 "<div style='width: 100px; height: 10000px'></div></div>");
184
185 document().view()->updateAllLifecyclePhases();
186 Element* element = document().getElementById("target");
187 PaintLayer* paintLayer = toLayoutBoxModelObject(element->layoutObject())->la yer();
188 ASSERT_TRUE(paintLayer->graphicsLayerBacking());
189 // Offscreen layers are painted as usual.
190 ASSERT_TRUE(paintLayer->compositedLayerMapping()->scrollingLayer());
191 EXPECT_TRUE(checkRectsEqual(IntRect(0, 0, 195, 4592), computeInterestRect(pa intLayer->graphicsLayerBackingForScrolling(), paintLayer->layoutObject())));
192 }
193
194 TEST_F(CompositedLayerMappingTest, ClippedBigLayer)
195 {
196 setBodyInnerHTML(
197 "<div style='width: 1px; height: 1px; overflow: hidden'>"
198 "<div id='target' style='width: 10000px; height: 10000px; will-change: t ransform'></div></div>");
199
200 document().view()->updateAllLifecyclePhases();
201 Element* element = document().getElementById("target");
202 PaintLayer* paintLayer = toLayoutBoxModelObject(element->layoutObject())->la yer();
203 ASSERT_TRUE(paintLayer->graphicsLayerBacking());
204 // Offscreen layers are painted as usual.
205 EXPECT_TRUE(checkRectsEqual(IntRect(0, 0, 4001, 4001), computeInterestRect(p aintLayer->graphicsLayerBacking(), paintLayer->layoutObject())));
206 }
207
208 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698