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

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

Issue 2506353002: Incrementally build main thread scrolling reasons [spv2] (Closed)
Patch Set: Cleanup comments Created 4 years, 1 month 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/LayoutTestHelper.h" 5 #include "core/layout/LayoutTestHelper.h"
6 #include "core/layout/LayoutTreeAsText.h" 6 #include "core/layout/LayoutTreeAsText.h"
7 #include "core/layout/api/LayoutViewItem.h" 7 #include "core/layout/api/LayoutViewItem.h"
8 #include "core/paint/ObjectPaintProperties.h" 8 #include "core/paint/ObjectPaintProperties.h"
9 #include "core/paint/PaintPropertyTreePrinter.h" 9 #include "core/paint/PaintPropertyTreePrinter.h"
10 #include "platform/graphics/paint/GeometryMapper.h" 10 #include "platform/graphics/paint/GeometryMapper.h"
(...skipping 2588 matching lines...) Expand 10 before | Expand all | Expand 10 after
2599 " }" 2599 " }"
2600 " .forceScroll {" 2600 " .forceScroll {"
2601 " height: 4000px;" 2601 " height: 4000px;"
2602 " }" 2602 " }"
2603 "</style>" 2603 "</style>"
2604 "<div id='overflowA'>" 2604 "<div id='overflowA'>"
2605 " <div class='forceScroll'></div>" 2605 " <div class='forceScroll'></div>"
2606 "</div>" 2606 "</div>"
2607 "<div class='forceScroll'></div>"); 2607 "<div class='forceScroll'></div>");
2608 Element* overflowA = document().getElementById("overflowA"); 2608 Element* overflowA = document().getElementById("overflowA");
2609 EXPECT_FALSE(frameScroll()->hasMainThreadScrollingReasons( 2609 EXPECT_FALSE(frameScroll()->threadedScrollingDisabled());
2610 MainThreadScrollingReason::kThreadedScrollingDisabled));
2611 EXPECT_FALSE(overflowA->layoutObject() 2610 EXPECT_FALSE(overflowA->layoutObject()
2612 ->paintProperties() 2611 ->paintProperties()
2613 ->scroll() 2612 ->scroll()
2614 ->hasMainThreadScrollingReasons( 2613 ->threadedScrollingDisabled());
2615 MainThreadScrollingReason::kThreadedScrollingDisabled));
2616 2614
2617 document().settings()->setThreadedScrollingEnabled(false); 2615 document().settings()->setThreadedScrollingEnabled(false);
2616 // TODO(pdr): The main thread scrolling setting should invalidate properties.
Xianzhu 2016/11/17 19:03:04 The TODO is fine. Just curious, should we make it
pdr. 2016/11/17 21:01:36 I want to remove it entirely but that was shot dow
2617 document().view()->setNeedsPaintPropertyUpdate();
2618 overflowA->layoutObject()->setNeedsPaintPropertyUpdate();
2618 document().view()->updateAllLifecyclePhases(); 2619 document().view()->updateAllLifecyclePhases();
2619 2620
2620 EXPECT_TRUE(frameScroll()->hasMainThreadScrollingReasons( 2621 EXPECT_TRUE(frameScroll()->threadedScrollingDisabled());
2621 MainThreadScrollingReason::kThreadedScrollingDisabled));
2622 EXPECT_TRUE(overflowA->layoutObject() 2622 EXPECT_TRUE(overflowA->layoutObject()
2623 ->paintProperties() 2623 ->paintProperties()
2624 ->scroll() 2624 ->scroll()
2625 ->hasMainThreadScrollingReasons( 2625 ->threadedScrollingDisabled());
2626 MainThreadScrollingReason::kThreadedScrollingDisabled));
2627 } 2626 }
2628 2627
2629 // Disabled due to missing main thread scrolling property invalidation support. 2628 TEST_P(PaintPropertyTreeBuilderTest,
2630 // See: https://crbug.com/664672 2629 BackgroundAttachmentFixedMainThreadScrollReasonsWithNestedScrollers) {
2631 TEST_P(
2632 PaintPropertyTreeBuilderTest,
2633 DISABLED_BackgroundAttachmentFixedMainThreadScrollReasonsWithNestedScrollers ) {
2634 setBodyInnerHTML( 2630 setBodyInnerHTML(
2635 "<style>" 2631 "<style>"
2636 " #overflowA {" 2632 " #overflowA {"
2637 " position: absolute;" 2633 " position: absolute;"
2638 " overflow: scroll;" 2634 " overflow: scroll;"
2639 " width: 20px;" 2635 " width: 20px;"
2640 " height: 20px;" 2636 " height: 20px;"
2641 " }" 2637 " }"
2642 " #overflowB {" 2638 " #overflowB {"
2643 " position: absolute;" 2639 " position: absolute;"
(...skipping 12 matching lines...) Expand all
2656 "<div id='overflowA'>" 2652 "<div id='overflowA'>"
2657 " <div id='overflowB' class='backgroundAttachmentFixed'>" 2653 " <div id='overflowB' class='backgroundAttachmentFixed'>"
2658 " <div class='forceScroll'></div>" 2654 " <div class='forceScroll'></div>"
2659 " </div>" 2655 " </div>"
2660 " <div class='forceScroll'></div>" 2656 " <div class='forceScroll'></div>"
2661 "</div>" 2657 "</div>"
2662 "<div class='forceScroll'></div>"); 2658 "<div class='forceScroll'></div>");
2663 Element* overflowA = document().getElementById("overflowA"); 2659 Element* overflowA = document().getElementById("overflowA");
2664 Element* overflowB = document().getElementById("overflowB"); 2660 Element* overflowB = document().getElementById("overflowB");
2665 2661
2666 EXPECT_TRUE(frameScroll()->hasMainThreadScrollingReasons( 2662 EXPECT_TRUE(frameScroll()->hasBackgroundAttachmentFixedDescendants());
2667 MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects)); 2663 EXPECT_TRUE(overflowA->layoutObject()
2668 EXPECT_TRUE( 2664 ->paintProperties()
2669 overflowA->layoutObject() 2665 ->scroll()
2670 ->paintProperties() 2666 ->hasBackgroundAttachmentFixedDescendants());
2671 ->scroll() 2667 EXPECT_FALSE(overflowB->layoutObject()
2672 ->hasMainThreadScrollingReasons( 2668 ->paintProperties()
2673 MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects)); 2669 ->scroll()
2674 EXPECT_FALSE( 2670 ->hasBackgroundAttachmentFixedDescendants());
2675 overflowB->layoutObject()
2676 ->paintProperties()
2677 ->scroll()
2678 ->hasMainThreadScrollingReasons(
2679 MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects));
2680 2671
2681 // Removing a main thread scrolling reason should update the entire tree. 2672 // Removing a main thread scrolling reason should update the entire tree.
2682 overflowB->removeAttribute("class"); 2673 overflowB->removeAttribute("class");
2683 document().view()->updateAllLifecyclePhases(); 2674 document().view()->updateAllLifecyclePhases();
2684 EXPECT_FALSE(frameScroll()->hasMainThreadScrollingReasons( 2675 EXPECT_FALSE(frameScroll()->hasBackgroundAttachmentFixedDescendants());
2685 MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects)); 2676 EXPECT_FALSE(overflowA->layoutObject()
2686 EXPECT_FALSE( 2677 ->paintProperties()
2687 overflowA->layoutObject() 2678 ->scroll()
2688 ->paintProperties() 2679 ->hasBackgroundAttachmentFixedDescendants());
2689 ->scroll() 2680 EXPECT_FALSE(overflowB->layoutObject()
2690 ->hasMainThreadScrollingReasons( 2681 ->paintProperties()
2691 MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects)); 2682 ->scroll()
2692 EXPECT_FALSE( 2683 ->hasBackgroundAttachmentFixedDescendants());
2693 overflowB->layoutObject()
2694 ->paintProperties()
2695 ->scroll()
2696 ->hasMainThreadScrollingReasons(
2697 MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects));
2698 2684
2699 // Adding a main thread scrolling reason should update the entire tree. 2685 // Adding a main thread scrolling reason should update the entire tree.
2700 overflowB->setAttribute(HTMLNames::classAttr, "backgroundAttachmentFixed"); 2686 overflowB->setAttribute(HTMLNames::classAttr, "backgroundAttachmentFixed");
2701 document().view()->updateAllLifecyclePhases(); 2687 document().view()->updateAllLifecyclePhases();
2702 EXPECT_TRUE(frameScroll()->hasMainThreadScrollingReasons( 2688 EXPECT_TRUE(frameScroll()->hasBackgroundAttachmentFixedDescendants());
2703 MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects)); 2689 EXPECT_TRUE(overflowA->layoutObject()
2704 EXPECT_TRUE( 2690 ->paintProperties()
2705 overflowA->layoutObject() 2691 ->scroll()
2706 ->paintProperties() 2692 ->hasBackgroundAttachmentFixedDescendants());
2707 ->scroll() 2693 EXPECT_FALSE(overflowB->layoutObject()
2708 ->hasMainThreadScrollingReasons( 2694 ->paintProperties()
2709 MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects)); 2695 ->scroll()
2710 EXPECT_FALSE( 2696 ->hasBackgroundAttachmentFixedDescendants());
2711 overflowB->layoutObject()
2712 ->paintProperties()
2713 ->scroll()
2714 ->hasMainThreadScrollingReasons(
2715 MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects));
2716 } 2697 }
2717 2698
2718 // Disabled due to missing main thread scrolling property invalidation support. 2699 TEST_P(PaintPropertyTreeBuilderTest,
2719 // See: https://crbug.com/664672 2700 BackgroundAttachmentFixedMainThreadScrollReasonsWithFixedScroller) {
2720 TEST_P(
2721 PaintPropertyTreeBuilderTest,
2722 DISABLED_BackgroundAttachmentFixedMainThreadScrollReasonsWithFixedScroller) {
2723 setBodyInnerHTML( 2701 setBodyInnerHTML(
2724 "<style>" 2702 "<style>"
2725 " #overflowA {" 2703 " #overflowA {"
2726 " position: absolute;" 2704 " position: absolute;"
2727 " overflow: scroll;" 2705 " overflow: scroll;"
2728 " width: 20px;" 2706 " width: 20px;"
2729 " height: 20px;" 2707 " height: 20px;"
2730 " }" 2708 " }"
2731 " #overflowB {" 2709 " #overflowB {"
2732 " position: fixed;" 2710 " position: fixed;"
(...skipping 12 matching lines...) Expand all
2745 "<div id='overflowA'>" 2723 "<div id='overflowA'>"
2746 " <div id='overflowB' class='backgroundAttachmentFixed'>" 2724 " <div id='overflowB' class='backgroundAttachmentFixed'>"
2747 " <div class='forceScroll'></div>" 2725 " <div class='forceScroll'></div>"
2748 " </div>" 2726 " </div>"
2749 " <div class='forceScroll'></div>" 2727 " <div class='forceScroll'></div>"
2750 "</div>" 2728 "</div>"
2751 "<div class='forceScroll'></div>"); 2729 "<div class='forceScroll'></div>");
2752 Element* overflowA = document().getElementById("overflowA"); 2730 Element* overflowA = document().getElementById("overflowA");
2753 Element* overflowB = document().getElementById("overflowB"); 2731 Element* overflowB = document().getElementById("overflowB");
2754 2732
2755 EXPECT_FALSE( 2733 // This should be false. We are not as strict about main thread scrolling
2756 overflowA->layoutObject() 2734 // reasons as we could be.
2757 ->paintProperties() 2735 EXPECT_TRUE(overflowA->layoutObject()
2758 ->scroll() 2736 ->paintProperties()
2759 ->hasMainThreadScrollingReasons( 2737 ->scroll()
2760 MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects)); 2738 ->hasBackgroundAttachmentFixedDescendants());
2761 EXPECT_FALSE( 2739 EXPECT_FALSE(overflowB->layoutObject()
2762 overflowB->layoutObject() 2740 ->paintProperties()
2763 ->paintProperties() 2741 ->scroll()
2764 ->scroll() 2742 ->hasBackgroundAttachmentFixedDescendants());
2765 ->hasMainThreadScrollingReasons( 2743 EXPECT_TRUE(overflowB->layoutObject()
2766 MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects)); 2744 ->paintProperties()
2767 EXPECT_TRUE( 2745 ->scroll()
2768 overflowB->layoutObject() 2746 ->parent()
2769 ->paintProperties() 2747 ->isRoot());
2770 ->scroll()
2771 ->parent()
2772 ->hasMainThreadScrollingReasons(
2773 MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects));
2774 2748
2775 // Removing a main thread scrolling reason should update the entire tree. 2749 // Removing a main thread scrolling reason should update the entire tree.
2776 overflowB->removeAttribute("class"); 2750 overflowB->removeAttribute("class");
2777 document().view()->updateAllLifecyclePhases(); 2751 document().view()->updateAllLifecyclePhases();
2778 EXPECT_FALSE( 2752 EXPECT_FALSE(overflowA->layoutObject()
2779 overflowA->layoutObject() 2753 ->paintProperties()
2780 ->paintProperties() 2754 ->scroll()
2781 ->scroll() 2755 ->hasBackgroundAttachmentFixedDescendants());
2782 ->hasMainThreadScrollingReasons( 2756 EXPECT_FALSE(overflowB->layoutObject()
2783 MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects)); 2757 ->paintProperties()
2784 EXPECT_FALSE( 2758 ->scroll()
2785 overflowB->layoutObject() 2759 ->hasBackgroundAttachmentFixedDescendants());
2786 ->paintProperties() 2760 EXPECT_FALSE(overflowB->layoutObject()
2787 ->scroll() 2761 ->paintProperties()
2788 ->hasMainThreadScrollingReasons( 2762 ->scroll()
2789 MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects)); 2763 ->parent()
2790 EXPECT_FALSE( 2764 ->hasBackgroundAttachmentFixedDescendants());
2791 overflowB->layoutObject()
2792 ->paintProperties()
2793 ->scroll()
2794 ->parent()
2795 ->hasMainThreadScrollingReasons(
2796 MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects));
2797 } 2765 }
2798 2766
2799 TEST_P(PaintPropertyTreeBuilderTest, PaintOffsetsUnderMultiColumn) { 2767 TEST_P(PaintPropertyTreeBuilderTest, PaintOffsetsUnderMultiColumn) {
2800 setBodyInnerHTML( 2768 setBodyInnerHTML(
2801 "<style>" 2769 "<style>"
2802 " body { margin: 0; }" 2770 " body { margin: 0; }"
2803 " .space { height: 30px; }" 2771 " .space { height: 30px; }"
2804 " .abs { position: absolute; width: 20px; height: 20px; }" 2772 " .abs { position: absolute; width: 20px; height: 20px; }"
2805 "</style>" 2773 "</style>"
2806 "<div style='columns:2; width: 200px; column-gap: 0'>" 2774 "<div style='columns:2; width: 200px; column-gap: 0'>"
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
2916 EXPECT_EQ(framePreTranslation(), 2884 EXPECT_EQ(framePreTranslation(),
2917 childProperties->paintOffsetTranslation()->parent()); 2885 childProperties->paintOffsetTranslation()->parent());
2918 EXPECT_EQ(childProperties->paintOffsetTranslation(), 2886 EXPECT_EQ(childProperties->paintOffsetTranslation(),
2919 childPaintState.transform()); 2887 childPaintState.transform());
2920 // This will change once we added clip expansion node. 2888 // This will change once we added clip expansion node.
2921 EXPECT_EQ(filterProperties->effect()->outputClip(), childPaintState.clip()); 2889 EXPECT_EQ(filterProperties->effect()->outputClip(), childPaintState.clip());
2922 EXPECT_EQ(filterProperties->effect(), childPaintState.effect()); 2890 EXPECT_EQ(filterProperties->effect(), childPaintState.effect());
2923 } 2891 }
2924 2892
2925 } // namespace blink 2893 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698