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

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

Issue 2539693002: Early-out from the prepaint tree walk (Closed)
Patch Set: Address chrishtrs comments Created 4 years 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/html/HTMLIFrameElement.h"
5 #include "core/layout/LayoutTestHelper.h" 6 #include "core/layout/LayoutTestHelper.h"
6 #include "core/layout/LayoutTreeAsText.h" 7 #include "core/layout/LayoutTreeAsText.h"
7 #include "core/layout/api/LayoutViewItem.h" 8 #include "core/layout/api/LayoutViewItem.h"
8 #include "core/paint/ObjectPaintProperties.h" 9 #include "core/paint/ObjectPaintProperties.h"
9 #include "core/paint/PaintPropertyTreePrinter.h" 10 #include "core/paint/PaintPropertyTreePrinter.h"
10 #include "platform/graphics/paint/GeometryMapper.h" 11 #include "platform/graphics/paint/GeometryMapper.h"
11 #include "platform/graphics/paint/ScrollPaintPropertyNode.h" 12 #include "platform/graphics/paint/ScrollPaintPropertyNode.h"
12 #include "platform/graphics/paint/TransformPaintPropertyNode.h" 13 #include "platform/graphics/paint/TransformPaintPropertyNode.h"
13 #include "platform/testing/RuntimeEnabledFeaturesTestHelpers.h" 14 #include "platform/testing/RuntimeEnabledFeaturesTestHelpers.h"
14 #include "platform/testing/UnitTestHelpers.h" 15 #include "platform/testing/UnitTestHelpers.h"
(...skipping 2907 matching lines...) Expand 10 before | Expand all | Expand 10 after
2922 EXPECT_TRUE(childLayoutView->descendantNeedsPaintPropertyUpdate()); 2923 EXPECT_TRUE(childLayoutView->descendantNeedsPaintPropertyUpdate());
2923 EXPECT_TRUE(innerDivWithTransform->needsPaintPropertyUpdate()); 2924 EXPECT_TRUE(innerDivWithTransform->needsPaintPropertyUpdate());
2924 EXPECT_FALSE(innerDivWithTransform->descendantNeedsPaintPropertyUpdate()); 2925 EXPECT_FALSE(innerDivWithTransform->descendantNeedsPaintPropertyUpdate());
2925 2926
2926 // After a lifecycle update, no nodes should need a descendant update. 2927 // After a lifecycle update, no nodes should need a descendant update.
2927 frameView->updateAllLifecyclePhases(); 2928 frameView->updateAllLifecyclePhases();
2928 EXPECT_FALSE(document().layoutView()->descendantNeedsPaintPropertyUpdate()); 2929 EXPECT_FALSE(document().layoutView()->descendantNeedsPaintPropertyUpdate());
2929 EXPECT_FALSE(divWithTransform->descendantNeedsPaintPropertyUpdate()); 2930 EXPECT_FALSE(divWithTransform->descendantNeedsPaintPropertyUpdate());
2930 EXPECT_FALSE(childLayoutView->descendantNeedsPaintPropertyUpdate()); 2931 EXPECT_FALSE(childLayoutView->descendantNeedsPaintPropertyUpdate());
2931 EXPECT_FALSE(innerDivWithTransform->descendantNeedsPaintPropertyUpdate()); 2932 EXPECT_FALSE(innerDivWithTransform->descendantNeedsPaintPropertyUpdate());
2933
2934 // A child frame marked as needing a paint property update should not be
2935 // skipped if the owning layout tree does not need an update.
2936 FrameView* childFrameView = childDocument().view();
2937 childFrameView->setNeedsPaintPropertyUpdate();
2938 EXPECT_TRUE(document().layoutView()->descendantNeedsPaintPropertyUpdate());
2939 frameView->updateAllLifecyclePhases();
2940 EXPECT_FALSE(document().layoutView()->descendantNeedsPaintPropertyUpdate());
2941 EXPECT_FALSE(frameView->needsPaintPropertyUpdate());
2942 EXPECT_FALSE(childFrameView->needsPaintPropertyUpdate());
2932 } 2943 }
2933 2944
2934 TEST_P(PaintPropertyTreeBuilderTest, UpdatingFrameViewContentClip) { 2945 TEST_P(PaintPropertyTreeBuilderTest, UpdatingFrameViewContentClip) {
2935 setBodyInnerHTML("hello world."); 2946 setBodyInnerHTML("hello world.");
2936 EXPECT_EQ(FloatRoundedRect(0, 0, 800, 600), frameContentClip()->clipRect()); 2947 EXPECT_EQ(FloatRoundedRect(0, 0, 800, 600), frameContentClip()->clipRect());
2937 document().view()->resize(800, 599); 2948 document().view()->resize(800, 599);
2938 document().view()->updateAllLifecyclePhases(); 2949 document().view()->updateAllLifecyclePhases();
2939 EXPECT_EQ(FloatRoundedRect(0, 0, 800, 599), frameContentClip()->clipRect()); 2950 EXPECT_EQ(FloatRoundedRect(0, 0, 800, 599), frameContentClip()->clipRect());
2940 document().view()->resize(800, 600); 2951 document().view()->resize(800, 600);
2941 document().view()->updateAllLifecyclePhases(); 2952 document().view()->updateAllLifecyclePhases();
2942 EXPECT_EQ(FloatRoundedRect(0, 0, 800, 600), frameContentClip()->clipRect()); 2953 EXPECT_EQ(FloatRoundedRect(0, 0, 800, 600), frameContentClip()->clipRect());
2943 document().view()->resize(5, 5); 2954 document().view()->resize(5, 5);
2944 document().view()->updateAllLifecyclePhases(); 2955 document().view()->updateAllLifecyclePhases();
2945 EXPECT_EQ(FloatRoundedRect(0, 0, 5, 5), frameContentClip()->clipRect()); 2956 EXPECT_EQ(FloatRoundedRect(0, 0, 5, 5), frameContentClip()->clipRect());
2946 } 2957 }
2947 2958
2959 TEST_P(PaintPropertyTreeBuilderTest, BuildingStopsAtThrottledFrames) {
2960 setBodyInnerHTML(
2961 "<style>body { margin: 0; }</style>"
2962 "<div id='transform' style='transform: translate3d(4px, 5px, 6px);'>"
2963 "</div>"
2964 "<iframe id='iframe' sandbox></iframe>");
2965 setChildFrameHTML(
2966 "<style>body { margin: 0; }</style>"
2967 "<div id='iframeTransform'"
2968 " style='transform: translate3d(4px, 5px, 6px);'/>");
2969
2970 // Move the child frame offscreen so it becomes available for throttling.
2971 auto* iframe = toHTMLIFrameElement(document().getElementById("iframe"));
2972 iframe->setAttribute(HTMLNames::styleAttr, "transform: translateY(5555px)");
2973 document().view()->updateAllLifecyclePhases();
2974 // Ensure intersection observer notifications get delivered.
2975 testing::runPendingTasks();
2976 EXPECT_FALSE(document().view()->isHiddenForThrottling());
2977 EXPECT_TRUE(childDocument().view()->isHiddenForThrottling());
2978
2979 auto* transform = document().getElementById("transform")->layoutObject();
2980 auto* iframeLayoutView = childDocument().layoutView();
2981 auto* iframeTransform =
2982 childDocument().getElementById("iframeTransform")->layoutObject();
2983
2984 // Invalidate properties in the iframe and ensure ancestors are marked.
2985 iframeTransform->setNeedsPaintPropertyUpdate();
2986 EXPECT_FALSE(document().layoutView()->needsPaintPropertyUpdate());
2987 EXPECT_TRUE(document().layoutView()->descendantNeedsPaintPropertyUpdate());
2988 EXPECT_FALSE(transform->needsPaintPropertyUpdate());
2989 EXPECT_FALSE(transform->descendantNeedsPaintPropertyUpdate());
2990 EXPECT_FALSE(iframeLayoutView->needsPaintPropertyUpdate());
2991 EXPECT_TRUE(iframeLayoutView->descendantNeedsPaintPropertyUpdate());
2992 EXPECT_TRUE(iframeTransform->needsPaintPropertyUpdate());
2993 EXPECT_FALSE(iframeTransform->descendantNeedsPaintPropertyUpdate());
2994
2995 transform->setNeedsPaintPropertyUpdate();
2996 EXPECT_TRUE(transform->needsPaintPropertyUpdate());
2997 EXPECT_FALSE(transform->descendantNeedsPaintPropertyUpdate());
2998
2999 {
3000 DocumentLifecycle::AllowThrottlingScope throttlingScope(
3001 document().lifecycle());
3002 EXPECT_FALSE(document().view()->shouldThrottleRendering());
3003 EXPECT_TRUE(childDocument().view()->shouldThrottleRendering());
3004
3005 // A lifecycle update should update all properties except those with
3006 // actively throttled descendants.
3007 document().view()->updateAllLifecyclePhases();
3008 EXPECT_FALSE(document().layoutView()->needsPaintPropertyUpdate());
3009 EXPECT_TRUE(document().layoutView()->descendantNeedsPaintPropertyUpdate());
3010 EXPECT_FALSE(transform->needsPaintPropertyUpdate());
3011 EXPECT_FALSE(transform->descendantNeedsPaintPropertyUpdate());
3012 EXPECT_FALSE(iframeLayoutView->needsPaintPropertyUpdate());
3013 EXPECT_TRUE(iframeLayoutView->descendantNeedsPaintPropertyUpdate());
3014 EXPECT_TRUE(iframeTransform->needsPaintPropertyUpdate());
3015 EXPECT_FALSE(iframeTransform->descendantNeedsPaintPropertyUpdate());
3016 }
3017
3018 EXPECT_FALSE(document().view()->shouldThrottleRendering());
3019 EXPECT_FALSE(childDocument().view()->shouldThrottleRendering());
3020 // Once unthrottled, a lifecycel update should update all properties.
3021 document().view()->updateAllLifecyclePhases();
3022 EXPECT_FALSE(document().layoutView()->needsPaintPropertyUpdate());
3023 EXPECT_FALSE(document().layoutView()->descendantNeedsPaintPropertyUpdate());
3024 EXPECT_FALSE(transform->needsPaintPropertyUpdate());
3025 EXPECT_FALSE(transform->descendantNeedsPaintPropertyUpdate());
3026 EXPECT_FALSE(iframeLayoutView->needsPaintPropertyUpdate());
3027 EXPECT_FALSE(iframeLayoutView->descendantNeedsPaintPropertyUpdate());
3028 EXPECT_FALSE(iframeTransform->needsPaintPropertyUpdate());
3029 EXPECT_FALSE(iframeTransform->descendantNeedsPaintPropertyUpdate());
3030 }
3031
2948 } // namespace blink 3032 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698