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

Side by Side Diff: third_party/WebKit/Source/platform/graphics/paint/PaintControllerTest.cpp

Issue 2277443003: [SPv2] Rasterization invalidation (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: - Created 4 years, 3 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
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "platform/graphics/paint/PaintController.h" 5 #include "platform/graphics/paint/PaintController.h"
6 6
7 #include "platform/RuntimeEnabledFeatures.h" 7 #include "platform/RuntimeEnabledFeatures.h"
8 #include "platform/graphics/GraphicsContext.h" 8 #include "platform/graphics/GraphicsContext.h"
9 #include "platform/graphics/paint/ClipPathDisplayItem.h" 9 #include "platform/graphics/paint/ClipPathDisplayItem.h"
10 #include "platform/graphics/paint/ClipPathRecorder.h" 10 #include "platform/graphics/paint/ClipPathRecorder.h"
11 #include "platform/graphics/paint/ClipRecorder.h" 11 #include "platform/graphics/paint/ClipRecorder.h"
12 #include "platform/graphics/paint/CompositingRecorder.h" 12 #include "platform/graphics/paint/CompositingRecorder.h"
13 #include "platform/graphics/paint/DrawingDisplayItem.h" 13 #include "platform/graphics/paint/DrawingDisplayItem.h"
14 #include "platform/graphics/paint/DrawingRecorder.h" 14 #include "platform/graphics/paint/DrawingRecorder.h"
15 #include "platform/graphics/paint/SubsequenceRecorder.h" 15 #include "platform/graphics/paint/SubsequenceRecorder.h"
16 #include "platform/testing/FakeDisplayItemClient.h" 16 #include "platform/testing/FakeDisplayItemClient.h"
17 #include "testing/gmock/include/gmock/gmock.h"
17 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
18 #include <memory> 19 #include <memory>
19 20
21 using testing::UnorderedElementsAre;
22
20 namespace blink { 23 namespace blink {
21 24
22 class PaintControllerTestBase : public testing::Test { 25 class PaintControllerTestBase : public testing::Test {
23 public: 26 public:
24 PaintControllerTestBase() 27 PaintControllerTestBase()
25 : m_paintController(PaintController::create()) { } 28 : m_paintController(PaintController::create()) { }
26 29
27 IntRect visualRect(const PaintArtifact& paintArtifact, size_t index) 30 IntRect visualRect(const PaintArtifact& paintArtifact, size_t index)
28 { 31 {
29 return paintArtifact.getDisplayItemList().visualRect(index); 32 return paintArtifact.getDisplayItemList().visualRect(index);
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 IntRect rect(0, 0, 10, 10); 94 IntRect rect(0, 0, 10, 10);
92 context.drawRect(rect); 95 context.drawRect(rect);
93 } 96 }
94 97
95 void drawClippedRect(GraphicsContext& context, const FakeDisplayItemClient& clie nt, DisplayItem::Type clipType, DisplayItem::Type drawingType, const FloatRect& bound) 98 void drawClippedRect(GraphicsContext& context, const FakeDisplayItemClient& clie nt, DisplayItem::Type clipType, DisplayItem::Type drawingType, const FloatRect& bound)
96 { 99 {
97 ClipRecorder clipRecorder(context, client, clipType, IntRect(1, 1, 9, 9)); 100 ClipRecorder clipRecorder(context, client, clipType, IntRect(1, 1, 9, 9));
98 drawRect(context, client, drawingType, bound); 101 drawRect(context, client, drawingType, bound);
99 } 102 }
100 103
104 enum TestConfigurations {
105 SPv1,
106 SPv2,
101 #if DCHECK_IS_ON() 107 #if DCHECK_IS_ON()
108 UnderInvalidationCheckingSPv1,
109 UnderInvalidationCheckingSPv2,
110 #endif
111 };
112
102 // Tests using this class will be tested with under-invalidation-checking enable d and disabled. 113 // Tests using this class will be tested with under-invalidation-checking enable d and disabled.
103 class PaintControllerTest : public PaintControllerTestBase, public testing::With ParamInterface<bool> { 114 class PaintControllerTest : public PaintControllerTestBase, public testing::With ParamInterface<TestConfigurations> {
115 public:
116 PaintControllerTest()
117 : m_rootPaintPropertyClient("root")
118 , m_rootPaintChunkId(m_rootPaintPropertyClient, DisplayItem::Uninitializ edType)
119 { }
120
104 protected: 121 protected:
105 void SetUp() override 122 void SetUp() override
106 { 123 {
107 if (GetParam()) 124 switch (GetParam()) {
125 case SPv1:
126 break;
127 case SPv2:
128 RuntimeEnabledFeatures::setSlimmingPaintV2Enabled(true);
129 break;
130 #if DCHECK_IS_ON()
131 case UnderInvalidationCheckingSPv1:
108 RuntimeEnabledFeatures::setSlimmingPaintUnderInvalidationCheckingEna bled(true); 132 RuntimeEnabledFeatures::setSlimmingPaintUnderInvalidationCheckingEna bled(true);
133 break;
134 case UnderInvalidationCheckingSPv2:
135 RuntimeEnabledFeatures::setSlimmingPaintV2Enabled(true);
136 RuntimeEnabledFeatures::setSlimmingPaintUnderInvalidationCheckingEna bled(true);
137 break;
138 #endif
139 }
109 } 140 }
141
142 FakeDisplayItemClient m_rootPaintPropertyClient;
143 PaintChunk::Id m_rootPaintChunkId;
110 }; 144 };
111 145
112 INSTANTIATE_TEST_CASE_P(All, PaintControllerTest, ::testing::Bool()); 146 #if DCHECK_IS_ON()
113 #define TEST_F_OR_P TEST_P 147 INSTANTIATE_TEST_CASE_P(All, PaintControllerTest, ::testing::Values(SPv1, SPv2, UnderInvalidationCheckingSPv1, UnderInvalidationCheckingSPv2));
114 #else 148 #else
115 // Under-invalidation checking is only available when DCHECK_IS_ON(). 149 INSTANTIATE_TEST_CASE_P(All, PaintControllerTest, ::testing::Values(SPv1, SPv2)) ;
116 using PaintControllerTest = PaintControllerTestBase;
117 #define TEST_F_OR_P TEST_F
118 #endif 150 #endif
119 151
120 TEST_F_OR_P(PaintControllerTest, NestedRecorders) 152 TEST_P(PaintControllerTest, NestedRecorders)
121 { 153 {
122 GraphicsContext context(getPaintController()); 154 GraphicsContext context(getPaintController());
123 155 FakeDisplayItemClient client("client", LayoutRect(100, 100, 200, 200));
124 FakeDisplayItemClient client("client"); 156 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled())
157 getPaintController().updateCurrentPaintChunkProperties(&m_rootPaintChunk Id, PaintChunkProperties());
125 158
126 drawClippedRect(context, client, clipType, backgroundDrawingType, FloatRect( 100, 100, 200, 200)); 159 drawClippedRect(context, client, clipType, backgroundDrawingType, FloatRect( 100, 100, 200, 200));
127 getPaintController().commitNewDisplayItems(); 160 getPaintController().commitNewDisplayItems();
128 161
129 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 3, 162 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 3,
130 TestDisplayItem(client, clipType), 163 TestDisplayItem(client, clipType),
131 TestDisplayItem(client, backgroundDrawingType), 164 TestDisplayItem(client, backgroundDrawingType),
132 TestDisplayItem(client, DisplayItem::clipTypeToEndClipType(clipType))); 165 TestDisplayItem(client, DisplayItem::clipTypeToEndClipType(clipType)));
166
167 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
168 EXPECT_EQ(1u, getPaintController().paintChunks().size());
169 EXPECT_THAT(getPaintController().paintChunks()[0].rasterInvalidationRect s, UnorderedElementsAre(
170 FloatRect(LayoutRect::infiniteIntRect())));
171 }
133 } 172 }
134 173
135 TEST_F_OR_P(PaintControllerTest, UpdateBasic) 174 TEST_P(PaintControllerTest, UpdateBasic)
136 { 175 {
137 FakeDisplayItemClient first("first"); 176 FakeDisplayItemClient first("first", LayoutRect(100, 100, 300, 300));
138 FakeDisplayItemClient second("second"); 177 FakeDisplayItemClient second("second", LayoutRect(100, 100, 200, 200));
139 GraphicsContext context(getPaintController()); 178 GraphicsContext context(getPaintController());
179 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled())
180 getPaintController().updateCurrentPaintChunkProperties(&m_rootPaintChunk Id, PaintChunkProperties());
140 181
141 drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 300, 300 )); 182 drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 300, 300 ));
142 drawRect(context, second, backgroundDrawingType, FloatRect(100, 100, 200, 20 0)); 183 drawRect(context, second, backgroundDrawingType, FloatRect(100, 100, 200, 20 0));
143 drawRect(context, first, foregroundDrawingType, FloatRect(100, 100, 300, 300 )); 184 drawRect(context, first, foregroundDrawingType, FloatRect(100, 100, 300, 300 ));
144 185
145 EXPECT_EQ(0, numCachedNewItems()); 186 EXPECT_EQ(0, numCachedNewItems());
146 187
147 getPaintController().commitNewDisplayItems(); 188 getPaintController().commitNewDisplayItems();
148 189
149 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 3, 190 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 3,
150 TestDisplayItem(first, backgroundDrawingType), 191 TestDisplayItem(first, backgroundDrawingType),
151 TestDisplayItem(second, backgroundDrawingType), 192 TestDisplayItem(second, backgroundDrawingType),
152 TestDisplayItem(first, foregroundDrawingType)); 193 TestDisplayItem(first, foregroundDrawingType));
153 194
195 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
196 EXPECT_EQ(1u, getPaintController().paintChunks().size());
197 EXPECT_THAT(getPaintController().paintChunks()[0].rasterInvalidationRect s, UnorderedElementsAre(
198 FloatRect(LayoutRect::infiniteIntRect())));
199
200 getPaintController().updateCurrentPaintChunkProperties(&m_rootPaintChunk Id, PaintChunkProperties());
201 }
202
154 drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 300, 300 )); 203 drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 300, 300 ));
155 drawRect(context, first, foregroundDrawingType, FloatRect(100, 100, 300, 300 )); 204 drawRect(context, first, foregroundDrawingType, FloatRect(100, 100, 300, 300 ));
156 205
157 EXPECT_EQ(2, numCachedNewItems()); 206 EXPECT_EQ(2, numCachedNewItems());
158 #if DCHECK_IS_ON() 207 #if DCHECK_IS_ON()
159 EXPECT_EQ(2, numSequentialMatches()); 208 EXPECT_EQ(2, numSequentialMatches());
160 EXPECT_EQ(0, numOutOfOrderMatches()); 209 EXPECT_EQ(0, numOutOfOrderMatches());
161 EXPECT_EQ(1, numIndexedItems()); 210 EXPECT_EQ(1, numIndexedItems());
162 #endif 211 #endif
163 212
164 getPaintController().commitNewDisplayItems(); 213 getPaintController().commitNewDisplayItems();
165 214
166 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 2, 215 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 2,
167 TestDisplayItem(first, backgroundDrawingType), 216 TestDisplayItem(first, backgroundDrawingType),
168 TestDisplayItem(first, foregroundDrawingType)); 217 TestDisplayItem(first, foregroundDrawingType));
218
219 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
220 EXPECT_EQ(1u, getPaintController().paintChunks().size());
221 EXPECT_THAT(getPaintController().paintChunks()[0].rasterInvalidationRect s, UnorderedElementsAre(
222 FloatRect(100, 100, 200, 200))); // |second| disappeared from the ch unk.
223 }
169 } 224 }
170 225
171 TEST_F_OR_P(PaintControllerTest, UpdateSwapOrder) 226 TEST_P(PaintControllerTest, UpdateSwapOrder)
172 { 227 {
173 FakeDisplayItemClient first("first"); 228 FakeDisplayItemClient first("first", LayoutRect(100, 100, 100, 100));
174 FakeDisplayItemClient second("second"); 229 FakeDisplayItemClient second("second", LayoutRect(100, 100, 50, 200));
175 FakeDisplayItemClient unaffected("unaffected"); 230 FakeDisplayItemClient unaffected("unaffected", LayoutRect(300, 300, 10, 10)) ;
176 GraphicsContext context(getPaintController()); 231 GraphicsContext context(getPaintController());
232 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled())
233 getPaintController().updateCurrentPaintChunkProperties(&m_rootPaintChunk Id, PaintChunkProperties());
177 234
178 drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 100, 100 )); 235 drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 100, 100 ));
179 drawRect(context, first, foregroundDrawingType, FloatRect(100, 100, 100, 100 )); 236 drawRect(context, first, foregroundDrawingType, FloatRect(100, 100, 100, 100 ));
180 drawRect(context, second, backgroundDrawingType, FloatRect(100, 100, 50, 200 )); 237 drawRect(context, second, backgroundDrawingType, FloatRect(100, 100, 50, 200 ));
181 drawRect(context, second, foregroundDrawingType, FloatRect(100, 100, 50, 200 )); 238 drawRect(context, second, foregroundDrawingType, FloatRect(100, 100, 50, 200 ));
182 drawRect(context, unaffected, backgroundDrawingType, FloatRect(300, 300, 10, 10)); 239 drawRect(context, unaffected, backgroundDrawingType, FloatRect(300, 300, 10, 10));
183 drawRect(context, unaffected, foregroundDrawingType, FloatRect(300, 300, 10, 10)); 240 drawRect(context, unaffected, foregroundDrawingType, FloatRect(300, 300, 10, 10));
184 getPaintController().commitNewDisplayItems(); 241 getPaintController().commitNewDisplayItems();
242 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled())
243 getPaintController().updateCurrentPaintChunkProperties(&m_rootPaintChunk Id, PaintChunkProperties());
185 244
186 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 6, 245 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 6,
187 TestDisplayItem(first, backgroundDrawingType), 246 TestDisplayItem(first, backgroundDrawingType),
188 TestDisplayItem(first, foregroundDrawingType), 247 TestDisplayItem(first, foregroundDrawingType),
189 TestDisplayItem(second, backgroundDrawingType), 248 TestDisplayItem(second, backgroundDrawingType),
190 TestDisplayItem(second, foregroundDrawingType), 249 TestDisplayItem(second, foregroundDrawingType),
191 TestDisplayItem(unaffected, backgroundDrawingType), 250 TestDisplayItem(unaffected, backgroundDrawingType),
192 TestDisplayItem(unaffected, foregroundDrawingType)); 251 TestDisplayItem(unaffected, foregroundDrawingType));
193 252
194 drawRect(context, second, backgroundDrawingType, FloatRect(100, 100, 50, 200 )); 253 drawRect(context, second, backgroundDrawingType, FloatRect(100, 100, 50, 200 ));
(...skipping 12 matching lines...) Expand all
207 266
208 getPaintController().commitNewDisplayItems(); 267 getPaintController().commitNewDisplayItems();
209 268
210 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 6, 269 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 6,
211 TestDisplayItem(second, backgroundDrawingType), 270 TestDisplayItem(second, backgroundDrawingType),
212 TestDisplayItem(second, foregroundDrawingType), 271 TestDisplayItem(second, foregroundDrawingType),
213 TestDisplayItem(first, backgroundDrawingType), 272 TestDisplayItem(first, backgroundDrawingType),
214 TestDisplayItem(first, foregroundDrawingType), 273 TestDisplayItem(first, foregroundDrawingType),
215 TestDisplayItem(unaffected, backgroundDrawingType), 274 TestDisplayItem(unaffected, backgroundDrawingType),
216 TestDisplayItem(unaffected, foregroundDrawingType)); 275 TestDisplayItem(unaffected, foregroundDrawingType));
276
277 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
278 EXPECT_EQ(1u, getPaintController().paintChunks().size());
279 // TODO(wangxianzhu): In real world we invalidate clients with reordered display items.
280 // Need to support raster invalidation for recordered display items with out invalidating clients.
281 EXPECT_THAT(getPaintController().paintChunks()[0].rasterInvalidationRect s, UnorderedElementsAre());
282 }
217 } 283 }
218 284
219 TEST_F_OR_P(PaintControllerTest, UpdateSwapOrderWithInvalidation) 285 TEST_P(PaintControllerTest, UpdateSwapOrderWithInvalidation)
220 { 286 {
221 FakeDisplayItemClient first("first"); 287 FakeDisplayItemClient first("first", LayoutRect(100, 100, 100, 100));
222 FakeDisplayItemClient second("second"); 288 FakeDisplayItemClient second("second", LayoutRect(100, 100, 50, 200));
223 FakeDisplayItemClient unaffected("unaffected"); 289 FakeDisplayItemClient unaffected("unaffected", LayoutRect(300, 300, 10, 10)) ;
224 GraphicsContext context(getPaintController()); 290 GraphicsContext context(getPaintController());
291 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled())
292 getPaintController().updateCurrentPaintChunkProperties(&m_rootPaintChunk Id, PaintChunkProperties());
225 293
226 drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 100, 100 )); 294 drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 100, 100 ));
227 drawRect(context, first, foregroundDrawingType, FloatRect(100, 100, 100, 100 )); 295 drawRect(context, first, foregroundDrawingType, FloatRect(100, 100, 100, 100 ));
228 drawRect(context, second, backgroundDrawingType, FloatRect(100, 100, 50, 200 )); 296 drawRect(context, second, backgroundDrawingType, FloatRect(100, 100, 50, 200 ));
229 drawRect(context, second, foregroundDrawingType, FloatRect(100, 100, 50, 200 )); 297 drawRect(context, second, foregroundDrawingType, FloatRect(100, 100, 50, 200 ));
230 drawRect(context, unaffected, backgroundDrawingType, FloatRect(300, 300, 10, 10)); 298 drawRect(context, unaffected, backgroundDrawingType, FloatRect(300, 300, 10, 10));
231 drawRect(context, unaffected, foregroundDrawingType, FloatRect(300, 300, 10, 10)); 299 drawRect(context, unaffected, foregroundDrawingType, FloatRect(300, 300, 10, 10));
232 getPaintController().commitNewDisplayItems(); 300 getPaintController().commitNewDisplayItems();
233 301
234 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 6, 302 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 6,
235 TestDisplayItem(first, backgroundDrawingType), 303 TestDisplayItem(first, backgroundDrawingType),
236 TestDisplayItem(first, foregroundDrawingType), 304 TestDisplayItem(first, foregroundDrawingType),
237 TestDisplayItem(second, backgroundDrawingType), 305 TestDisplayItem(second, backgroundDrawingType),
238 TestDisplayItem(second, foregroundDrawingType), 306 TestDisplayItem(second, foregroundDrawingType),
239 TestDisplayItem(unaffected, backgroundDrawingType), 307 TestDisplayItem(unaffected, backgroundDrawingType),
240 TestDisplayItem(unaffected, foregroundDrawingType)); 308 TestDisplayItem(unaffected, foregroundDrawingType));
241 309
310 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled())
311 getPaintController().updateCurrentPaintChunkProperties(&m_rootPaintChunk Id, PaintChunkProperties());
312
242 first.setDisplayItemsUncached(); 313 first.setDisplayItemsUncached();
243 drawRect(context, second, backgroundDrawingType, FloatRect(100, 100, 50, 200 )); 314 drawRect(context, second, backgroundDrawingType, FloatRect(100, 100, 50, 200 ));
244 drawRect(context, second, foregroundDrawingType, FloatRect(100, 100, 50, 200 )); 315 drawRect(context, second, foregroundDrawingType, FloatRect(100, 100, 50, 200 ));
245 drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 100, 100 )); 316 drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 100, 100 ));
246 drawRect(context, first, foregroundDrawingType, FloatRect(100, 100, 100, 100 )); 317 drawRect(context, first, foregroundDrawingType, FloatRect(100, 100, 100, 100 ));
247 drawRect(context, unaffected, backgroundDrawingType, FloatRect(300, 300, 10, 10)); 318 drawRect(context, unaffected, backgroundDrawingType, FloatRect(300, 300, 10, 10));
248 drawRect(context, unaffected, foregroundDrawingType, FloatRect(300, 300, 10, 10)); 319 drawRect(context, unaffected, foregroundDrawingType, FloatRect(300, 300, 10, 10));
249 320
250 EXPECT_EQ(4, numCachedNewItems()); 321 EXPECT_EQ(4, numCachedNewItems());
251 #if DCHECK_IS_ON() 322 #if DCHECK_IS_ON()
252 EXPECT_EQ(4, numSequentialMatches()); // second, unaffected 323 EXPECT_EQ(4, numSequentialMatches()); // second, unaffected
253 EXPECT_EQ(0, numOutOfOrderMatches()); 324 EXPECT_EQ(0, numOutOfOrderMatches());
254 EXPECT_EQ(2, numIndexedItems()); 325 EXPECT_EQ(2, numIndexedItems());
255 #endif 326 #endif
256 327
257 getPaintController().commitNewDisplayItems(); 328 getPaintController().commitNewDisplayItems();
258 329
259 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 6, 330 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 6,
260 TestDisplayItem(second, backgroundDrawingType), 331 TestDisplayItem(second, backgroundDrawingType),
261 TestDisplayItem(second, foregroundDrawingType), 332 TestDisplayItem(second, foregroundDrawingType),
262 TestDisplayItem(first, backgroundDrawingType), 333 TestDisplayItem(first, backgroundDrawingType),
263 TestDisplayItem(first, foregroundDrawingType), 334 TestDisplayItem(first, foregroundDrawingType),
264 TestDisplayItem(unaffected, backgroundDrawingType), 335 TestDisplayItem(unaffected, backgroundDrawingType),
265 TestDisplayItem(unaffected, foregroundDrawingType)); 336 TestDisplayItem(unaffected, foregroundDrawingType));
337
338 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
339 EXPECT_EQ(1u, getPaintController().paintChunks().size());
340 EXPECT_THAT(getPaintController().paintChunks()[0].rasterInvalidationRect s, UnorderedElementsAre(
341 FloatRect(100, 100, 100, 100), // Old bounds of |first|.
342 FloatRect(100, 100, 100, 100))); // New bounds of |first|.
343 }
266 } 344 }
267 345
268 TEST_F_OR_P(PaintControllerTest, UpdateNewItemInMiddle) 346 TEST_P(PaintControllerTest, UpdateNewItemInMiddle)
269 { 347 {
270 FakeDisplayItemClient first("first"); 348 FakeDisplayItemClient first("first", LayoutRect(100, 100, 100, 100));
271 FakeDisplayItemClient second("second"); 349 FakeDisplayItemClient second("second", LayoutRect(100, 100, 50, 200));
272 FakeDisplayItemClient third("third"); 350 FakeDisplayItemClient third("third", LayoutRect(125, 100, 200, 50));
273 GraphicsContext context(getPaintController()); 351 GraphicsContext context(getPaintController());
352 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled())
353 getPaintController().updateCurrentPaintChunkProperties(&m_rootPaintChunk Id, PaintChunkProperties());
274 354
275 drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 100, 100 )); 355 drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 100, 100 ));
276 drawRect(context, second, backgroundDrawingType, FloatRect(100, 100, 50, 200 )); 356 drawRect(context, second, backgroundDrawingType, FloatRect(100, 100, 50, 200 ));
277 getPaintController().commitNewDisplayItems(); 357 getPaintController().commitNewDisplayItems();
278 358
279 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 2, 359 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 2,
280 TestDisplayItem(first, backgroundDrawingType), 360 TestDisplayItem(first, backgroundDrawingType),
281 TestDisplayItem(second, backgroundDrawingType)); 361 TestDisplayItem(second, backgroundDrawingType));
282 362
363 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled())
364 getPaintController().updateCurrentPaintChunkProperties(&m_rootPaintChunk Id, PaintChunkProperties());
365
283 drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 100, 100 )); 366 drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 100, 100 ));
284 drawRect(context, third, backgroundDrawingType, FloatRect(125, 100, 200, 50) ); 367 drawRect(context, third, backgroundDrawingType, FloatRect(125, 100, 200, 50) );
285 drawRect(context, second, backgroundDrawingType, FloatRect(100, 100, 50, 200 )); 368 drawRect(context, second, backgroundDrawingType, FloatRect(100, 100, 50, 200 ));
286 369
287 EXPECT_EQ(2, numCachedNewItems()); 370 EXPECT_EQ(2, numCachedNewItems());
288 #if DCHECK_IS_ON() 371 #if DCHECK_IS_ON()
289 EXPECT_EQ(2, numSequentialMatches()); // first, second 372 EXPECT_EQ(2, numSequentialMatches()); // first, second
290 EXPECT_EQ(0, numOutOfOrderMatches()); 373 EXPECT_EQ(0, numOutOfOrderMatches());
291 EXPECT_EQ(0, numIndexedItems()); 374 EXPECT_EQ(0, numIndexedItems());
292 #endif 375 #endif
293 376
294 getPaintController().commitNewDisplayItems(); 377 getPaintController().commitNewDisplayItems();
295 378
296 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 3, 379 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 3,
297 TestDisplayItem(first, backgroundDrawingType), 380 TestDisplayItem(first, backgroundDrawingType),
298 TestDisplayItem(third, backgroundDrawingType), 381 TestDisplayItem(third, backgroundDrawingType),
299 TestDisplayItem(second, backgroundDrawingType)); 382 TestDisplayItem(second, backgroundDrawingType));
383
384 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
385 EXPECT_EQ(1u, getPaintController().paintChunks().size());
386 EXPECT_THAT(getPaintController().paintChunks()[0].rasterInvalidationRect s, UnorderedElementsAre(
387 FloatRect(125, 100, 200, 50))); // |third| newly appeared in the chu nk.
388 }
300 } 389 }
301 390
302 TEST_F_OR_P(PaintControllerTest, UpdateInvalidationWithPhases) 391 TEST_P(PaintControllerTest, UpdateInvalidationWithPhases)
303 { 392 {
304 FakeDisplayItemClient first("first"); 393 FakeDisplayItemClient first("first", LayoutRect(100, 100, 100, 100));
305 FakeDisplayItemClient second("second"); 394 FakeDisplayItemClient second("second", LayoutRect(100, 100, 50, 200));
306 FakeDisplayItemClient third("third"); 395 FakeDisplayItemClient third("third", LayoutRect(300, 100, 50, 50));
307 GraphicsContext context(getPaintController()); 396 GraphicsContext context(getPaintController());
397 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled())
398 getPaintController().updateCurrentPaintChunkProperties(&m_rootPaintChunk Id, PaintChunkProperties());
308 399
309 drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 100, 100 )); 400 drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 100, 100 ));
310 drawRect(context, second, backgroundDrawingType, FloatRect(100, 100, 50, 200 )); 401 drawRect(context, second, backgroundDrawingType, FloatRect(100, 100, 50, 200 ));
311 drawRect(context, third, backgroundDrawingType, FloatRect(300, 100, 50, 50)) ; 402 drawRect(context, third, backgroundDrawingType, FloatRect(300, 100, 50, 50)) ;
312 drawRect(context, first, foregroundDrawingType, FloatRect(100, 100, 100, 100 )); 403 drawRect(context, first, foregroundDrawingType, FloatRect(100, 100, 100, 100 ));
313 drawRect(context, second, foregroundDrawingType, FloatRect(100, 100, 50, 200 )); 404 drawRect(context, second, foregroundDrawingType, FloatRect(100, 100, 50, 200 ));
314 drawRect(context, third, foregroundDrawingType, FloatRect(300, 100, 50, 50)) ; 405 drawRect(context, third, foregroundDrawingType, FloatRect(300, 100, 50, 50)) ;
315 getPaintController().commitNewDisplayItems(); 406 getPaintController().commitNewDisplayItems();
316 407
317 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 6, 408 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 6,
318 TestDisplayItem(first, backgroundDrawingType), 409 TestDisplayItem(first, backgroundDrawingType),
319 TestDisplayItem(second, backgroundDrawingType), 410 TestDisplayItem(second, backgroundDrawingType),
320 TestDisplayItem(third, backgroundDrawingType), 411 TestDisplayItem(third, backgroundDrawingType),
321 TestDisplayItem(first, foregroundDrawingType), 412 TestDisplayItem(first, foregroundDrawingType),
322 TestDisplayItem(second, foregroundDrawingType), 413 TestDisplayItem(second, foregroundDrawingType),
323 TestDisplayItem(third, foregroundDrawingType)); 414 TestDisplayItem(third, foregroundDrawingType));
324 415
416 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled())
417 getPaintController().updateCurrentPaintChunkProperties(&m_rootPaintChunk Id, PaintChunkProperties());
418
325 second.setDisplayItemsUncached(); 419 second.setDisplayItemsUncached();
326 drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 100, 100 )); 420 drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 100, 100 ));
327 drawRect(context, second, backgroundDrawingType, FloatRect(100, 100, 50, 200 )); 421 drawRect(context, second, backgroundDrawingType, FloatRect(100, 100, 50, 200 ));
328 drawRect(context, third, backgroundDrawingType, FloatRect(300, 100, 50, 50)) ; 422 drawRect(context, third, backgroundDrawingType, FloatRect(300, 100, 50, 50)) ;
329 drawRect(context, first, foregroundDrawingType, FloatRect(100, 100, 100, 100 )); 423 drawRect(context, first, foregroundDrawingType, FloatRect(100, 100, 100, 100 ));
330 drawRect(context, second, foregroundDrawingType, FloatRect(100, 100, 50, 200 )); 424 drawRect(context, second, foregroundDrawingType, FloatRect(100, 100, 50, 200 ));
331 drawRect(context, third, foregroundDrawingType, FloatRect(300, 100, 50, 50)) ; 425 drawRect(context, third, foregroundDrawingType, FloatRect(300, 100, 50, 50)) ;
332 426
333 EXPECT_EQ(4, numCachedNewItems()); 427 EXPECT_EQ(4, numCachedNewItems());
334 #if DCHECK_IS_ON() 428 #if DCHECK_IS_ON()
335 EXPECT_EQ(4, numSequentialMatches()); 429 EXPECT_EQ(4, numSequentialMatches());
336 EXPECT_EQ(0, numOutOfOrderMatches()); 430 EXPECT_EQ(0, numOutOfOrderMatches());
337 EXPECT_EQ(2, numIndexedItems()); 431 EXPECT_EQ(2, numIndexedItems());
338 #endif 432 #endif
339 433
340 getPaintController().commitNewDisplayItems(); 434 getPaintController().commitNewDisplayItems();
341 435
342 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 6, 436 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 6,
343 TestDisplayItem(first, backgroundDrawingType), 437 TestDisplayItem(first, backgroundDrawingType),
344 TestDisplayItem(second, backgroundDrawingType), 438 TestDisplayItem(second, backgroundDrawingType),
345 TestDisplayItem(third, backgroundDrawingType), 439 TestDisplayItem(third, backgroundDrawingType),
346 TestDisplayItem(first, foregroundDrawingType), 440 TestDisplayItem(first, foregroundDrawingType),
347 TestDisplayItem(second, foregroundDrawingType), 441 TestDisplayItem(second, foregroundDrawingType),
348 TestDisplayItem(third, foregroundDrawingType)); 442 TestDisplayItem(third, foregroundDrawingType));
443
444 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
445 EXPECT_EQ(1u, getPaintController().paintChunks().size());
446 EXPECT_THAT(getPaintController().paintChunks()[0].rasterInvalidationRect s, UnorderedElementsAre(
447 FloatRect(100, 100, 50, 200), // Old bounds of |second|.
448 FloatRect(100, 100, 50, 200))); // New bounds of |second|.
449 }
349 } 450 }
350 451
351 TEST_F_OR_P(PaintControllerTest, UpdateAddFirstOverlap) 452 TEST_P(PaintControllerTest, UpdateAddFirstOverlap)
352 { 453 {
353 FakeDisplayItemClient first("first"); 454 FakeDisplayItemClient first("first", LayoutRect(100, 100, 150, 150));
354 FakeDisplayItemClient second("second"); 455 FakeDisplayItemClient second("second", LayoutRect(200, 200, 50, 50));
355 GraphicsContext context(getPaintController()); 456 GraphicsContext context(getPaintController());
457 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled())
458 getPaintController().updateCurrentPaintChunkProperties(&m_rootPaintChunk Id, PaintChunkProperties());
356 459
357 drawRect(context, second, backgroundDrawingType, FloatRect(200, 200, 50, 50) ); 460 drawRect(context, second, backgroundDrawingType, FloatRect(200, 200, 50, 50) );
358 drawRect(context, second, foregroundDrawingType, FloatRect(200, 200, 50, 50) ); 461 drawRect(context, second, foregroundDrawingType, FloatRect(200, 200, 50, 50) );
359 getPaintController().commitNewDisplayItems(); 462 getPaintController().commitNewDisplayItems();
360 463
361 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 2, 464 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 2,
362 TestDisplayItem(second, backgroundDrawingType), 465 TestDisplayItem(second, backgroundDrawingType),
363 TestDisplayItem(second, foregroundDrawingType)); 466 TestDisplayItem(second, foregroundDrawingType));
364 467
468 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled())
469 getPaintController().updateCurrentPaintChunkProperties(&m_rootPaintChunk Id, PaintChunkProperties());
470
365 first.setDisplayItemsUncached(); 471 first.setDisplayItemsUncached();
366 second.setDisplayItemsUncached(); 472 second.setDisplayItemsUncached();
473 second.setVisualRect(LayoutRect(150, 150, 100, 100));
367 drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 150, 150 )); 474 drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 150, 150 ));
368 drawRect(context, first, foregroundDrawingType, FloatRect(100, 100, 150, 150 )); 475 drawRect(context, first, foregroundDrawingType, FloatRect(100, 100, 150, 150 ));
369 drawRect(context, second, backgroundDrawingType, FloatRect(200, 200, 50, 50) ); 476 drawRect(context, second, backgroundDrawingType, FloatRect(150, 150, 100, 10 0));
370 drawRect(context, second, foregroundDrawingType, FloatRect(200, 200, 50, 50) ); 477 drawRect(context, second, foregroundDrawingType, FloatRect(150, 150, 100, 10 0));
371 EXPECT_EQ(0, numCachedNewItems()); 478 EXPECT_EQ(0, numCachedNewItems());
372 getPaintController().commitNewDisplayItems(); 479 getPaintController().commitNewDisplayItems();
373 480
374 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 4, 481 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 4,
375 TestDisplayItem(first, backgroundDrawingType), 482 TestDisplayItem(first, backgroundDrawingType),
376 TestDisplayItem(first, foregroundDrawingType), 483 TestDisplayItem(first, foregroundDrawingType),
377 TestDisplayItem(second, backgroundDrawingType), 484 TestDisplayItem(second, backgroundDrawingType),
378 TestDisplayItem(second, foregroundDrawingType)); 485 TestDisplayItem(second, foregroundDrawingType));
379 486
380 first.setDisplayItemsUncached(); 487 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
381 drawRect(context, second, backgroundDrawingType, FloatRect(200, 200, 50, 50) ); 488 EXPECT_EQ(1u, getPaintController().paintChunks().size());
382 drawRect(context, second, foregroundDrawingType, FloatRect(200, 200, 50, 50) ); 489 EXPECT_THAT(getPaintController().paintChunks()[0].rasterInvalidationRect s, UnorderedElementsAre(
490 FloatRect(100, 100, 150, 150), // |first| newly appeared in the chun k.
491 FloatRect(200, 200, 50, 50), // Old bounds of |second|.
492 FloatRect(150, 150, 100, 100))); // New bounds of |second|.
493
494 getPaintController().updateCurrentPaintChunkProperties(&m_rootPaintChunk Id, PaintChunkProperties());
495 }
496
497 drawRect(context, second, backgroundDrawingType, FloatRect(150, 150, 100, 10 0));
498 drawRect(context, second, foregroundDrawingType, FloatRect(150, 150, 100, 10 0));
383 499
384 EXPECT_EQ(2, numCachedNewItems()); 500 EXPECT_EQ(2, numCachedNewItems());
385 #if DCHECK_IS_ON() 501 #if DCHECK_IS_ON()
386 EXPECT_EQ(2, numSequentialMatches()); 502 EXPECT_EQ(2, numSequentialMatches());
387 EXPECT_EQ(0, numOutOfOrderMatches()); 503 EXPECT_EQ(0, numOutOfOrderMatches());
388 EXPECT_EQ(2, numIndexedItems()); 504 EXPECT_EQ(2, numIndexedItems());
389 #endif 505 #endif
390 506
391 getPaintController().commitNewDisplayItems(); 507 getPaintController().commitNewDisplayItems();
392 508
393 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 2, 509 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 2,
394 TestDisplayItem(second, backgroundDrawingType), 510 TestDisplayItem(second, backgroundDrawingType),
395 TestDisplayItem(second, foregroundDrawingType)); 511 TestDisplayItem(second, foregroundDrawingType));
512
513 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
514 EXPECT_EQ(1u, getPaintController().paintChunks().size());
515 EXPECT_THAT(getPaintController().paintChunks()[0].rasterInvalidationRect s, UnorderedElementsAre(
516 FloatRect(100, 100, 150, 150))); // |first| disappeared from the chu nk.
517 }
396 } 518 }
397 519
398 TEST_F_OR_P(PaintControllerTest, UpdateAddLastOverlap) 520 TEST_P(PaintControllerTest, UpdateAddLastOverlap)
399 { 521 {
400 FakeDisplayItemClient first("first"); 522 FakeDisplayItemClient first("first", LayoutRect(100, 100, 150, 150));
401 FakeDisplayItemClient second("second"); 523 FakeDisplayItemClient second("second", LayoutRect(200, 200, 50, 50));
402 GraphicsContext context(getPaintController()); 524 GraphicsContext context(getPaintController());
525 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled())
526 getPaintController().updateCurrentPaintChunkProperties(&m_rootPaintChunk Id, PaintChunkProperties());
403 527
404 drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 150, 150 )); 528 drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 150, 150 ));
405 drawRect(context, first, foregroundDrawingType, FloatRect(100, 100, 150, 150 )); 529 drawRect(context, first, foregroundDrawingType, FloatRect(100, 100, 150, 150 ));
406 getPaintController().commitNewDisplayItems(); 530 getPaintController().commitNewDisplayItems();
407 531
408 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 2, 532 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 2,
409 TestDisplayItem(first, backgroundDrawingType), 533 TestDisplayItem(first, backgroundDrawingType),
410 TestDisplayItem(first, foregroundDrawingType)); 534 TestDisplayItem(first, foregroundDrawingType));
411 535
536 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled())
537 getPaintController().updateCurrentPaintChunkProperties(&m_rootPaintChunk Id, PaintChunkProperties());
538
412 first.setDisplayItemsUncached(); 539 first.setDisplayItemsUncached();
540 first.setVisualRect(LayoutRect(150, 150, 100, 100));
413 second.setDisplayItemsUncached(); 541 second.setDisplayItemsUncached();
414 drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 150, 150 )); 542 drawRect(context, first, backgroundDrawingType, FloatRect(150, 150, 100, 100 ));
415 drawRect(context, first, foregroundDrawingType, FloatRect(100, 100, 150, 150 )); 543 drawRect(context, first, foregroundDrawingType, FloatRect(150, 150, 100, 100 ));
416 drawRect(context, second, backgroundDrawingType, FloatRect(200, 200, 50, 50) ); 544 drawRect(context, second, backgroundDrawingType, FloatRect(200, 200, 50, 50) );
417 drawRect(context, second, foregroundDrawingType, FloatRect(200, 200, 50, 50) ); 545 drawRect(context, second, foregroundDrawingType, FloatRect(200, 200, 50, 50) );
418 EXPECT_EQ(0, numCachedNewItems()); 546 EXPECT_EQ(0, numCachedNewItems());
419 getPaintController().commitNewDisplayItems(); 547 getPaintController().commitNewDisplayItems();
420 548
421 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 4, 549 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 4,
422 TestDisplayItem(first, backgroundDrawingType), 550 TestDisplayItem(first, backgroundDrawingType),
423 TestDisplayItem(first, foregroundDrawingType), 551 TestDisplayItem(first, foregroundDrawingType),
424 TestDisplayItem(second, backgroundDrawingType), 552 TestDisplayItem(second, backgroundDrawingType),
425 TestDisplayItem(second, foregroundDrawingType)); 553 TestDisplayItem(second, foregroundDrawingType));
426 554
555 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
556 EXPECT_EQ(1u, getPaintController().paintChunks().size());
557 EXPECT_THAT(getPaintController().paintChunks()[0].rasterInvalidationRect s, UnorderedElementsAre(
558 FloatRect(100, 100, 150, 150), // Old bounds of |first|.
559 FloatRect(150, 150, 100, 100), // New bounds of |first|.
560 FloatRect(200, 200, 50, 50))); // |second| newly appeared in the chu nk.
561
562 getPaintController().updateCurrentPaintChunkProperties(&m_rootPaintChunk Id, PaintChunkProperties());
563 }
564
427 first.setDisplayItemsUncached(); 565 first.setDisplayItemsUncached();
566 first.setVisualRect(LayoutRect(100, 100, 150, 150));
428 second.setDisplayItemsUncached(); 567 second.setDisplayItemsUncached();
429 drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 150, 150 )); 568 drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 150, 150 ));
430 drawRect(context, first, foregroundDrawingType, FloatRect(100, 100, 150, 150 )); 569 drawRect(context, first, foregroundDrawingType, FloatRect(100, 100, 150, 150 ));
431 EXPECT_EQ(0, numCachedNewItems()); 570 EXPECT_EQ(0, numCachedNewItems());
432 getPaintController().commitNewDisplayItems(); 571 getPaintController().commitNewDisplayItems();
433 572
434 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 2, 573 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 2,
435 TestDisplayItem(first, backgroundDrawingType), 574 TestDisplayItem(first, backgroundDrawingType),
436 TestDisplayItem(first, foregroundDrawingType)); 575 TestDisplayItem(first, foregroundDrawingType));
576
577 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
578 EXPECT_EQ(1u, getPaintController().paintChunks().size());
579 EXPECT_THAT(getPaintController().paintChunks()[0].rasterInvalidationRect s, UnorderedElementsAre(
580 FloatRect(150, 150, 100, 100), // Old bounds of |first|.
581 FloatRect(100, 100, 150, 150), // New bounds of |first|.
582 FloatRect(200, 200, 50, 50))); // |second| disappeared from the chun k.
583 }
437 } 584 }
438 585
439 TEST_F_OR_P(PaintControllerTest, UpdateClip) 586 TEST_P(PaintControllerTest, UpdateClip)
440 { 587 {
441 FakeDisplayItemClient first("first"); 588 FakeDisplayItemClient first("first", LayoutRect(100, 100, 150, 150));
442 FakeDisplayItemClient second("second"); 589 FakeDisplayItemClient second("second", LayoutRect(100, 100, 200, 200));
443 GraphicsContext context(getPaintController()); 590 GraphicsContext context(getPaintController());
444 591
445 { 592 {
593 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
594 PaintChunk::Id id(first, clipType);
595 PaintChunkProperties properties;
596 properties.clip = ClipPaintPropertyNode::create(nullptr, nullptr, Fl oatRoundedRect(1, 1, 2, 2));
597 getPaintController().updateCurrentPaintChunkProperties(&id, properti es);
598 }
446 ClipRecorder clipRecorder(context, first, clipType, IntRect(1, 1, 2, 2)) ; 599 ClipRecorder clipRecorder(context, first, clipType, IntRect(1, 1, 2, 2)) ;
447 drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 150, 150)); 600 drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 150, 150));
448 drawRect(context, second, backgroundDrawingType, FloatRect(100, 100, 150 , 150)); 601 drawRect(context, second, backgroundDrawingType, FloatRect(100, 100, 200 , 200));
449 } 602 }
450 getPaintController().commitNewDisplayItems(); 603 getPaintController().commitNewDisplayItems();
451 604
452 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 4, 605 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 4,
453 TestDisplayItem(first, clipType), 606 TestDisplayItem(first, clipType),
454 TestDisplayItem(first, backgroundDrawingType), 607 TestDisplayItem(first, backgroundDrawingType),
455 TestDisplayItem(second, backgroundDrawingType), 608 TestDisplayItem(second, backgroundDrawingType),
456 TestDisplayItem(first, DisplayItem::clipTypeToEndClipType(clipType))); 609 TestDisplayItem(first, DisplayItem::clipTypeToEndClipType(clipType)));
457 610
611 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled())
612 getPaintController().updateCurrentPaintChunkProperties(&m_rootPaintChunk Id, PaintChunkProperties());
613
458 first.setDisplayItemsUncached(); 614 first.setDisplayItemsUncached();
459 drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 150, 150 )); 615 drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 150, 150 ));
460 drawRect(context, second, backgroundDrawingType, FloatRect(100, 100, 150, 15 0)); 616 drawRect(context, second, backgroundDrawingType, FloatRect(100, 100, 200, 20 0));
461 617
462 EXPECT_EQ(1, numCachedNewItems()); 618 EXPECT_EQ(1, numCachedNewItems());
463 #if DCHECK_IS_ON() 619 #if DCHECK_IS_ON()
464 EXPECT_EQ(1, numSequentialMatches()); 620 EXPECT_EQ(1, numSequentialMatches());
465 EXPECT_EQ(0, numOutOfOrderMatches()); 621 EXPECT_EQ(0, numOutOfOrderMatches());
466 EXPECT_EQ(1, numIndexedItems()); 622 EXPECT_EQ(1, numIndexedItems());
467 #endif 623 #endif
468 624
469 getPaintController().commitNewDisplayItems(); 625 getPaintController().commitNewDisplayItems();
470 626
471 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 2, 627 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 2,
472 TestDisplayItem(first, backgroundDrawingType), 628 TestDisplayItem(first, backgroundDrawingType),
473 TestDisplayItem(second, backgroundDrawingType)); 629 TestDisplayItem(second, backgroundDrawingType));
474 630
631 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
632 EXPECT_EQ(1u, getPaintController().paintChunks().size());
633 EXPECT_THAT(getPaintController().paintChunks()[0].rasterInvalidationRect s, UnorderedElementsAre(
634 FloatRect(LayoutRect::infiniteIntRect()))); // This is a new chunk.
635
636 getPaintController().updateCurrentPaintChunkProperties(&m_rootPaintChunk Id, PaintChunkProperties());
637 }
638
475 second.setDisplayItemsUncached(); 639 second.setDisplayItemsUncached();
476 drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 150, 150 )); 640 drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 150, 150 ));
477 { 641 {
642 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
643 PaintChunk::Id id(second, clipType);
644 PaintChunkProperties properties;
645 properties.clip = ClipPaintPropertyNode::create(nullptr, nullptr, Fl oatRoundedRect(1, 1, 2, 2));
646 getPaintController().updateCurrentPaintChunkProperties(&id, properti es);
647 }
478 ClipRecorder clipRecorder(context, second, clipType, IntRect(1, 1, 2, 2) ); 648 ClipRecorder clipRecorder(context, second, clipType, IntRect(1, 1, 2, 2) );
479 drawRect(context, second, backgroundDrawingType, FloatRect(100, 100, 150 , 150)); 649 drawRect(context, second, backgroundDrawingType, FloatRect(100, 100, 200 , 200));
480 } 650 }
481 getPaintController().commitNewDisplayItems(); 651 getPaintController().commitNewDisplayItems();
482 652
483 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 4, 653 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 4,
484 TestDisplayItem(first, backgroundDrawingType), 654 TestDisplayItem(first, backgroundDrawingType),
485 TestDisplayItem(second, clipType), 655 TestDisplayItem(second, clipType),
486 TestDisplayItem(second, backgroundDrawingType), 656 TestDisplayItem(second, backgroundDrawingType),
487 TestDisplayItem(second, DisplayItem::clipTypeToEndClipType(clipType))); 657 TestDisplayItem(second, DisplayItem::clipTypeToEndClipType(clipType)));
658
659 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
660 EXPECT_EQ(2u, getPaintController().paintChunks().size());
661 EXPECT_THAT(getPaintController().paintChunks()[0].rasterInvalidationRect s, UnorderedElementsAre(
662 FloatRect(100, 100, 200, 200))); // |second| disappeared from the fi rst chunk.
663 EXPECT_THAT(getPaintController().paintChunks()[1].rasterInvalidationRect s, UnorderedElementsAre(
664 FloatRect(LayoutRect::infiniteIntRect()))); // This is a new chunk.
665 }
488 } 666 }
489 667
490 TEST_F_OR_P(PaintControllerTest, CachedDisplayItems) 668 TEST_P(PaintControllerTest, CachedDisplayItems)
491 { 669 {
492 FakeDisplayItemClient first("first"); 670 FakeDisplayItemClient first("first");
493 FakeDisplayItemClient second("second"); 671 FakeDisplayItemClient second("second");
494 GraphicsContext context(getPaintController()); 672 GraphicsContext context(getPaintController());
495 673
496 drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 150, 150 )); 674 drawRect(context, first, backgroundDrawingType, FloatRect(100, 100, 150, 150 ));
497 drawRect(context, second, backgroundDrawingType, FloatRect(100, 100, 150, 15 0)); 675 drawRect(context, second, backgroundDrawingType, FloatRect(100, 100, 150, 15 0));
498 getPaintController().commitNewDisplayItems(); 676 getPaintController().commitNewDisplayItems();
499 677
500 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 2, 678 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 2,
(...skipping 21 matching lines...) Expand all
522 if (!RuntimeEnabledFeatures::slimmingPaintUnderInvalidationCheckingEnabled() ) 700 if (!RuntimeEnabledFeatures::slimmingPaintUnderInvalidationCheckingEnabled() )
523 EXPECT_EQ(secondPicture, static_cast<const DrawingDisplayItem&>(getPaint Controller().getDisplayItemList()[1]).picture()); 701 EXPECT_EQ(secondPicture, static_cast<const DrawingDisplayItem&>(getPaint Controller().getDisplayItemList()[1]).picture());
524 EXPECT_TRUE(getPaintController().clientCacheIsValid(first)); 702 EXPECT_TRUE(getPaintController().clientCacheIsValid(first));
525 EXPECT_TRUE(getPaintController().clientCacheIsValid(second)); 703 EXPECT_TRUE(getPaintController().clientCacheIsValid(second));
526 704
527 getPaintController().invalidateAll(); 705 getPaintController().invalidateAll();
528 EXPECT_FALSE(getPaintController().clientCacheIsValid(first)); 706 EXPECT_FALSE(getPaintController().clientCacheIsValid(first));
529 EXPECT_FALSE(getPaintController().clientCacheIsValid(second)); 707 EXPECT_FALSE(getPaintController().clientCacheIsValid(second));
530 } 708 }
531 709
532 TEST_F_OR_P(PaintControllerTest, ComplexUpdateSwapOrder) 710 TEST_P(PaintControllerTest, ComplexUpdateSwapOrder)
533 { 711 {
534 FakeDisplayItemClient container1("container1"); 712 FakeDisplayItemClient container1("container1", LayoutRect(100, 100, 100, 100 ));
535 FakeDisplayItemClient content1("content1"); 713 FakeDisplayItemClient content1("content1", LayoutRect(100, 100, 50, 200));
536 FakeDisplayItemClient container2("container2"); 714 FakeDisplayItemClient container2("container2", LayoutRect(100, 200, 100, 100 ));
537 FakeDisplayItemClient content2("content2"); 715 FakeDisplayItemClient content2("content2", LayoutRect(100, 200, 50, 200));
538 GraphicsContext context(getPaintController()); 716 GraphicsContext context(getPaintController());
717 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled())
718 getPaintController().updateCurrentPaintChunkProperties(&m_rootPaintChunk Id, PaintChunkProperties());
539 719
540 drawRect(context, container1, backgroundDrawingType, FloatRect(100, 100, 100 , 100)); 720 drawRect(context, container1, backgroundDrawingType, FloatRect(100, 100, 100 , 100));
541 drawRect(context, content1, backgroundDrawingType, FloatRect(100, 100, 50, 2 00)); 721 drawRect(context, content1, backgroundDrawingType, FloatRect(100, 100, 50, 2 00));
542 drawRect(context, content1, foregroundDrawingType, FloatRect(100, 100, 50, 2 00)); 722 drawRect(context, content1, foregroundDrawingType, FloatRect(100, 100, 50, 2 00));
543 drawRect(context, container1, foregroundDrawingType, FloatRect(100, 100, 100 , 100)); 723 drawRect(context, container1, foregroundDrawingType, FloatRect(100, 100, 100 , 100));
544 drawRect(context, container2, backgroundDrawingType, FloatRect(100, 200, 100 , 100)); 724 drawRect(context, container2, backgroundDrawingType, FloatRect(100, 200, 100 , 100));
545 drawRect(context, content2, backgroundDrawingType, FloatRect(100, 200, 50, 2 00)); 725 drawRect(context, content2, backgroundDrawingType, FloatRect(100, 200, 50, 2 00));
546 drawRect(context, content2, foregroundDrawingType, FloatRect(100, 200, 50, 2 00)); 726 drawRect(context, content2, foregroundDrawingType, FloatRect(100, 200, 50, 2 00));
547 drawRect(context, container2, foregroundDrawingType, FloatRect(100, 200, 100 , 100)); 727 drawRect(context, container2, foregroundDrawingType, FloatRect(100, 200, 100 , 100));
548 getPaintController().commitNewDisplayItems(); 728 getPaintController().commitNewDisplayItems();
549 729
550 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 8, 730 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 8,
551 TestDisplayItem(container1, backgroundDrawingType), 731 TestDisplayItem(container1, backgroundDrawingType),
552 TestDisplayItem(content1, backgroundDrawingType), 732 TestDisplayItem(content1, backgroundDrawingType),
553 TestDisplayItem(content1, foregroundDrawingType), 733 TestDisplayItem(content1, foregroundDrawingType),
554 TestDisplayItem(container1, foregroundDrawingType), 734 TestDisplayItem(container1, foregroundDrawingType),
555 TestDisplayItem(container2, backgroundDrawingType), 735 TestDisplayItem(container2, backgroundDrawingType),
556 TestDisplayItem(content2, backgroundDrawingType), 736 TestDisplayItem(content2, backgroundDrawingType),
557 TestDisplayItem(content2, foregroundDrawingType), 737 TestDisplayItem(content2, foregroundDrawingType),
558 TestDisplayItem(container2, foregroundDrawingType)); 738 TestDisplayItem(container2, foregroundDrawingType));
559 739
740 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled())
741 getPaintController().updateCurrentPaintChunkProperties(&m_rootPaintChunk Id, PaintChunkProperties());
742
560 // Simulate the situation when container1 e.g. gets a z-index that is now gr eater than container2. 743 // Simulate the situation when container1 e.g. gets a z-index that is now gr eater than container2.
561 container1.setDisplayItemsUncached(); 744 container1.setDisplayItemsUncached();
562 drawRect(context, container2, backgroundDrawingType, FloatRect(100, 200, 100 , 100)); 745 drawRect(context, container2, backgroundDrawingType, FloatRect(100, 200, 100 , 100));
563 drawRect(context, content2, backgroundDrawingType, FloatRect(100, 200, 50, 2 00)); 746 drawRect(context, content2, backgroundDrawingType, FloatRect(100, 200, 50, 2 00));
564 drawRect(context, content2, foregroundDrawingType, FloatRect(100, 200, 50, 2 00)); 747 drawRect(context, content2, foregroundDrawingType, FloatRect(100, 200, 50, 2 00));
565 drawRect(context, container2, foregroundDrawingType, FloatRect(100, 200, 100 , 100)); 748 drawRect(context, container2, foregroundDrawingType, FloatRect(100, 200, 100 , 100));
566 drawRect(context, container1, backgroundDrawingType, FloatRect(100, 100, 100 , 100)); 749 drawRect(context, container1, backgroundDrawingType, FloatRect(100, 100, 100 , 100));
567 drawRect(context, content1, backgroundDrawingType, FloatRect(100, 100, 50, 2 00)); 750 drawRect(context, content1, backgroundDrawingType, FloatRect(100, 100, 50, 2 00));
568 drawRect(context, content1, foregroundDrawingType, FloatRect(100, 100, 50, 2 00)); 751 drawRect(context, content1, foregroundDrawingType, FloatRect(100, 100, 50, 2 00));
569 drawRect(context, container1, foregroundDrawingType, FloatRect(100, 100, 100 , 100)); 752 drawRect(context, container1, foregroundDrawingType, FloatRect(100, 100, 100 , 100));
570 getPaintController().commitNewDisplayItems(); 753 getPaintController().commitNewDisplayItems();
571 754
572 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 8, 755 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 8,
573 TestDisplayItem(container2, backgroundDrawingType), 756 TestDisplayItem(container2, backgroundDrawingType),
574 TestDisplayItem(content2, backgroundDrawingType), 757 TestDisplayItem(content2, backgroundDrawingType),
575 TestDisplayItem(content2, foregroundDrawingType), 758 TestDisplayItem(content2, foregroundDrawingType),
576 TestDisplayItem(container2, foregroundDrawingType), 759 TestDisplayItem(container2, foregroundDrawingType),
577 TestDisplayItem(container1, backgroundDrawingType), 760 TestDisplayItem(container1, backgroundDrawingType),
578 TestDisplayItem(content1, backgroundDrawingType), 761 TestDisplayItem(content1, backgroundDrawingType),
579 TestDisplayItem(content1, foregroundDrawingType), 762 TestDisplayItem(content1, foregroundDrawingType),
580 TestDisplayItem(container1, foregroundDrawingType)); 763 TestDisplayItem(container1, foregroundDrawingType));
764
765 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
766 EXPECT_EQ(1u, getPaintController().paintChunks().size());
767 // TODO(wangxianzhu): In real world we invalidate clients with reordered display items.
768 // Need to support raster invalidation for recordered display items with out invalidating clients.
769 EXPECT_THAT(getPaintController().paintChunks()[0].rasterInvalidationRect s, UnorderedElementsAre(
770 FloatRect(100, 100, 100, 100), // Old bounds of |container1|.
771 FloatRect(100, 100, 100, 100))); // New bounds of |container1|.
772 }
581 } 773 }
582 774
583 TEST_F_OR_P(PaintControllerTest, CachedSubsequenceSwapOrder) 775 TEST_P(PaintControllerTest, CachedSubsequenceSwapOrder)
584 { 776 {
585 FakeDisplayItemClient container1("container1"); 777 FakeDisplayItemClient container1("container1", LayoutRect(100, 100, 100, 100 ));
586 FakeDisplayItemClient content1("content1"); 778 FakeDisplayItemClient content1("content1", LayoutRect(100, 100, 50, 200));
587 FakeDisplayItemClient container2("container2"); 779 FakeDisplayItemClient container2("container2", LayoutRect(100, 200, 100, 100 ));
588 FakeDisplayItemClient content2("content2"); 780 FakeDisplayItemClient content2("content2", LayoutRect(100, 200, 50, 200));
589 GraphicsContext context(getPaintController()); 781 GraphicsContext context(getPaintController());
590 782
783 PaintChunkProperties container1Properties;
784 PaintChunkProperties container2Properties;
785
591 { 786 {
787 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
788 PaintChunk::Id id(container1, backgroundDrawingType);
789 container1Properties.effect = EffectPaintPropertyNode::create(nullpt r, 0.5);
790 getPaintController().updateCurrentPaintChunkProperties(&id, containe r1Properties);
791 }
592 SubsequenceRecorder r(context, container1); 792 SubsequenceRecorder r(context, container1);
593 drawRect(context, container1, backgroundDrawingType, FloatRect(100, 100, 100, 100)); 793 drawRect(context, container1, backgroundDrawingType, FloatRect(100, 100, 100, 100));
594 drawRect(context, content1, backgroundDrawingType, FloatRect(100, 100, 5 0, 200)); 794 drawRect(context, content1, backgroundDrawingType, FloatRect(100, 100, 5 0, 200));
595 drawRect(context, content1, foregroundDrawingType, FloatRect(100, 100, 5 0, 200)); 795 drawRect(context, content1, foregroundDrawingType, FloatRect(100, 100, 5 0, 200));
596 drawRect(context, container1, foregroundDrawingType, FloatRect(100, 100, 100, 100)); 796 drawRect(context, container1, foregroundDrawingType, FloatRect(100, 100, 100, 100));
597 } 797 }
598 { 798 {
799 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
800 PaintChunk::Id id(container2, backgroundDrawingType);
801 container2Properties.effect = EffectPaintPropertyNode::create(nullpt r, 0.5);
802 getPaintController().updateCurrentPaintChunkProperties(&id, containe r2Properties);
803 }
599 SubsequenceRecorder r(context, container2); 804 SubsequenceRecorder r(context, container2);
600 drawRect(context, container2, backgroundDrawingType, FloatRect(100, 200, 100, 100)); 805 drawRect(context, container2, backgroundDrawingType, FloatRect(100, 200, 100, 100));
601 drawRect(context, content2, backgroundDrawingType, FloatRect(100, 200, 5 0, 200)); 806 drawRect(context, content2, backgroundDrawingType, FloatRect(100, 200, 5 0, 200));
602 drawRect(context, content2, foregroundDrawingType, FloatRect(100, 200, 5 0, 200)); 807 drawRect(context, content2, foregroundDrawingType, FloatRect(100, 200, 5 0, 200));
603 drawRect(context, container2, foregroundDrawingType, FloatRect(100, 200, 100, 100)); 808 drawRect(context, container2, foregroundDrawingType, FloatRect(100, 200, 100, 100));
604 } 809 }
605 getPaintController().commitNewDisplayItems(); 810 getPaintController().commitNewDisplayItems();
606 811
607 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 12, 812 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 12,
608 TestDisplayItem(container1, DisplayItem::Subsequence), 813 TestDisplayItem(container1, DisplayItem::Subsequence),
609 TestDisplayItem(container1, backgroundDrawingType), 814 TestDisplayItem(container1, backgroundDrawingType),
610 TestDisplayItem(content1, backgroundDrawingType), 815 TestDisplayItem(content1, backgroundDrawingType),
611 TestDisplayItem(content1, foregroundDrawingType), 816 TestDisplayItem(content1, foregroundDrawingType),
612 TestDisplayItem(container1, foregroundDrawingType), 817 TestDisplayItem(container1, foregroundDrawingType),
613 TestDisplayItem(container1, DisplayItem::EndSubsequence), 818 TestDisplayItem(container1, DisplayItem::EndSubsequence),
614 819
615 TestDisplayItem(container2, DisplayItem::Subsequence), 820 TestDisplayItem(container2, DisplayItem::Subsequence),
616 TestDisplayItem(container2, backgroundDrawingType), 821 TestDisplayItem(container2, backgroundDrawingType),
617 TestDisplayItem(content2, backgroundDrawingType), 822 TestDisplayItem(content2, backgroundDrawingType),
618 TestDisplayItem(content2, foregroundDrawingType), 823 TestDisplayItem(content2, foregroundDrawingType),
619 TestDisplayItem(container2, foregroundDrawingType), 824 TestDisplayItem(container2, foregroundDrawingType),
620 TestDisplayItem(container2, DisplayItem::EndSubsequence)); 825 TestDisplayItem(container2, DisplayItem::EndSubsequence));
621 826
827 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
828 EXPECT_EQ(2u, getPaintController().paintChunks().size());
829 EXPECT_EQ(PaintChunk::Id(container1, backgroundDrawingType), getPaintCon troller().paintChunks()[0].id);
830 EXPECT_EQ(PaintChunk::Id(container2, backgroundDrawingType), getPaintCon troller().paintChunks()[1].id);
831 EXPECT_THAT(getPaintController().paintChunks()[0].rasterInvalidationRect s, UnorderedElementsAre(
832 FloatRect(LayoutRect::infiniteIntRect())));
833 EXPECT_THAT(getPaintController().paintChunks()[1].rasterInvalidationRect s, UnorderedElementsAre(
834 FloatRect(LayoutRect::infiniteIntRect())));
835 }
836
622 // Simulate the situation when container1 e.g. gets a z-index that is now gr eater than container2. 837 // Simulate the situation when container1 e.g. gets a z-index that is now gr eater than container2.
623 if (RuntimeEnabledFeatures::slimmingPaintUnderInvalidationCheckingEnabled()) { 838 if (RuntimeEnabledFeatures::slimmingPaintUnderInvalidationCheckingEnabled()) {
624 // When under-invalidation-checking is enabled, useCachedSubsequenceIfPo ssible is forced off, 839 // When under-invalidation-checking is enabled, useCachedSubsequenceIfPo ssible is forced off,
625 // and the client is expected to create the same painting as in the prev ious paint. 840 // and the client is expected to create the same painting as in the prev ious paint.
626 EXPECT_FALSE(SubsequenceRecorder::useCachedSubsequenceIfPossible(context , container2)); 841 EXPECT_FALSE(SubsequenceRecorder::useCachedSubsequenceIfPossible(context , container2));
627 { 842 {
843 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
844 PaintChunk::Id id(container2, backgroundDrawingType);
845 getPaintController().updateCurrentPaintChunkProperties(&id, cont ainer2Properties);
846 }
628 SubsequenceRecorder r(context, container2); 847 SubsequenceRecorder r(context, container2);
629 drawRect(context, container2, backgroundDrawingType, FloatRect(100, 200, 100, 100)); 848 drawRect(context, container2, backgroundDrawingType, FloatRect(100, 200, 100, 100));
630 drawRect(context, content2, backgroundDrawingType, FloatRect(100, 20 0, 50, 200)); 849 drawRect(context, content2, backgroundDrawingType, FloatRect(100, 20 0, 50, 200));
631 drawRect(context, content2, foregroundDrawingType, FloatRect(100, 20 0, 50, 200)); 850 drawRect(context, content2, foregroundDrawingType, FloatRect(100, 20 0, 50, 200));
632 drawRect(context, container2, foregroundDrawingType, FloatRect(100, 200, 100, 100)); 851 drawRect(context, container2, foregroundDrawingType, FloatRect(100, 200, 100, 100));
633 } 852 }
634 EXPECT_FALSE(SubsequenceRecorder::useCachedSubsequenceIfPossible(context , container1)); 853 EXPECT_FALSE(SubsequenceRecorder::useCachedSubsequenceIfPossible(context , container1));
635 { 854 {
855 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
856 PaintChunk::Id id(container1, backgroundDrawingType);
857 getPaintController().updateCurrentPaintChunkProperties(&id, cont ainer1Properties);
858 }
636 SubsequenceRecorder r(context, container1); 859 SubsequenceRecorder r(context, container1);
637 drawRect(context, container1, backgroundDrawingType, FloatRect(100, 100, 100, 100)); 860 drawRect(context, container1, backgroundDrawingType, FloatRect(100, 100, 100, 100));
638 drawRect(context, content1, backgroundDrawingType, FloatRect(100, 10 0, 50, 200)); 861 drawRect(context, content1, backgroundDrawingType, FloatRect(100, 10 0, 50, 200));
639 drawRect(context, content1, foregroundDrawingType, FloatRect(100, 10 0, 50, 200)); 862 drawRect(context, content1, foregroundDrawingType, FloatRect(100, 10 0, 50, 200));
640 drawRect(context, container1, foregroundDrawingType, FloatRect(100, 100, 100, 100)); 863 drawRect(context, container1, foregroundDrawingType, FloatRect(100, 100, 100, 100));
641 } 864 }
642 } else { 865 } else {
643 EXPECT_TRUE(SubsequenceRecorder::useCachedSubsequenceIfPossible(context, container2)); 866 EXPECT_TRUE(SubsequenceRecorder::useCachedSubsequenceIfPossible(context, container2));
644 EXPECT_TRUE(SubsequenceRecorder::useCachedSubsequenceIfPossible(context, container1)); 867 EXPECT_TRUE(SubsequenceRecorder::useCachedSubsequenceIfPossible(context, container1));
645 } 868 }
(...skipping 18 matching lines...) Expand all
664 TestDisplayItem(container1, DisplayItem::Subsequence), 887 TestDisplayItem(container1, DisplayItem::Subsequence),
665 TestDisplayItem(container1, backgroundDrawingType), 888 TestDisplayItem(container1, backgroundDrawingType),
666 TestDisplayItem(content1, backgroundDrawingType), 889 TestDisplayItem(content1, backgroundDrawingType),
667 TestDisplayItem(content1, foregroundDrawingType), 890 TestDisplayItem(content1, foregroundDrawingType),
668 TestDisplayItem(container1, foregroundDrawingType), 891 TestDisplayItem(container1, foregroundDrawingType),
669 TestDisplayItem(container1, DisplayItem::EndSubsequence)); 892 TestDisplayItem(container1, DisplayItem::EndSubsequence));
670 893
671 #if CHECK_DISPLAY_ITEM_CLIENT_ALIVENESS 894 #if CHECK_DISPLAY_ITEM_CLIENT_ALIVENESS
672 DisplayItemClient::endShouldKeepAliveAllClients(); 895 DisplayItemClient::endShouldKeepAliveAllClients();
673 #endif 896 #endif
897
898 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
899 EXPECT_EQ(2u, getPaintController().paintChunks().size());
900 EXPECT_EQ(PaintChunk::Id(container2, backgroundDrawingType), getPaintCon troller().paintChunks()[0].id);
901 EXPECT_EQ(PaintChunk::Id(container1, backgroundDrawingType), getPaintCon troller().paintChunks()[1].id);
902 // Swapping order of chunks should not invalidate anything.
903 EXPECT_THAT(getPaintController().paintChunks()[0].rasterInvalidationRect s, UnorderedElementsAre());
904 EXPECT_THAT(getPaintController().paintChunks()[1].rasterInvalidationRect s, UnorderedElementsAre());
905 }
674 } 906 }
675 907
676 TEST_F_OR_P(PaintControllerTest, OutOfOrderNoCrash) 908 TEST_P(PaintControllerTest, OutOfOrderNoCrash)
677 { 909 {
678 FakeDisplayItemClient client("client"); 910 FakeDisplayItemClient client("client");
679 GraphicsContext context(getPaintController()); 911 GraphicsContext context(getPaintController());
680 912
681 const DisplayItem::Type type1 = DisplayItem::DrawingFirst; 913 const DisplayItem::Type type1 = DisplayItem::DrawingFirst;
682 const DisplayItem::Type type2 = static_cast<DisplayItem::Type>(DisplayItem:: DrawingFirst + 1); 914 const DisplayItem::Type type2 = static_cast<DisplayItem::Type>(DisplayItem:: DrawingFirst + 1);
683 const DisplayItem::Type type3 = static_cast<DisplayItem::Type>(DisplayItem:: DrawingFirst + 2); 915 const DisplayItem::Type type3 = static_cast<DisplayItem::Type>(DisplayItem:: DrawingFirst + 2);
684 const DisplayItem::Type type4 = static_cast<DisplayItem::Type>(DisplayItem:: DrawingFirst + 3); 916 const DisplayItem::Type type4 = static_cast<DisplayItem::Type>(DisplayItem:: DrawingFirst + 3);
685 917
686 drawRect(context, client, type1, FloatRect(100, 100, 100, 100)); 918 drawRect(context, client, type1, FloatRect(100, 100, 100, 100));
687 drawRect(context, client, type2, FloatRect(100, 100, 50, 200)); 919 drawRect(context, client, type2, FloatRect(100, 100, 50, 200));
688 drawRect(context, client, type3, FloatRect(100, 100, 50, 200)); 920 drawRect(context, client, type3, FloatRect(100, 100, 50, 200));
689 drawRect(context, client, type4, FloatRect(100, 100, 100, 100)); 921 drawRect(context, client, type4, FloatRect(100, 100, 100, 100));
690 922
691 getPaintController().commitNewDisplayItems(); 923 getPaintController().commitNewDisplayItems();
692 924
693 drawRect(context, client, type2, FloatRect(100, 100, 50, 200)); 925 drawRect(context, client, type2, FloatRect(100, 100, 50, 200));
694 drawRect(context, client, type3, FloatRect(100, 100, 50, 200)); 926 drawRect(context, client, type3, FloatRect(100, 100, 50, 200));
695 drawRect(context, client, type1, FloatRect(100, 100, 100, 100)); 927 drawRect(context, client, type1, FloatRect(100, 100, 100, 100));
696 drawRect(context, client, type4, FloatRect(100, 100, 100, 100)); 928 drawRect(context, client, type4, FloatRect(100, 100, 100, 100));
697 929
698 getPaintController().commitNewDisplayItems(); 930 getPaintController().commitNewDisplayItems();
699 } 931 }
700 932
701 TEST_F_OR_P(PaintControllerTest, CachedNestedSubsequenceUpdate) 933 TEST_P(PaintControllerTest, CachedNestedSubsequenceUpdate)
702 { 934 {
703 FakeDisplayItemClient container1("container1"); 935 FakeDisplayItemClient container1("container1", LayoutRect(100, 100, 100, 100 ));
704 FakeDisplayItemClient content1("content1"); 936 FakeDisplayItemClient content1("content1", LayoutRect(100, 100, 50, 200));
705 FakeDisplayItemClient container2("container2"); 937 FakeDisplayItemClient container2("container2", LayoutRect(100, 200, 100, 100 ));
706 FakeDisplayItemClient content2("content2"); 938 FakeDisplayItemClient content2("content2", LayoutRect(100, 200, 50, 200));
707 GraphicsContext context(getPaintController()); 939 GraphicsContext context(getPaintController());
708 940
941 PaintChunkProperties container1BackgroundProperties;
942 PaintChunkProperties content1Properties;
943 PaintChunkProperties container1ForegroundProperties;
944 PaintChunkProperties container2BackgroundProperties;
945 PaintChunkProperties content2Properties;
946
709 { 947 {
948 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
949 PaintChunk::Id id(container1, backgroundDrawingType);
950 container1BackgroundProperties.effect = EffectPaintPropertyNode::cre ate(nullptr, 0.5);
951 getPaintController().updateCurrentPaintChunkProperties(&id, containe r1BackgroundProperties);
952 }
710 SubsequenceRecorder r(context, container1); 953 SubsequenceRecorder r(context, container1);
711 drawRect(context, container1, backgroundDrawingType, FloatRect(100, 100, 100, 100)); 954 drawRect(context, container1, backgroundDrawingType, FloatRect(100, 100, 100, 100));
712 { 955 {
956 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
957 PaintChunk::Id id(content1, backgroundDrawingType);
958 content1Properties.effect = EffectPaintPropertyNode::create(null ptr, 0.6);
959 getPaintController().updateCurrentPaintChunkProperties(&id, cont ent1Properties);
960 }
713 SubsequenceRecorder r(context, content1); 961 SubsequenceRecorder r(context, content1);
714 drawRect(context, content1, backgroundDrawingType, FloatRect(100, 10 0, 50, 200)); 962 drawRect(context, content1, backgroundDrawingType, FloatRect(100, 10 0, 50, 200));
715 drawRect(context, content1, foregroundDrawingType, FloatRect(100, 10 0, 50, 200)); 963 drawRect(context, content1, foregroundDrawingType, FloatRect(100, 10 0, 50, 200));
716 } 964 }
965 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
966 PaintChunk::Id id(container1, foregroundDrawingType);
967 container1ForegroundProperties.effect = EffectPaintPropertyNode::cre ate(nullptr, 0.5);
968 getPaintController().updateCurrentPaintChunkProperties(&id, containe r1ForegroundProperties);
969 }
717 drawRect(context, container1, foregroundDrawingType, FloatRect(100, 100, 100, 100)); 970 drawRect(context, container1, foregroundDrawingType, FloatRect(100, 100, 100, 100));
718 } 971 }
719 { 972 {
973 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
974 PaintChunk::Id id(container2, backgroundDrawingType);
975 container2BackgroundProperties.effect = EffectPaintPropertyNode::cre ate(nullptr, 0.7);
976 getPaintController().updateCurrentPaintChunkProperties(&id, containe r2BackgroundProperties);
977 }
720 SubsequenceRecorder r(context, container2); 978 SubsequenceRecorder r(context, container2);
721 drawRect(context, container2, backgroundDrawingType, FloatRect(100, 200, 100, 100)); 979 drawRect(context, container2, backgroundDrawingType, FloatRect(100, 200, 100, 100));
722 { 980 {
981 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
982 PaintChunk::Id id(content2, backgroundDrawingType);
983 content2Properties.effect = EffectPaintPropertyNode::create(null ptr, 0.8);
984 getPaintController().updateCurrentPaintChunkProperties(&id, cont ent2Properties);
985 }
723 SubsequenceRecorder r(context, content2); 986 SubsequenceRecorder r(context, content2);
724 drawRect(context, content2, backgroundDrawingType, FloatRect(100, 20 0, 50, 200)); 987 drawRect(context, content2, backgroundDrawingType, FloatRect(100, 20 0, 50, 200));
725 } 988 }
726 } 989 }
727 getPaintController().commitNewDisplayItems(); 990 getPaintController().commitNewDisplayItems();
728 991
729 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 14, 992 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 14,
730 TestDisplayItem(container1, DisplayItem::Subsequence), 993 TestDisplayItem(container1, DisplayItem::Subsequence),
731 TestDisplayItem(container1, backgroundDrawingType), 994 TestDisplayItem(container1, backgroundDrawingType),
732 TestDisplayItem(content1, DisplayItem::Subsequence), 995 TestDisplayItem(content1, DisplayItem::Subsequence),
733 TestDisplayItem(content1, backgroundDrawingType), 996 TestDisplayItem(content1, backgroundDrawingType),
734 TestDisplayItem(content1, foregroundDrawingType), 997 TestDisplayItem(content1, foregroundDrawingType),
735 TestDisplayItem(content1, DisplayItem::EndSubsequence), 998 TestDisplayItem(content1, DisplayItem::EndSubsequence),
736 TestDisplayItem(container1, foregroundDrawingType), 999 TestDisplayItem(container1, foregroundDrawingType),
737 TestDisplayItem(container1, DisplayItem::EndSubsequence), 1000 TestDisplayItem(container1, DisplayItem::EndSubsequence),
738 1001
739 TestDisplayItem(container2, DisplayItem::Subsequence), 1002 TestDisplayItem(container2, DisplayItem::Subsequence),
740 TestDisplayItem(container2, backgroundDrawingType), 1003 TestDisplayItem(container2, backgroundDrawingType),
741 TestDisplayItem(content2, DisplayItem::Subsequence), 1004 TestDisplayItem(content2, DisplayItem::Subsequence),
742 TestDisplayItem(content2, backgroundDrawingType), 1005 TestDisplayItem(content2, backgroundDrawingType),
743 TestDisplayItem(content2, DisplayItem::EndSubsequence), 1006 TestDisplayItem(content2, DisplayItem::EndSubsequence),
744 TestDisplayItem(container2, DisplayItem::EndSubsequence)); 1007 TestDisplayItem(container2, DisplayItem::EndSubsequence));
745 1008
1009 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
1010 EXPECT_EQ(5u, getPaintController().paintChunks().size());
1011 EXPECT_EQ(PaintChunk::Id(container1, backgroundDrawingType), getPaintCon troller().paintChunks()[0].id);
1012 EXPECT_EQ(PaintChunk::Id(content1, backgroundDrawingType), getPaintContr oller().paintChunks()[1].id);
1013 EXPECT_EQ(PaintChunk::Id(container1, foregroundDrawingType), getPaintCon troller().paintChunks()[2].id);
1014 EXPECT_EQ(PaintChunk::Id(container2, backgroundDrawingType), getPaintCon troller().paintChunks()[3].id);
1015 EXPECT_EQ(PaintChunk::Id(content2, backgroundDrawingType), getPaintContr oller().paintChunks()[4].id);
1016 EXPECT_THAT(getPaintController().paintChunks()[0].rasterInvalidationRect s, UnorderedElementsAre(FloatRect(LayoutRect::infiniteIntRect())));
1017 EXPECT_THAT(getPaintController().paintChunks()[1].rasterInvalidationRect s, UnorderedElementsAre(FloatRect(LayoutRect::infiniteIntRect())));
1018 EXPECT_THAT(getPaintController().paintChunks()[2].rasterInvalidationRect s, UnorderedElementsAre(FloatRect(LayoutRect::infiniteIntRect())));
1019 EXPECT_THAT(getPaintController().paintChunks()[3].rasterInvalidationRect s, UnorderedElementsAre(FloatRect(LayoutRect::infiniteIntRect())));
1020 EXPECT_THAT(getPaintController().paintChunks()[4].rasterInvalidationRect s, UnorderedElementsAre(FloatRect(LayoutRect::infiniteIntRect())));
1021 }
1022
746 // Invalidate container1 but not content1. 1023 // Invalidate container1 but not content1.
747 container1.setDisplayItemsUncached(); 1024 container1.setDisplayItemsUncached();
748 1025
749 // Container2 itself now becomes empty (but still has the 'content2' child), 1026 // Container2 itself now becomes empty (but still has the 'content2' child),
750 // and chooses not to output subsequence info. 1027 // and chooses not to output subsequence info.
751 1028
752 container2.setDisplayItemsUncached(); 1029 container2.setDisplayItemsUncached();
753 content2.setDisplayItemsUncached(); 1030 content2.setDisplayItemsUncached();
754 EXPECT_FALSE(SubsequenceRecorder::useCachedSubsequenceIfPossible(context, co ntainer2)); 1031 EXPECT_FALSE(SubsequenceRecorder::useCachedSubsequenceIfPossible(context, co ntainer2));
755 EXPECT_FALSE(SubsequenceRecorder::useCachedSubsequenceIfPossible(context, co ntent2)); 1032 EXPECT_FALSE(SubsequenceRecorder::useCachedSubsequenceIfPossible(context, co ntent2));
756 // Content2 now outputs foreground only. 1033 // Content2 now outputs foreground only.
757 { 1034 {
1035 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
1036 PaintChunk::Id id(content2, foregroundDrawingType);
1037 getPaintController().updateCurrentPaintChunkProperties(&id, content2 Properties);
1038 }
758 SubsequenceRecorder r(context, content2); 1039 SubsequenceRecorder r(context, content2);
759 drawRect(context, content2, foregroundDrawingType, FloatRect(100, 200, 5 0, 200)); 1040 drawRect(context, content2, foregroundDrawingType, FloatRect(100, 200, 5 0, 200));
760 } 1041 }
761 // Repaint container1 with foreground only. 1042 // Repaint container1 with foreground only.
762 { 1043 {
763 EXPECT_FALSE(SubsequenceRecorder::useCachedSubsequenceIfPossible(context , container1)); 1044 EXPECT_FALSE(SubsequenceRecorder::useCachedSubsequenceIfPossible(context , container1));
764 SubsequenceRecorder r(context, container1); 1045 SubsequenceRecorder r(context, container1);
765 // Use cached subsequence of content1. 1046 // Use cached subsequence of content1.
766 if (RuntimeEnabledFeatures::slimmingPaintUnderInvalidationCheckingEnable d()) { 1047 if (RuntimeEnabledFeatures::slimmingPaintUnderInvalidationCheckingEnable d()) {
767 // When under-invalidation-checking is enabled, useCachedSubsequence IfPossible is forced off, 1048 // When under-invalidation-checking is enabled, useCachedSubsequence IfPossible is forced off,
768 // and the client is expected to create the same painting as in the previous paint. 1049 // and the client is expected to create the same painting as in the previous paint.
769 EXPECT_FALSE(SubsequenceRecorder::useCachedSubsequenceIfPossible(con text, content1)); 1050 EXPECT_FALSE(SubsequenceRecorder::useCachedSubsequenceIfPossible(con text, content1));
1051 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
1052 PaintChunk::Id id(content1, backgroundDrawingType);
1053 getPaintController().updateCurrentPaintChunkProperties(&id, cont ent1Properties);
1054 }
770 SubsequenceRecorder r(context, content1); 1055 SubsequenceRecorder r(context, content1);
771 drawRect(context, content1, backgroundDrawingType, FloatRect(100, 10 0, 50, 200)); 1056 drawRect(context, content1, backgroundDrawingType, FloatRect(100, 10 0, 50, 200));
772 drawRect(context, content1, foregroundDrawingType, FloatRect(100, 10 0, 50, 200)); 1057 drawRect(context, content1, foregroundDrawingType, FloatRect(100, 10 0, 50, 200));
773 } else { 1058 } else {
774 EXPECT_TRUE(SubsequenceRecorder::useCachedSubsequenceIfPossible(cont ext, content1)); 1059 EXPECT_TRUE(SubsequenceRecorder::useCachedSubsequenceIfPossible(cont ext, content1));
775 } 1060 }
1061 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
1062 PaintChunk::Id id(container1, foregroundDrawingType);
1063 getPaintController().updateCurrentPaintChunkProperties(&id, containe r1ForegroundProperties);
1064 }
776 drawRect(context, container1, foregroundDrawingType, FloatRect(100, 100, 100, 100)); 1065 drawRect(context, container1, foregroundDrawingType, FloatRect(100, 100, 100, 100));
777 } 1066 }
778 1067
779 EXPECT_EQ(4, numCachedNewItems()); 1068 EXPECT_EQ(4, numCachedNewItems());
780 #if DCHECK_IS_ON() 1069 #if DCHECK_IS_ON()
781 EXPECT_EQ(1, numSequentialMatches()); 1070 EXPECT_EQ(1, numSequentialMatches());
782 EXPECT_EQ(0, numOutOfOrderMatches()); 1071 EXPECT_EQ(0, numOutOfOrderMatches());
783 EXPECT_EQ(2, numIndexedItems()); 1072 EXPECT_EQ(2, numIndexedItems());
784 #endif 1073 #endif
785 1074
786 getPaintController().commitNewDisplayItems(); 1075 getPaintController().commitNewDisplayItems();
787 1076
788 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 10, 1077 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 10,
789 TestDisplayItem(content2, DisplayItem::Subsequence), 1078 TestDisplayItem(content2, DisplayItem::Subsequence),
790 TestDisplayItem(content2, foregroundDrawingType), 1079 TestDisplayItem(content2, foregroundDrawingType),
791 TestDisplayItem(content2, DisplayItem::EndSubsequence), 1080 TestDisplayItem(content2, DisplayItem::EndSubsequence),
792 1081
793 TestDisplayItem(container1, DisplayItem::Subsequence), 1082 TestDisplayItem(container1, DisplayItem::Subsequence),
794 TestDisplayItem(content1, DisplayItem::Subsequence), 1083 TestDisplayItem(content1, DisplayItem::Subsequence),
795 TestDisplayItem(content1, backgroundDrawingType), 1084 TestDisplayItem(content1, backgroundDrawingType),
796 TestDisplayItem(content1, foregroundDrawingType), 1085 TestDisplayItem(content1, foregroundDrawingType),
797 TestDisplayItem(content1, DisplayItem::EndSubsequence), 1086 TestDisplayItem(content1, DisplayItem::EndSubsequence),
798 TestDisplayItem(container1, foregroundDrawingType), 1087 TestDisplayItem(container1, foregroundDrawingType),
799 TestDisplayItem(container1, DisplayItem::EndSubsequence)); 1088 TestDisplayItem(container1, DisplayItem::EndSubsequence));
800 1089
1090 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
1091 EXPECT_EQ(3u, getPaintController().paintChunks().size());
1092 EXPECT_EQ(PaintChunk::Id(content2, foregroundDrawingType), getPaintContr oller().paintChunks()[0].id);
1093 EXPECT_EQ(PaintChunk::Id(content1, backgroundDrawingType), getPaintContr oller().paintChunks()[1].id);
1094 EXPECT_EQ(PaintChunk::Id(container1, foregroundDrawingType), getPaintCon troller().paintChunks()[2].id);
1095 // This is a new chunk.
1096 EXPECT_THAT(getPaintController().paintChunks()[0].rasterInvalidationRect s, UnorderedElementsAre(
1097 FloatRect(LayoutRect::infiniteIntRect())));
1098 // This chunk didn't change.
1099 EXPECT_THAT(getPaintController().paintChunks()[1].rasterInvalidationRect s, UnorderedElementsAre());
1100 // |container1| is invalidated.
1101 EXPECT_THAT(getPaintController().paintChunks()[2].rasterInvalidationRect s, UnorderedElementsAre(
1102 FloatRect(100, 100, 100, 100),
chrishtr 2016/08/26 18:10:51 Old and new bounds right? If so, comment.
Xianzhu 2016/08/26 18:39:24 Done.
1103 FloatRect(100, 100, 100, 100)));
1104 }
1105
801 #if CHECK_DISPLAY_ITEM_CLIENT_ALIVENESS 1106 #if CHECK_DISPLAY_ITEM_CLIENT_ALIVENESS
802 DisplayItemClient::endShouldKeepAliveAllClients(); 1107 DisplayItemClient::endShouldKeepAliveAllClients();
803 #endif 1108 #endif
804 } 1109 }
805 1110
806 TEST_F_OR_P(PaintControllerTest, SkipCache) 1111 TEST_P(PaintControllerTest, SkipCache)
807 { 1112 {
808 FakeDisplayItemClient multicol("multicol"); 1113 FakeDisplayItemClient multicol("multicol", LayoutRect(100, 100, 200, 200));
809 FakeDisplayItemClient content("content"); 1114 FakeDisplayItemClient content("content", LayoutRect(100, 100, 100, 100));
810 GraphicsContext context(getPaintController()); 1115 GraphicsContext context(getPaintController());
1116 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled())
1117 getPaintController().updateCurrentPaintChunkProperties(&m_rootPaintChunk Id, PaintChunkProperties());
811 1118
812 FloatRect rect1(100, 100, 50, 50); 1119 FloatRect rect1(100, 100, 50, 50);
813 FloatRect rect2(150, 100, 50, 50); 1120 FloatRect rect2(150, 100, 50, 50);
814 FloatRect rect3(200, 100, 50, 50); 1121 FloatRect rect3(200, 100, 50, 50);
815 1122
816 drawRect(context, multicol, backgroundDrawingType, FloatRect(100, 200, 100, 100)); 1123 drawRect(context, multicol, backgroundDrawingType, FloatRect(100, 200, 100, 100));
817 1124
818 getPaintController().beginSkippingCache(); 1125 getPaintController().beginSkippingCache();
819 drawRect(context, content, foregroundDrawingType, rect1); 1126 drawRect(context, content, foregroundDrawingType, rect1);
820 drawRect(context, content, foregroundDrawingType, rect2); 1127 drawRect(context, content, foregroundDrawingType, rect2);
821 getPaintController().endSkippingCache(); 1128 getPaintController().endSkippingCache();
822 1129
823 getPaintController().commitNewDisplayItems(); 1130 getPaintController().commitNewDisplayItems();
824 1131
825 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 3, 1132 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 3,
826 TestDisplayItem(multicol, backgroundDrawingType), 1133 TestDisplayItem(multicol, backgroundDrawingType),
827 TestDisplayItem(content, foregroundDrawingType), 1134 TestDisplayItem(content, foregroundDrawingType),
828 TestDisplayItem(content, foregroundDrawingType)); 1135 TestDisplayItem(content, foregroundDrawingType));
829 RefPtr<const SkPicture> picture1 = static_cast<const DrawingDisplayItem&>(ge tPaintController().getDisplayItemList()[1]).picture(); 1136 RefPtr<const SkPicture> picture1 = static_cast<const DrawingDisplayItem&>(ge tPaintController().getDisplayItemList()[1]).picture();
830 RefPtr<const SkPicture> picture2 = static_cast<const DrawingDisplayItem&>(ge tPaintController().getDisplayItemList()[2]).picture(); 1137 RefPtr<const SkPicture> picture2 = static_cast<const DrawingDisplayItem&>(ge tPaintController().getDisplayItemList()[2]).picture();
831 EXPECT_NE(picture1, picture2); 1138 EXPECT_NE(picture1, picture2);
832 1139
1140 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
1141 EXPECT_EQ(1u, getPaintController().paintChunks().size());
1142 EXPECT_THAT(getPaintController().paintChunks()[0].rasterInvalidationRect s, UnorderedElementsAre(FloatRect(LayoutRect::infiniteIntRect())));
1143
1144 getPaintController().updateCurrentPaintChunkProperties(&m_rootPaintChunk Id, PaintChunkProperties());
1145 }
1146
833 // Draw again with nothing invalidated. 1147 // Draw again with nothing invalidated.
834 EXPECT_TRUE(getPaintController().clientCacheIsValid(multicol)); 1148 EXPECT_TRUE(getPaintController().clientCacheIsValid(multicol));
835 drawRect(context, multicol, backgroundDrawingType, FloatRect(100, 200, 100, 100)); 1149 drawRect(context, multicol, backgroundDrawingType, FloatRect(100, 200, 100, 100));
836 1150
837 getPaintController().beginSkippingCache(); 1151 getPaintController().beginSkippingCache();
838 drawRect(context, content, foregroundDrawingType, rect1); 1152 drawRect(context, content, foregroundDrawingType, rect1);
839 drawRect(context, content, foregroundDrawingType, rect2); 1153 drawRect(context, content, foregroundDrawingType, rect2);
840 getPaintController().endSkippingCache(); 1154 getPaintController().endSkippingCache();
841 1155
842 EXPECT_EQ(1, numCachedNewItems()); 1156 EXPECT_EQ(1, numCachedNewItems());
843 #if DCHECK_IS_ON() 1157 #if DCHECK_IS_ON()
844 EXPECT_EQ(1, numSequentialMatches()); 1158 EXPECT_EQ(1, numSequentialMatches());
845 EXPECT_EQ(0, numOutOfOrderMatches()); 1159 EXPECT_EQ(0, numOutOfOrderMatches());
846 EXPECT_EQ(0, numIndexedItems()); 1160 EXPECT_EQ(0, numIndexedItems());
847 #endif 1161 #endif
848 1162
849 getPaintController().commitNewDisplayItems(); 1163 getPaintController().commitNewDisplayItems();
850 1164
851 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 3, 1165 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 3,
852 TestDisplayItem(multicol, backgroundDrawingType), 1166 TestDisplayItem(multicol, backgroundDrawingType),
853 TestDisplayItem(content, foregroundDrawingType), 1167 TestDisplayItem(content, foregroundDrawingType),
854 TestDisplayItem(content, foregroundDrawingType)); 1168 TestDisplayItem(content, foregroundDrawingType));
855 EXPECT_NE(picture1, static_cast<const DrawingDisplayItem&>(getPaintControlle r().getDisplayItemList()[1]).picture()); 1169 EXPECT_NE(picture1, static_cast<const DrawingDisplayItem&>(getPaintControlle r().getDisplayItemList()[1]).picture());
856 EXPECT_NE(picture2, static_cast<const DrawingDisplayItem&>(getPaintControlle r().getDisplayItemList()[2]).picture()); 1170 EXPECT_NE(picture2, static_cast<const DrawingDisplayItem&>(getPaintControlle r().getDisplayItemList()[2]).picture());
857 1171
1172 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
1173 EXPECT_EQ(1u, getPaintController().paintChunks().size());
1174 EXPECT_THAT(getPaintController().paintChunks()[0].rasterInvalidationRect s, UnorderedElementsAre(
1175 FloatRect(100, 100, 100, 100),
chrishtr 2016/08/26 18:10:51 ditto
Xianzhu 2016/08/26 18:39:24 Done.
1176 FloatRect(100, 100, 100, 100)));
1177
1178 getPaintController().updateCurrentPaintChunkProperties(&m_rootPaintChunk Id, PaintChunkProperties());
1179 }
1180
858 // Now the multicol becomes 3 columns and repaints. 1181 // Now the multicol becomes 3 columns and repaints.
859 multicol.setDisplayItemsUncached(); 1182 multicol.setDisplayItemsUncached();
860 drawRect(context, multicol, backgroundDrawingType, FloatRect(100, 100, 100, 100)); 1183 drawRect(context, multicol, backgroundDrawingType, FloatRect(100, 100, 100, 100));
861 1184
862 getPaintController().beginSkippingCache(); 1185 getPaintController().beginSkippingCache();
863 drawRect(context, content, foregroundDrawingType, rect1); 1186 drawRect(context, content, foregroundDrawingType, rect1);
864 drawRect(context, content, foregroundDrawingType, rect2); 1187 drawRect(context, content, foregroundDrawingType, rect2);
865 drawRect(context, content, foregroundDrawingType, rect3); 1188 drawRect(context, content, foregroundDrawingType, rect3);
866 getPaintController().endSkippingCache(); 1189 getPaintController().endSkippingCache();
867 1190
868 // We should repaint everything on invalidation of the scope container. 1191 // We should repaint everything on invalidation of the scope container.
869 EXPECT_DISPLAY_LIST(getPaintController().newDisplayItemList(), 4, 1192 EXPECT_DISPLAY_LIST(getPaintController().newDisplayItemList(), 4,
870 TestDisplayItem(multicol, backgroundDrawingType), 1193 TestDisplayItem(multicol, backgroundDrawingType),
871 TestDisplayItem(content, foregroundDrawingType), 1194 TestDisplayItem(content, foregroundDrawingType),
872 TestDisplayItem(content, foregroundDrawingType), 1195 TestDisplayItem(content, foregroundDrawingType),
873 TestDisplayItem(content, foregroundDrawingType)); 1196 TestDisplayItem(content, foregroundDrawingType));
874 EXPECT_NE(picture1, static_cast<const DrawingDisplayItem&>(getPaintControlle r().newDisplayItemList()[1]).picture()); 1197 EXPECT_NE(picture1, static_cast<const DrawingDisplayItem&>(getPaintControlle r().newDisplayItemList()[1]).picture());
875 EXPECT_NE(picture2, static_cast<const DrawingDisplayItem&>(getPaintControlle r().newDisplayItemList()[2]).picture()); 1198 EXPECT_NE(picture2, static_cast<const DrawingDisplayItem&>(getPaintControlle r().newDisplayItemList()[2]).picture());
876 1199
877 getPaintController().commitNewDisplayItems(); 1200 getPaintController().commitNewDisplayItems();
1201
1202 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
1203 EXPECT_EQ(1u, getPaintController().paintChunks().size());
1204 EXPECT_THAT(getPaintController().paintChunks()[0].rasterInvalidationRect s, UnorderedElementsAre(
1205 FloatRect(100, 100, 200, 200),
1206 FloatRect(100, 100, 200, 200),
1207 FloatRect(100, 100, 100, 100),
1208 FloatRect(100, 100, 100, 100)));
Xianzhu 2016/08/26 18:39:23 Done.
1209 }
878 } 1210 }
879 1211
880 TEST_F_OR_P(PaintControllerTest, PartialSkipCache) 1212 TEST_P(PaintControllerTest, PartialSkipCache)
881 { 1213 {
882 FakeDisplayItemClient content("content"); 1214 FakeDisplayItemClient content("content");
883 GraphicsContext context(getPaintController()); 1215 GraphicsContext context(getPaintController());
884 1216
885 FloatRect rect1(100, 100, 50, 50); 1217 FloatRect rect1(100, 100, 50, 50);
886 FloatRect rect2(150, 100, 50, 50); 1218 FloatRect rect2(150, 100, 50, 50);
887 FloatRect rect3(200, 100, 50, 50); 1219 FloatRect rect3(200, 100, 50, 50);
888 1220
889 drawRect(context, content, backgroundDrawingType, rect1); 1221 drawRect(context, content, backgroundDrawingType, rect1);
890 getPaintController().beginSkippingCache(); 1222 getPaintController().beginSkippingCache();
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
925 1257
926 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 3, 1258 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 3,
927 TestDisplayItem(content, backgroundDrawingType), 1259 TestDisplayItem(content, backgroundDrawingType),
928 TestDisplayItem(content, foregroundDrawingType), 1260 TestDisplayItem(content, foregroundDrawingType),
929 TestDisplayItem(content, foregroundDrawingType)); 1261 TestDisplayItem(content, foregroundDrawingType));
930 EXPECT_NE(picture0, static_cast<const DrawingDisplayItem&>(getPaintControlle r().getDisplayItemList()[0]).picture()); 1262 EXPECT_NE(picture0, static_cast<const DrawingDisplayItem&>(getPaintControlle r().getDisplayItemList()[0]).picture());
931 EXPECT_NE(picture1, static_cast<const DrawingDisplayItem&>(getPaintControlle r().getDisplayItemList()[1]).picture()); 1263 EXPECT_NE(picture1, static_cast<const DrawingDisplayItem&>(getPaintControlle r().getDisplayItemList()[1]).picture());
932 EXPECT_NE(picture2, static_cast<const DrawingDisplayItem&>(getPaintControlle r().getDisplayItemList()[2]).picture()); 1264 EXPECT_NE(picture2, static_cast<const DrawingDisplayItem&>(getPaintControlle r().getDisplayItemList()[2]).picture());
933 } 1265 }
934 1266
935 TEST_F_OR_P(PaintControllerTest, OptimizeNoopPairs) 1267 TEST_F(PaintControllerTestBase, OptimizeNoopPairs)
936 { 1268 {
937 FakeDisplayItemClient first("first"); 1269 FakeDisplayItemClient first("first");
938 FakeDisplayItemClient second("second"); 1270 FakeDisplayItemClient second("second");
939 FakeDisplayItemClient third("third"); 1271 FakeDisplayItemClient third("third");
940 1272
941 GraphicsContext context(getPaintController()); 1273 GraphicsContext context(getPaintController());
942 drawRect(context, first, backgroundDrawingType, FloatRect(0, 0, 100, 100)); 1274 drawRect(context, first, backgroundDrawingType, FloatRect(0, 0, 100, 100));
943 { 1275 {
944 ClipPathRecorder clipRecorder(context, second, Path()); 1276 ClipPathRecorder clipRecorder(context, second, Path());
945 drawRect(context, second, backgroundDrawingType, FloatRect(0, 0, 100, 10 0)); 1277 drawRect(context, second, backgroundDrawingType, FloatRect(0, 0, 100, 10 0));
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
978 } 1310 }
979 drawRect(context, third, backgroundDrawingType, FloatRect(0, 0, 100, 100)); 1311 drawRect(context, third, backgroundDrawingType, FloatRect(0, 0, 100, 100));
980 getPaintController().commitNewDisplayItems(); 1312 getPaintController().commitNewDisplayItems();
981 1313
982 // Empty clips should have been optimized out. 1314 // Empty clips should have been optimized out.
983 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 2, 1315 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 2,
984 TestDisplayItem(first, backgroundDrawingType), 1316 TestDisplayItem(first, backgroundDrawingType),
985 TestDisplayItem(third, backgroundDrawingType)); 1317 TestDisplayItem(third, backgroundDrawingType));
986 } 1318 }
987 1319
988 TEST_F_OR_P(PaintControllerTest, SmallPaintControllerHasOnePaintChunk) 1320 TEST_F(PaintControllerTestBase, SmallPaintControllerHasOnePaintChunk)
989 { 1321 {
990 RuntimeEnabledFeatures::setSlimmingPaintV2Enabled(true); 1322 RuntimeEnabledFeatures::setSlimmingPaintV2Enabled(true);
991 FakeDisplayItemClient client("test client"); 1323 FakeDisplayItemClient client("test client");
992 1324
993 GraphicsContext context(getPaintController()); 1325 GraphicsContext context(getPaintController());
994 drawRect(context, client, backgroundDrawingType, FloatRect(0, 0, 100, 100)); 1326 drawRect(context, client, backgroundDrawingType, FloatRect(0, 0, 100, 100));
995 1327
996 getPaintController().commitNewDisplayItems(); 1328 getPaintController().commitNewDisplayItems();
997 const auto& paintChunks = getPaintController().paintChunks(); 1329 const auto& paintChunks = getPaintController().paintChunks();
998 ASSERT_EQ(1u, paintChunks.size()); 1330 ASSERT_EQ(1u, paintChunks.size());
999 EXPECT_EQ(0u, paintChunks[0].beginIndex); 1331 EXPECT_EQ(0u, paintChunks[0].beginIndex);
1000 EXPECT_EQ(1u, paintChunks[0].endIndex); 1332 EXPECT_EQ(1u, paintChunks[0].endIndex);
1001 } 1333 }
1002 1334
1003 #define EXPECT_RECT_EQ(expected, actual) \ 1335 TEST_F(PaintControllerTestBase, PaintArtifactWithVisualRects)
1004 do { \
1005 const IntRect& actualRect = actual; \
1006 EXPECT_EQ(expected.x(), actualRect.x()); \
1007 EXPECT_EQ(expected.y(), actualRect.y()); \
1008 EXPECT_EQ(expected.width(), actualRect.width()); \
1009 EXPECT_EQ(expected.height(), actualRect.height()); \
1010 } while (false)
1011
1012 TEST_F_OR_P(PaintControllerTest, PaintArtifactWithVisualRects)
1013 { 1336 {
1014 FakeDisplayItemClient client("test client", LayoutRect(0, 0, 200, 100)); 1337 FakeDisplayItemClient client("test client", LayoutRect(0, 0, 200, 100));
1015 1338
1016 GraphicsContext context(getPaintController()); 1339 GraphicsContext context(getPaintController());
1017 drawRect(context, client, backgroundDrawingType, FloatRect(0, 0, 100, 100)); 1340 drawRect(context, client, backgroundDrawingType, FloatRect(0, 0, 100, 100));
1018 1341
1019 getPaintController().commitNewDisplayItems(LayoutSize(20, 30)); 1342 getPaintController().commitNewDisplayItems(LayoutSize(20, 30));
1020 const auto& paintArtifact = getPaintController().paintArtifact(); 1343 const auto& paintArtifact = getPaintController().paintArtifact();
1021 ASSERT_EQ(1u, paintArtifact.getDisplayItemList().size()); 1344 ASSERT_EQ(1u, paintArtifact.getDisplayItemList().size());
1022 EXPECT_RECT_EQ(IntRect(-20, -30, 200, 100), visualRect(paintArtifact, 0)); 1345 EXPECT_EQ(IntRect(-20, -30, 200, 100), visualRect(paintArtifact, 0));
1023 } 1346 }
1024 1347
1025 void drawPath(GraphicsContext& context, DisplayItemClient& client, DisplayItem:: Type type, unsigned count) 1348 void drawPath(GraphicsContext& context, DisplayItemClient& client, DisplayItem:: Type type, unsigned count)
1026 { 1349 {
1027 if (DrawingRecorder::useCachedDrawingIfPossible(context, client, type)) 1350 if (DrawingRecorder::useCachedDrawingIfPossible(context, client, type))
1028 return; 1351 return;
1029 1352
1030 DrawingRecorder drawingRecorder(context, client, type, FloatRect(0, 0, 100, 100)); 1353 DrawingRecorder drawingRecorder(context, client, type, FloatRect(0, 0, 100, 100));
1031 SkPath path; 1354 SkPath path;
1032 path.moveTo(0, 0); 1355 path.moveTo(0, 0);
1033 path.lineTo(0, 100); 1356 path.lineTo(0, 100);
1034 path.lineTo(50, 50); 1357 path.lineTo(50, 50);
1035 path.lineTo(100, 100); 1358 path.lineTo(100, 100);
1036 path.lineTo(100, 0); 1359 path.lineTo(100, 0);
1037 path.close(); 1360 path.close();
1038 SkPaint paint; 1361 SkPaint paint;
1039 paint.setAntiAlias(true); 1362 paint.setAntiAlias(true);
1040 for (unsigned i = 0; i < count; i++) 1363 for (unsigned i = 0; i < count; i++)
1041 context.drawPath(path, paint); 1364 context.drawPath(path, paint);
1042 } 1365 }
1043 1366
1044 TEST_F_OR_P(PaintControllerTest, IsSuitableForGpuRasterizationSinglePath) 1367 TEST_F(PaintControllerTestBase, IsSuitableForGpuRasterizationSinglePath)
1045 { 1368 {
1046 FakeDisplayItemClient client("test client", LayoutRect(0, 0, 200, 100)); 1369 FakeDisplayItemClient client("test client", LayoutRect(0, 0, 200, 100));
1047 GraphicsContext context(getPaintController()); 1370 GraphicsContext context(getPaintController());
1048 drawPath(context, client, backgroundDrawingType, 1); 1371 drawPath(context, client, backgroundDrawingType, 1);
1049 getPaintController().commitNewDisplayItems(LayoutSize()); 1372 getPaintController().commitNewDisplayItems(LayoutSize());
1050 EXPECT_TRUE(getPaintController().paintArtifact().isSuitableForGpuRasterizati on()); 1373 EXPECT_TRUE(getPaintController().paintArtifact().isSuitableForGpuRasterizati on());
1051 } 1374 }
1052 1375
1053 TEST_F_OR_P(PaintControllerTest, IsNotSuitableForGpuRasterizationSinglePictureMa nyPaths) 1376 TEST_F(PaintControllerTestBase, IsNotSuitableForGpuRasterizationSinglePictureMan yPaths)
1054 { 1377 {
1055 FakeDisplayItemClient client("test client", LayoutRect(0, 0, 200, 100)); 1378 FakeDisplayItemClient client("test client", LayoutRect(0, 0, 200, 100));
1056 GraphicsContext context(getPaintController()); 1379 GraphicsContext context(getPaintController());
1057 1380
1058 drawPath(context, client, backgroundDrawingType, 50); 1381 drawPath(context, client, backgroundDrawingType, 50);
1059 getPaintController().commitNewDisplayItems(LayoutSize()); 1382 getPaintController().commitNewDisplayItems(LayoutSize());
1060 EXPECT_FALSE(getPaintController().paintArtifact().isSuitableForGpuRasterizat ion()); 1383 EXPECT_FALSE(getPaintController().paintArtifact().isSuitableForGpuRasterizat ion());
1061 } 1384 }
1062 1385
1063 TEST_F_OR_P(PaintControllerTest, IsNotSuitableForGpuRasterizationMultiplePicture sSinglePathEach) 1386 TEST_F(PaintControllerTestBase, IsNotSuitableForGpuRasterizationMultiplePictures SinglePathEach)
1064 { 1387 {
1065 FakeDisplayItemClient client("test client", LayoutRect(0, 0, 200, 100)); 1388 FakeDisplayItemClient client("test client", LayoutRect(0, 0, 200, 100));
1066 GraphicsContext context(getPaintController()); 1389 GraphicsContext context(getPaintController());
1067 getPaintController().beginSkippingCache(); 1390 getPaintController().beginSkippingCache();
1068 1391
1069 for (int i = 0; i < 50; ++i) 1392 for (int i = 0; i < 50; ++i)
1070 drawPath(context, client, backgroundDrawingType, 50); 1393 drawPath(context, client, backgroundDrawingType, 50);
1071 1394
1072 getPaintController().endSkippingCache(); 1395 getPaintController().endSkippingCache();
1073 getPaintController().commitNewDisplayItems(LayoutSize()); 1396 getPaintController().commitNewDisplayItems(LayoutSize());
1074 EXPECT_FALSE(getPaintController().paintArtifact().isSuitableForGpuRasterizat ion()); 1397 EXPECT_FALSE(getPaintController().paintArtifact().isSuitableForGpuRasterizat ion());
1075 } 1398 }
1076 1399
1077 TEST_F_OR_P(PaintControllerTest, IsNotSuitableForGpuRasterizationSinglePictureMa nyPathsTwoPaints) 1400 TEST_F(PaintControllerTestBase, IsNotSuitableForGpuRasterizationSinglePictureMan yPathsTwoPaints)
1078 { 1401 {
1079 FakeDisplayItemClient client("test client", LayoutRect(0, 0, 200, 100)); 1402 FakeDisplayItemClient client("test client", LayoutRect(0, 0, 200, 100));
1080 1403
1081 { 1404 {
1082 GraphicsContext context(getPaintController()); 1405 GraphicsContext context(getPaintController());
1083 drawPath(context, client, backgroundDrawingType, 50); 1406 drawPath(context, client, backgroundDrawingType, 50);
1084 getPaintController().commitNewDisplayItems(LayoutSize()); 1407 getPaintController().commitNewDisplayItems(LayoutSize());
1085 EXPECT_FALSE(getPaintController().paintArtifact().isSuitableForGpuRaster ization()); 1408 EXPECT_FALSE(getPaintController().paintArtifact().isSuitableForGpuRaster ization());
1086 } 1409 }
1087 1410
1088 client.setDisplayItemsUncached(); 1411 client.setDisplayItemsUncached();
1089 1412
1090 { 1413 {
1091 GraphicsContext context(getPaintController()); 1414 GraphicsContext context(getPaintController());
1092 drawPath(context, client, backgroundDrawingType, 50); 1415 drawPath(context, client, backgroundDrawingType, 50);
1093 getPaintController().commitNewDisplayItems(LayoutSize()); 1416 getPaintController().commitNewDisplayItems(LayoutSize());
1094 EXPECT_FALSE(getPaintController().paintArtifact().isSuitableForGpuRaster ization()); 1417 EXPECT_FALSE(getPaintController().paintArtifact().isSuitableForGpuRaster ization());
1095 } 1418 }
1096 } 1419 }
1097 1420
1098 TEST_F_OR_P(PaintControllerTest, IsNotSuitableForGpuRasterizationSinglePictureMa nyPathsCached) 1421 TEST_F(PaintControllerTestBase, IsNotSuitableForGpuRasterizationSinglePictureMan yPathsCached)
1099 { 1422 {
1100 FakeDisplayItemClient client("test client", LayoutRect(0, 0, 200, 100)); 1423 FakeDisplayItemClient client("test client", LayoutRect(0, 0, 200, 100));
1101 1424
1102 { 1425 {
1103 GraphicsContext context(getPaintController()); 1426 GraphicsContext context(getPaintController());
1104 drawPath(context, client, backgroundDrawingType, 50); 1427 drawPath(context, client, backgroundDrawingType, 50);
1105 getPaintController().commitNewDisplayItems(LayoutSize()); 1428 getPaintController().commitNewDisplayItems(LayoutSize());
1106 EXPECT_FALSE(getPaintController().paintArtifact().isSuitableForGpuRaster ization()); 1429 EXPECT_FALSE(getPaintController().paintArtifact().isSuitableForGpuRaster ization());
1107 } 1430 }
1108 1431
(...skipping 21 matching lines...) Expand all
1130 EXPECT_TRUE(SubsequenceRecorder::useCachedSubsequenceIfPossible(context, con tainer)); 1453 EXPECT_TRUE(SubsequenceRecorder::useCachedSubsequenceIfPossible(context, con tainer));
1131 getPaintController().commitNewDisplayItems(LayoutSize()); 1454 getPaintController().commitNewDisplayItems(LayoutSize());
1132 EXPECT_FALSE(getPaintController().paintArtifact().isSuitableForGpuRasterizat ion()); 1455 EXPECT_FALSE(getPaintController().paintArtifact().isSuitableForGpuRasterizat ion());
1133 1456
1134 #if CHECK_DISPLAY_ITEM_CLIENT_ALIVENESS 1457 #if CHECK_DISPLAY_ITEM_CLIENT_ALIVENESS
1135 DisplayItemClient::endShouldKeepAliveAllClients(); 1458 DisplayItemClient::endShouldKeepAliveAllClients();
1136 #endif 1459 #endif
1137 } 1460 }
1138 1461
1139 // Temporarily disabled (pref regressions due to GPU veto stickiness: http://crb ug.com/603969). 1462 // Temporarily disabled (pref regressions due to GPU veto stickiness: http://crb ug.com/603969).
1140 TEST_F_OR_P(PaintControllerTest, DISABLED_IsNotSuitableForGpuRasterizationConcav eClipPath) 1463 TEST_F(PaintControllerTestBase, DISABLED_IsNotSuitableForGpuRasterizationConcave ClipPath)
1141 { 1464 {
1142 Path path; 1465 Path path;
1143 path.addLineTo(FloatPoint(50, 50)); 1466 path.addLineTo(FloatPoint(50, 50));
1144 path.addLineTo(FloatPoint(100, 0)); 1467 path.addLineTo(FloatPoint(100, 0));
1145 path.addLineTo(FloatPoint(50, 100)); 1468 path.addLineTo(FloatPoint(50, 100));
1146 path.closeSubpath(); 1469 path.closeSubpath();
1147 1470
1148 FakeDisplayItemClient client("test client", LayoutRect(0, 0, 200, 100)); 1471 FakeDisplayItemClient client("test client", LayoutRect(0, 0, 200, 100));
1149 GraphicsContext context(getPaintController()); 1472 GraphicsContext context(getPaintController());
1150 1473
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
1434 } 1757 }
1435 1758
1436 TEST_F(PaintControllerUnderInvalidationTest, FoldCompositingDrawingInSubsequence ) 1759 TEST_F(PaintControllerUnderInvalidationTest, FoldCompositingDrawingInSubsequence )
1437 { 1760 {
1438 testFoldCompositingDrawingInSubsequence(); 1761 testFoldCompositingDrawingInSubsequence();
1439 } 1762 }
1440 1763
1441 #endif // DCHECK_IS_ON() && defined(GTEST_HAS_DEATH_TEST) && !OS(ANDROID) 1764 #endif // DCHECK_IS_ON() && defined(GTEST_HAS_DEATH_TEST) && !OS(ANDROID)
1442 1765
1443 } // namespace blink 1766 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698