| OLD | NEW |
| 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 "core/layout/compositing/CompositedLayerMapping.h" | 5 #include "core/layout/compositing/CompositedLayerMapping.h" |
| 6 | 6 |
| 7 #include "core/frame/FrameView.h" | 7 #include "core/frame/FrameView.h" |
| 8 #include "core/layout/LayoutBoxModelObject.h" | 8 #include "core/layout/LayoutBoxModelObject.h" |
| 9 #include "core/layout/LayoutTestHelper.h" | 9 #include "core/layout/LayoutTestHelper.h" |
| 10 #include "core/layout/api/LayoutViewItem.h" | 10 #include "core/layout/api/LayoutViewItem.h" |
| (...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 414 EXPECT_RECT_EQ(IntRect(0, 5000, 800, 5000), recomputeInterestRect(rootScroll
ingLayer)); | 414 EXPECT_RECT_EQ(IntRect(0, 5000, 800, 5000), recomputeInterestRect(rootScroll
ingLayer)); |
| 415 EXPECT_RECT_EQ(IntRect(0, 1400, 800, 8600), previousInterestRect(rootScrolli
ngLayer)); | 415 EXPECT_RECT_EQ(IntRect(0, 1400, 800, 8600), previousInterestRect(rootScrolli
ngLayer)); |
| 416 | 416 |
| 417 document().view()->setScrollPosition(IntPoint(0, 2000), ProgrammaticScroll); | 417 document().view()->setScrollPosition(IntPoint(0, 2000), ProgrammaticScroll); |
| 418 // Use recomputed interest rect because it changed enough. | 418 // Use recomputed interest rect because it changed enough. |
| 419 document().view()->updateAllLifecyclePhases(); | 419 document().view()->updateAllLifecyclePhases(); |
| 420 EXPECT_RECT_EQ(IntRect(0, 0, 800, 6600), recomputeInterestRect(rootScrolling
Layer)); | 420 EXPECT_RECT_EQ(IntRect(0, 0, 800, 6600), recomputeInterestRect(rootScrolling
Layer)); |
| 421 EXPECT_RECT_EQ(IntRect(0, 0, 800, 6600), previousInterestRect(rootScrollingL
ayer)); | 421 EXPECT_RECT_EQ(IntRect(0, 0, 800, 6600), previousInterestRect(rootScrollingL
ayer)); |
| 422 } | 422 } |
| 423 | 423 |
| 424 TEST_F(CompositedLayerMappingTest, InterestRectChangeOnShrunkenViewport) |
| 425 { |
| 426 setBodyInnerHTML( |
| 427 "<style>" |
| 428 " ::-webkit-scrollbar { width: 0; height: 0; }" |
| 429 " body { margin: 0; }" |
| 430 "</style>" |
| 431 "<div id='div' style='width: 100px; height: 10000px'>Text</div>"); |
| 432 |
| 433 document().view()->updateAllLifecyclePhases(); |
| 434 GraphicsLayer* rootScrollingLayer = document().layoutViewItem().layer()->gra
phicsLayerBackingForScrolling(); |
| 435 EXPECT_RECT_EQ(IntRect(0, 0, 800, 4600), previousInterestRect(rootScrollingL
ayer)); |
| 436 |
| 437 document().view()->setFrameRect(IntRect(0, 0, 800, 60)); |
| 438 document().view()->updateAllLifecyclePhases(); |
| 439 // Repaint required, so interest rect should be updated to shrunken size. |
| 440 EXPECT_RECT_EQ(IntRect(0, 0, 800, 4060), recomputeInterestRect(rootScrolling
Layer)); |
| 441 EXPECT_RECT_EQ(IntRect(0, 0, 800, 4060), previousInterestRect(rootScrollingL
ayer)); |
| 442 } |
| 443 |
| 424 TEST_F(CompositedLayerMappingTest, InterestRectChangeOnScroll) | 444 TEST_F(CompositedLayerMappingTest, InterestRectChangeOnScroll) |
| 425 { | 445 { |
| 426 document().frame()->settings()->setPreferCompositingToLCDTextEnabled(true); | 446 document().frame()->settings()->setPreferCompositingToLCDTextEnabled(true); |
| 427 | 447 |
| 428 setBodyInnerHTML( | 448 setBodyInnerHTML( |
| 429 "<style>" | 449 "<style>" |
| 430 " ::-webkit-scrollbar { width: 0; height: 0; }" | 450 " ::-webkit-scrollbar { width: 0; height: 0; }" |
| 431 " body { margin: 0; }" | 451 " body { margin: 0; }" |
| 432 "</style>" | 452 "</style>" |
| 433 "<div id='scroller' style='width: 400px; height: 400px; overflow: scroll
'>" | 453 "<div id='scroller' style='width: 400px; height: 400px; overflow: scroll
'>" |
| (...skipping 28 matching lines...) Expand all Loading... |
| 462 EXPECT_RECT_EQ(IntRect(0, 5000, 400, 5000), recomputeInterestRect(scrollingL
ayer)); | 482 EXPECT_RECT_EQ(IntRect(0, 5000, 400, 5000), recomputeInterestRect(scrollingL
ayer)); |
| 463 EXPECT_RECT_EQ(IntRect(0, 1400, 400, 8600), previousInterestRect(scrollingLa
yer)); | 483 EXPECT_RECT_EQ(IntRect(0, 1400, 400, 8600), previousInterestRect(scrollingLa
yer)); |
| 464 | 484 |
| 465 scroller->setScrollTop(2000); | 485 scroller->setScrollTop(2000); |
| 466 // Use recomputed interest rect because it changed enough. | 486 // Use recomputed interest rect because it changed enough. |
| 467 document().view()->updateAllLifecyclePhases(); | 487 document().view()->updateAllLifecyclePhases(); |
| 468 EXPECT_RECT_EQ(IntRect(0, 0, 400, 6600), recomputeInterestRect(scrollingLaye
r)); | 488 EXPECT_RECT_EQ(IntRect(0, 0, 400, 6600), recomputeInterestRect(scrollingLaye
r)); |
| 469 EXPECT_RECT_EQ(IntRect(0, 0, 400, 6600), previousInterestRect(scrollingLayer
)); | 489 EXPECT_RECT_EQ(IntRect(0, 0, 400, 6600), previousInterestRect(scrollingLayer
)); |
| 470 } | 490 } |
| 471 | 491 |
| 472 TEST_F(CompositedLayerMappingTest, InterestRectShouldNotChangeOnPaintInvalidatio
n) | 492 TEST_F(CompositedLayerMappingTest, InterestRectShouldChangeOnPaintInvalidation) |
| 473 { | 493 { |
| 474 document().frame()->settings()->setPreferCompositingToLCDTextEnabled(true); | 494 document().frame()->settings()->setPreferCompositingToLCDTextEnabled(true); |
| 475 | 495 |
| 476 setBodyInnerHTML( | 496 setBodyInnerHTML( |
| 477 "<style>" | 497 "<style>" |
| 478 " ::-webkit-scrollbar { width: 0; height: 0; }" | 498 " ::-webkit-scrollbar { width: 0; height: 0; }" |
| 479 " body { margin: 0; }" | 499 " body { margin: 0; }" |
| 480 "</style>" | 500 "</style>" |
| 481 "<div id='scroller' style='width: 400px; height: 400px; overflow: scroll
'>" | 501 "<div id='scroller' style='width: 400px; height: 400px; overflow: scroll
'>" |
| 482 " <div id='content' style='width: 100px; height: 10000px'>Text</div>" | 502 " <div id='content' style='width: 100px; height: 10000px'>Text</div>" |
| 483 "</div"); | 503 "</div"); |
| 484 | 504 |
| 485 document().view()->updateAllLifecyclePhases(); | 505 document().view()->updateAllLifecyclePhases(); |
| 486 Element* scroller = document().getElementById("scroller"); | 506 Element* scroller = document().getElementById("scroller"); |
| 487 GraphicsLayer* scrollingLayer = scroller->layoutBox()->layer()->graphicsLaye
rBackingForScrolling(); | 507 GraphicsLayer* scrollingLayer = scroller->layoutBox()->layer()->graphicsLaye
rBackingForScrolling(); |
| 488 | 508 |
| 489 scroller->setScrollTop(5400); | 509 scroller->setScrollTop(5400); |
| 490 document().view()->updateAllLifecyclePhases(); | 510 document().view()->updateAllLifecyclePhases(); |
| 491 scroller->setScrollTop(9400); | 511 scroller->setScrollTop(9400); |
| 492 // The above code creates an interest rect bigger than the interest rect if
recomputed now. | 512 // The above code creates an interest rect bigger than the interest rect if
recomputed now. |
| 493 document().view()->updateAllLifecyclePhases(); | 513 document().view()->updateAllLifecyclePhases(); |
| 494 EXPECT_RECT_EQ(IntRect(0, 5400, 400, 4600), recomputeInterestRect(scrollingL
ayer)); | 514 EXPECT_RECT_EQ(IntRect(0, 5400, 400, 4600), recomputeInterestRect(scrollingL
ayer)); |
| 495 EXPECT_RECT_EQ(IntRect(0, 1400, 400, 8600), previousInterestRect(scrollingLa
yer)); | 515 EXPECT_RECT_EQ(IntRect(0, 1400, 400, 8600), previousInterestRect(scrollingLa
yer)); |
| 496 | 516 |
| 497 // Paint invalidation and repaint should not change previous paint interest
rect. | 517 // Paint invalidation and repaint should change previous paint interest rect
. |
| 498 document().getElementById("content")->setTextContent("Change"); | 518 document().getElementById("content")->setTextContent("Change"); |
| 499 document().view()->updateAllLifecyclePhases(); | 519 document().view()->updateAllLifecyclePhases(); |
| 500 EXPECT_RECT_EQ(IntRect(0, 5400, 400, 4600), recomputeInterestRect(scrollingL
ayer)); | 520 EXPECT_RECT_EQ(IntRect(0, 5400, 400, 4600), recomputeInterestRect(scrollingL
ayer)); |
| 501 EXPECT_RECT_EQ(IntRect(0, 1400, 400, 8600), previousInterestRect(scrollingLa
yer)); | 521 EXPECT_RECT_EQ(IntRect(0, 5400, 400, 4600), previousInterestRect(scrollingLa
yer)); |
| 502 } | 522 } |
| 503 | 523 |
| 504 TEST_F(CompositedLayerMappingTest, InterestRectOfSquashingLayerWithNegativeOverf
low) | 524 TEST_F(CompositedLayerMappingTest, InterestRectOfSquashingLayerWithNegativeOverf
low) |
| 505 { | 525 { |
| 506 setBodyInnerHTML( | 526 setBodyInnerHTML( |
| 507 "<style>body { margin: 0; font-size: 16px; }</style>" | 527 "<style>body { margin: 0; font-size: 16px; }</style>" |
| 508 "<div style='position: absolute; top: -500px; width: 200px; height: 700p
x; will-change: transform'></div>" | 528 "<div style='position: absolute; top: -500px; width: 200px; height: 700p
x; will-change: transform'></div>" |
| 509 "<div id='squashed' style='position: absolute; top: 190px;'>" | 529 "<div id='squashed' style='position: absolute; top: 190px;'>" |
| 510 " <div id='inside' style='width: 100px; height: 100px; text-indent: -10
000px'>text</div>" | 530 " <div id='inside' style='width: 100px; height: 100px; text-indent: -10
000px'>text</div>" |
| 511 "</div>"); | 531 "</div>"); |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 620 negativeCompositedChild->parentNode()->removeChild(negativeCompositedChild); | 640 negativeCompositedChild->parentNode()->removeChild(negativeCompositedChild); |
| 621 document().view()->updateAllLifecyclePhases(); | 641 document().view()->updateAllLifecyclePhases(); |
| 622 | 642 |
| 623 mapping = toLayoutBlock(getLayoutObjectByElementId("container"))->layer()->c
ompositedLayerMapping(); | 643 mapping = toLayoutBlock(getLayoutObjectByElementId("container"))->layer()->c
ompositedLayerMapping(); |
| 624 ASSERT_TRUE(mapping->scrollingContentsLayer()); | 644 ASSERT_TRUE(mapping->scrollingContentsLayer()); |
| 625 EXPECT_EQ(static_cast<GraphicsLayerPaintingPhase>(GraphicsLayerPaintOverflow
Contents | GraphicsLayerPaintCompositedScroll | GraphicsLayerPaintForeground), m
apping->scrollingContentsLayer()->paintingPhase()); | 645 EXPECT_EQ(static_cast<GraphicsLayerPaintingPhase>(GraphicsLayerPaintOverflow
Contents | GraphicsLayerPaintCompositedScroll | GraphicsLayerPaintForeground), m
apping->scrollingContentsLayer()->paintingPhase()); |
| 626 EXPECT_FALSE(mapping->foregroundLayer()); | 646 EXPECT_FALSE(mapping->foregroundLayer()); |
| 627 } | 647 } |
| 628 | 648 |
| 629 } // namespace blink | 649 } // namespace blink |
| OLD | NEW |