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

Side by Side Diff: third_party/WebKit/Source/core/paint/BoxPaintInvalidatorTest.cpp

Issue 2699463004: Fix gradient background invalidation when HTML size changes (Closed)
Patch Set: - Created 3 years, 10 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "core/HTMLNames.h" 5 #include "core/HTMLNames.h"
6 #include "core/frame/FrameView.h" 6 #include "core/frame/FrameView.h"
7 #include "core/layout/LayoutTestHelper.h" 7 #include "core/layout/LayoutTestHelper.h"
8 #include "core/layout/LayoutView.h" 8 #include "core/layout/LayoutView.h"
9 #include "core/paint/PaintLayer.h" 9 #include "core/paint/PaintLayer.h"
10 #include "platform/graphics/GraphicsLayer.h" 10 #include "platform/graphics/GraphicsLayer.h"
(...skipping 15 matching lines...) Expand all
26 // TODO(wangxianzhu): Test SPv2. 26 // TODO(wangxianzhu): Test SPv2.
27 return layoutView() 27 return layoutView()
28 .layer() 28 .layer()
29 ->graphicsLayerBacking() 29 ->graphicsLayerBacking()
30 ->getRasterInvalidationTracking(); 30 ->getRasterInvalidationTracking();
31 } 31 }
32 32
33 private: 33 private:
34 void SetUp() override { 34 void SetUp() override {
35 RenderingTest::SetUp(); 35 RenderingTest::SetUp();
36 document().setCompatibilityMode(Document::NoQuirksMode);
36 enableCompositing(); 37 enableCompositing();
37 setBodyInnerHTML( 38 setBodyInnerHTML(
38 "<style>" 39 "<style>"
39 " body {" 40 " body {"
40 " margin: 0;" 41 " margin: 0;"
41 " height: 0;" 42 " height: 0;"
42 " }" 43 " }"
43 " ::-webkit-scrollbar { display: none }" 44 " ::-webkit-scrollbar { display: none }"
44 " #target {" 45 " #target {"
45 " width: 50px;" 46 " width: 50px;"
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 target->setAttribute(HTMLNames::classAttr, ""); 228 target->setAttribute(HTMLNames::classAttr, "");
228 target->setAttribute(HTMLNames::styleAttr, "height: 2000px"); 229 target->setAttribute(HTMLNames::styleAttr, "height: 2000px");
229 document().view()->updateAllLifecyclePhases(); 230 document().view()->updateAllLifecyclePhases();
230 231
231 // Resize the content. 232 // Resize the content.
232 document().view()->setTracksPaintInvalidations(true); 233 document().view()->setTracksPaintInvalidations(true);
233 target->setAttribute(HTMLNames::styleAttr, "height: 3000px"); 234 target->setAttribute(HTMLNames::styleAttr, "height: 3000px");
234 document().view()->updateAllLifecyclePhases(); 235 document().view()->updateAllLifecyclePhases();
235 const auto& rasterInvalidations = 236 const auto& rasterInvalidations =
236 getRasterInvalidationTracking()->trackedRasterInvalidations; 237 getRasterInvalidationTracking()->trackedRasterInvalidations;
237 // TODO(wangxianzhu): Temporary for crbug.com/680745. 238 ASSERT_EQ(1u, rasterInvalidations.size());
238 // ASSERT_EQ(1u, rasterInvalidations.size());
239 ASSERT_EQ(2u, rasterInvalidations.size());
240 EXPECT_EQ(IntRect(0, 2000, 800, 1000), rasterInvalidations[0].rect); 239 EXPECT_EQ(IntRect(0, 2000, 800, 1000), rasterInvalidations[0].rect);
241 EXPECT_EQ(static_cast<const DisplayItemClient*>(&layoutView()), 240 EXPECT_EQ(static_cast<const DisplayItemClient*>(&layoutView()),
242 rasterInvalidations[0].client); 241 rasterInvalidations[0].client);
243 if (RuntimeEnabledFeatures::rootLayerScrollingEnabled()) { 242 if (RuntimeEnabledFeatures::rootLayerScrollingEnabled()) {
244 EXPECT_EQ(PaintInvalidationBackgroundOnScrollingContentsLayer, 243 EXPECT_EQ(PaintInvalidationBackgroundOnScrollingContentsLayer,
245 rasterInvalidations[0].reason); 244 rasterInvalidations[0].reason);
246 } else { 245 } else {
247 EXPECT_EQ(PaintInvalidationIncremental, rasterInvalidations[0].reason); 246 EXPECT_EQ(PaintInvalidationIncremental, rasterInvalidations[0].reason);
248 } 247 }
249 248
(...skipping 15 matching lines...) Expand all
265 target->setAttribute(HTMLNames::styleAttr, "height: 2000px"); 264 target->setAttribute(HTMLNames::styleAttr, "height: 2000px");
266 document().view()->updateAllLifecyclePhases(); 265 document().view()->updateAllLifecyclePhases();
267 266
268 // Resize the content. 267 // Resize the content.
269 document().view()->setTracksPaintInvalidations(true); 268 document().view()->setTracksPaintInvalidations(true);
270 target->setAttribute(HTMLNames::styleAttr, "height: 3000px"); 269 target->setAttribute(HTMLNames::styleAttr, "height: 3000px");
271 document().view()->updateAllLifecyclePhases(); 270 document().view()->updateAllLifecyclePhases();
272 271
273 const auto& rasterInvalidations = 272 const auto& rasterInvalidations =
274 getRasterInvalidationTracking()->trackedRasterInvalidations; 273 getRasterInvalidationTracking()->trackedRasterInvalidations;
275 // TODO(wangxianzhu): Temporary for crbug.com/680745. 274 ASSERT_EQ(1u, rasterInvalidations.size());
276 // ASSERT_EQ(1u, rasterInvalidations.size());
277 ASSERT_EQ(2u, rasterInvalidations.size());
278 EXPECT_EQ(IntRect(0, 0, 800, 3000), rasterInvalidations[0].rect); 275 EXPECT_EQ(IntRect(0, 0, 800, 3000), rasterInvalidations[0].rect);
279 EXPECT_EQ(static_cast<const DisplayItemClient*>(&layoutView()), 276 EXPECT_EQ(static_cast<const DisplayItemClient*>(&layoutView()),
280 rasterInvalidations[0].client); 277 rasterInvalidations[0].client);
281 if (RuntimeEnabledFeatures::rootLayerScrollingEnabled()) { 278 if (RuntimeEnabledFeatures::rootLayerScrollingEnabled()) {
282 EXPECT_EQ(PaintInvalidationBackgroundOnScrollingContentsLayer, 279 EXPECT_EQ(PaintInvalidationBackgroundOnScrollingContentsLayer,
283 rasterInvalidations[0].reason); 280 rasterInvalidations[0].reason);
284 } else { 281 } else {
285 EXPECT_EQ(PaintInvalidationLayoutOverflowBoxChange, 282 EXPECT_EQ(PaintInvalidationLayoutOverflowBoxChange,
286 rasterInvalidations[0].reason); 283 rasterInvalidations[0].reason);
287 } 284 }
(...skipping 25 matching lines...) Expand all
313 Element* iframe = document().getElementById("iframe"); 310 Element* iframe = document().getElementById("iframe");
314 Element* content = childDocument().getElementById("content"); 311 Element* content = childDocument().getElementById("content");
315 EXPECT_EQ(layoutView(), 312 EXPECT_EQ(layoutView(),
316 content->layoutObject()->containerForPaintInvalidation()); 313 content->layoutObject()->containerForPaintInvalidation());
317 314
318 // Resize the content. 315 // Resize the content.
319 document().view()->setTracksPaintInvalidations(true); 316 document().view()->setTracksPaintInvalidations(true);
320 content->setAttribute(HTMLNames::styleAttr, "height: 500px"); 317 content->setAttribute(HTMLNames::styleAttr, "height: 500px");
321 document().view()->updateAllLifecyclePhases(); 318 document().view()->updateAllLifecyclePhases();
322 // No invalidation because the changed part of layout overflow is clipped. 319 // No invalidation because the changed part of layout overflow is clipped.
323 // TODO(wangxianzhu): Temporary for crbug.com/680745. 320 EXPECT_FALSE(getRasterInvalidationTracking());
324 // EXPECT_FALSE(getRasterInvalidationTracking());
325 EXPECT_EQ(1u,
326 getRasterInvalidationTracking()->trackedRasterInvalidations.size());
327 document().view()->setTracksPaintInvalidations(false); 321 document().view()->setTracksPaintInvalidations(false);
328 322
329 // Resize the iframe. 323 // Resize the iframe.
330 document().view()->setTracksPaintInvalidations(true); 324 document().view()->setTracksPaintInvalidations(true);
331 iframe->setAttribute(HTMLNames::styleAttr, "height: 200px"); 325 iframe->setAttribute(HTMLNames::styleAttr, "height: 200px");
332 document().view()->updateAllLifecyclePhases(); 326 document().view()->updateAllLifecyclePhases();
333 const auto& rasterInvalidations = 327 const auto& rasterInvalidations =
334 getRasterInvalidationTracking()->trackedRasterInvalidations; 328 getRasterInvalidationTracking()->trackedRasterInvalidations;
335 ASSERT_EQ(2u, rasterInvalidations.size()); 329 ASSERT_EQ(2u, rasterInvalidations.size());
336 EXPECT_EQ(IntRect(0, 100, 100, 100), rasterInvalidations[0].rect); 330 EXPECT_EQ(IntRect(0, 100, 100, 100), rasterInvalidations[0].rect);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
375 LayoutView* frameLayoutView = content->layoutObject()->view(); 369 LayoutView* frameLayoutView = content->layoutObject()->view();
376 EXPECT_EQ(layoutView(), 370 EXPECT_EQ(layoutView(),
377 content->layoutObject()->containerForPaintInvalidation()); 371 content->layoutObject()->containerForPaintInvalidation());
378 372
379 // Resize the content. 373 // Resize the content.
380 document().view()->setTracksPaintInvalidations(true); 374 document().view()->setTracksPaintInvalidations(true);
381 content->setAttribute(HTMLNames::styleAttr, "height: 500px"); 375 content->setAttribute(HTMLNames::styleAttr, "height: 500px");
382 document().view()->updateAllLifecyclePhases(); 376 document().view()->updateAllLifecyclePhases();
383 const auto* rasterInvalidations = 377 const auto* rasterInvalidations =
384 &getRasterInvalidationTracking()->trackedRasterInvalidations; 378 &getRasterInvalidationTracking()->trackedRasterInvalidations;
385 // TODO(wangxianzhu): Temporary for crbug.com/680745. 379 ASSERT_EQ(1u, rasterInvalidations->size());
386 // ASSERT_EQ(1u, rasterInvalidations->size());
387 ASSERT_EQ(2u, rasterInvalidations->size());
388 EXPECT_EQ(IntRect(0, 0, 100, 100), (*rasterInvalidations)[0].rect); 380 EXPECT_EQ(IntRect(0, 0, 100, 100), (*rasterInvalidations)[0].rect);
389 EXPECT_EQ(static_cast<const DisplayItemClient*>(frameLayoutView), 381 EXPECT_EQ(static_cast<const DisplayItemClient*>(frameLayoutView),
390 (*rasterInvalidations)[0].client); 382 (*rasterInvalidations)[0].client);
391 EXPECT_EQ(PaintInvalidationLayoutOverflowBoxChange, 383 EXPECT_EQ(PaintInvalidationLayoutOverflowBoxChange,
392 (*rasterInvalidations)[0].reason); 384 (*rasterInvalidations)[0].reason);
393 document().view()->setTracksPaintInvalidations(false); 385 document().view()->setTracksPaintInvalidations(false);
394 386
395 // Resize the iframe. 387 // Resize the iframe.
396 document().view()->setTracksPaintInvalidations(true); 388 document().view()->setTracksPaintInvalidations(true);
397 iframe->setAttribute(HTMLNames::styleAttr, "height: 200px"); 389 iframe->setAttribute(HTMLNames::styleAttr, "height: 200px");
398 document().view()->updateAllLifecyclePhases(); 390 document().view()->updateAllLifecyclePhases();
399 rasterInvalidations = 391 rasterInvalidations =
400 &getRasterInvalidationTracking()->trackedRasterInvalidations; 392 &getRasterInvalidationTracking()->trackedRasterInvalidations;
401 ASSERT_EQ(2u, rasterInvalidations->size()); 393 ASSERT_EQ(2u, rasterInvalidations->size());
402 EXPECT_EQ(IntRect(0, 100, 100, 100), (*rasterInvalidations)[0].rect); 394 EXPECT_EQ(IntRect(0, 100, 100, 100), (*rasterInvalidations)[0].rect);
403 EXPECT_EQ(static_cast<const DisplayItemClient*>(iframe->layoutObject()), 395 EXPECT_EQ(static_cast<const DisplayItemClient*>(iframe->layoutObject()),
404 (*rasterInvalidations)[0].client); 396 (*rasterInvalidations)[0].client);
405 EXPECT_EQ(PaintInvalidationIncremental, (*rasterInvalidations)[0].reason); 397 EXPECT_EQ(PaintInvalidationIncremental, (*rasterInvalidations)[0].reason);
406 EXPECT_EQ(static_cast<const DisplayItemClient*>(frameLayoutView), 398 EXPECT_EQ(static_cast<const DisplayItemClient*>(frameLayoutView),
407 (*rasterInvalidations)[1].client); 399 (*rasterInvalidations)[1].client);
408 EXPECT_EQ(IntRect(0, 0, 100, 200), (*rasterInvalidations)[1].rect); 400 EXPECT_EQ(IntRect(0, 0, 100, 200), (*rasterInvalidations)[1].rect);
409 if (RuntimeEnabledFeatures::rootLayerScrollingEnabled()) { 401 if (RuntimeEnabledFeatures::rootLayerScrollingEnabled()) {
410 // TODO(skobes): Treat LayoutView in the same way as normal objects having 402 // TODO(skobes): Treat LayoutView in the same way as normal objects having
411 // background-attachment: local. crbug.com/568847. 403 // background-attachment: local. crbug.com/568847.
412 EXPECT_EQ(PaintInvalidationFull, (*rasterInvalidations)[1].reason); 404 EXPECT_EQ(PaintInvalidationFull, (*rasterInvalidations)[1].reason);
413 } else { 405 } else {
414 EXPECT_EQ(PaintInvalidationBorderBoxChange, 406 EXPECT_EQ(PaintInvalidationViewBackground,
415 (*rasterInvalidations)[1].reason); 407 (*rasterInvalidations)[1].reason);
416 } 408 }
417 document().view()->setTracksPaintInvalidations(false); 409 document().view()->setTracksPaintInvalidations(false);
418 } 410 }
419 411
420 TEST_P(BoxPaintInvalidatorTest, CompositedBackgroundAttachmentLocalResize) { 412 TEST_P(BoxPaintInvalidatorTest, CompositedBackgroundAttachmentLocalResize) {
421 enableCompositing(); 413 enableCompositing();
422 414
423 Element* target = document().getElementById("target"); 415 Element* target = document().getElementById("target");
424 target->setAttribute(HTMLNames::classAttr, "border local-background"); 416 target->setAttribute(HTMLNames::classAttr, "border local-background");
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
555 getRasterInvalidationTracking()->trackedRasterInvalidations; 547 getRasterInvalidationTracking()->trackedRasterInvalidations;
556 ASSERT_EQ(1u, rasterInvalidations.size()); 548 ASSERT_EQ(1u, rasterInvalidations.size());
557 EXPECT_EQ(IntRect(0, 120, 70, 120), rasterInvalidations[0].rect); 549 EXPECT_EQ(IntRect(0, 120, 70, 120), rasterInvalidations[0].rect);
558 EXPECT_EQ(static_cast<const DisplayItemClient*>(target->layoutObject()), 550 EXPECT_EQ(static_cast<const DisplayItemClient*>(target->layoutObject()),
559 rasterInvalidations[0].client); 551 rasterInvalidations[0].client);
560 EXPECT_EQ(PaintInvalidationIncremental, rasterInvalidations[0].reason); 552 EXPECT_EQ(PaintInvalidationIncremental, rasterInvalidations[0].reason);
561 document().view()->setTracksPaintInvalidations(false); 553 document().view()->setTracksPaintInvalidations(false);
562 } 554 }
563 555
564 } // namespace blink 556 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698