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

Side by Side Diff: third_party/WebKit/Source/web/tests/CompositorWorkerTest.cpp

Issue 1405993008: compositor-worker: plumb element id and mutable properties (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed layout test (and logged bug) Created 5 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "config.h"
6
7 #include "core/frame/FrameView.h"
8 #include "core/layout/LayoutView.h"
9 #include "core/layout/compositing/CompositedLayerMapping.h"
10 #include "core/layout/compositing/PaintLayerCompositor.h"
11 #include "core/page/Page.h"
12 #include "platform/graphics/GraphicsLayer.h"
13 #include "platform/testing/URLTestHelpers.h"
14 #include "public/platform/Platform.h"
15 #include "public/platform/WebLayer.h"
16 #include "public/platform/WebLayerTreeView.h"
17 #include "public/platform/WebMutableProperties.h"
18 #include "public/platform/WebUnitTestSupport.h"
19 #include "public/web/WebSettings.h"
20 #include "public/web/WebViewClient.h"
21 #include "web/WebLocalFrameImpl.h"
22 #include "web/WebViewImpl.h"
23 #include "web/tests/FrameTestHelpers.h"
24 #include <gtest/gtest.h>
25
26 namespace blink {
27
28 class CompositorWorkerTest : public testing::Test {
29 public:
30 CompositorWorkerTest()
31 : m_baseURL("http://www.test.com/")
32 {
33 RuntimeEnabledFeatures::setCompositorWorkerEnabled(true);
34 m_helper.initialize(true, 0, &m_mockWebViewClient, &configureSettings);
35 webViewImpl()->resize(IntSize(320, 240));
36
37 // OSX attaches main frame scrollbars to the VisualViewport so the Visua lViewport layers need
38 // to be initialized.
39 webViewImpl()->updateAllLifecyclePhases();
40 webViewImpl()->setRootGraphicsLayer(
41 webViewImpl()->mainFrameImpl()->frame()->view()->layoutView()->compo sitor()->rootGraphicsLayer());
42 }
43
44 ~CompositorWorkerTest() override
45 {
46 Platform::current()->unitTestSupport()->unregisterAllMockedURLs();
47 }
48
49 void navigateTo(const std::string& url)
50 {
51 FrameTestHelpers::loadFrame(webViewImpl()->mainFrame(), url);
52 }
53
54 void forceFullCompositingUpdate()
55 {
56 webViewImpl()->updateAllLifecyclePhases();
57 }
58
59 void registerMockedHttpURLLoad(const std::string& fileName)
60 {
61 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseU RL.c_str()), WebString::fromUTF8(fileName.c_str()));
62 }
63
64 WebLayer* getRootScrollLayer()
65 {
66 PaintLayerCompositor* compositor = frame()->contentLayoutObject()->compo sitor();
67 ASSERT(compositor);
68 ASSERT(compositor->scrollLayer());
69
70 WebLayer* webScrollLayer = compositor->scrollLayer()->platformLayer();
71 return webScrollLayer;
72 }
73
74 WebViewImpl* webViewImpl() const { return m_helper.webViewImpl(); }
75 LocalFrame* frame() const { return m_helper.webViewImpl()->mainFrameImpl()-> frame(); }
76
77 protected:
78 std::string m_baseURL;
79 FrameTestHelpers::TestWebViewClient m_mockWebViewClient;
80
81 private:
82 static void configureSettings(WebSettings* settings)
83 {
84 settings->setJavaScriptEnabled(true);
85 settings->setAcceleratedCompositingEnabled(true);
86 settings->setPreferCompositingToLCDTextEnabled(true);
87 }
88
89 FrameTestHelpers::WebViewHelper m_helper;
90 FrameTestHelpers::UseMockScrollbarSettings m_mockScrollbarSettings;
91 };
92
93 static CompositedLayerMapping* mappingFromElement(Element* element)
94 {
95 if (!element)
96 return nullptr;
97 LayoutObject* layoutObject = element->layoutObject();
98 if (!layoutObject || !layoutObject->isBoxModelObject())
99 return nullptr;
100 PaintLayer* layer = toLayoutBoxModelObject(layoutObject)->layer();
101 if (!layer)
102 return nullptr;
103 if (!layer->hasCompositedLayerMapping())
104 return nullptr;
105 return layer->compositedLayerMapping();
106 }
107
108 static WebLayer* webLayerFromGraphicsLayer(GraphicsLayer* graphicsLayer)
109 {
110 if (!graphicsLayer)
111 return nullptr;
112 return graphicsLayer->platformLayer();
113 }
114
115 static WebLayer* scrollingWebLayerFromElement(Element* element)
116 {
117 CompositedLayerMapping* compositedLayerMapping = mappingFromElement(element) ;
118 if (!compositedLayerMapping)
119 return nullptr;
120 return webLayerFromGraphicsLayer(compositedLayerMapping->scrollingContentsLa yer());
121 }
122
123 static WebLayer* webLayerFromElement(Element* element)
124 {
125 CompositedLayerMapping* compositedLayerMapping = mappingFromElement(element) ;
126 if (!compositedLayerMapping)
127 return nullptr;
128 return webLayerFromGraphicsLayer(compositedLayerMapping->mainGraphicsLayer() );
129 }
130
131 TEST_F(CompositorWorkerTest, plumbingElementIdAndMutableProperties)
132 {
133 registerMockedHttpURLLoad("compositor-proxy-basic.html");
134 navigateTo(m_baseURL + "compositor-proxy-basic.html");
135
136 forceFullCompositingUpdate();
137
138 Document* document = frame()->document();
139
140 Element* tallElement = document->getElementById("tall");
141 ASSERT_FALSE(tallElement->layoutObject()->style()->hasWillChangeTransformHin t());
142 WebLayer* tallLayer = webLayerFromElement(tallElement);
143 ASSERT(!tallLayer);
144
145 Element* proxiedElement = document->getElementById("proxied");
146 ASSERT_TRUE(proxiedElement->layoutObject()->style()->hasWillChangeTransformH int());
147 WebLayer* proxiedLayer = webLayerFromElement(proxiedElement);
148 ASSERT_TRUE(proxiedLayer->mutableProperties() & WebMutablePropertyTransform) ;
149 ASSERT_NE(0UL, proxiedLayer->elementId());
150
151 Element* scrollElement = document->getElementById("proxied-scroller");
152 ASSERT_TRUE(scrollElement->layoutObject()->style()->willChangeScrollPosition ());
153 WebLayer* scrollLayer = scrollingWebLayerFromElement(scrollElement);
154 ASSERT_TRUE(scrollLayer->mutableProperties() & (WebMutablePropertyScrollLeft | WebMutablePropertyScrollTop));
155 ASSERT_NE(0UL, scrollLayer->elementId());
156
157 ASSERT_TRUE(document->scrollingElement()->layoutObject()->style()->willChang eScrollPosition());
158 WebLayer* rootScrollLayer = getRootScrollLayer();
159 ASSERT_TRUE(rootScrollLayer->mutableProperties() & (WebMutablePropertyScroll Left | WebMutablePropertyScrollTop));
160 ASSERT_NE(0UL, rootScrollLayer->elementId());
161 }
162
163 TEST_F(CompositorWorkerTest, noProxies)
164 {
165 // This case is identical to compositor-proxy-basic, but no proxies have
166 // actually been created.
167 registerMockedHttpURLLoad("compositor-proxy-plumbing-no-proxies.html");
168 navigateTo(m_baseURL + "compositor-proxy-plumbing-no-proxies.html");
169
170 forceFullCompositingUpdate();
171
172 Document* document = frame()->document();
173
174 Element* tallElement = document->getElementById("tall");
175 ASSERT_FALSE(tallElement->layoutObject()->style()->hasWillChangeTransformHin t());
176 WebLayer* tallLayer = webLayerFromElement(tallElement);
177 ASSERT(!tallLayer);
178
179 Element* proxiedElement = document->getElementById("proxied");
180 ASSERT_FALSE(proxiedElement->layoutObject()->style()->hasWillChangeTransform Hint());
181 WebLayer* proxiedLayer = webLayerFromElement(proxiedElement);
182 ASSERT(!proxiedLayer);
183
184 Element* scrollElement = document->getElementById("proxied-scroller");
185 ASSERT_FALSE(scrollElement->layoutObject()->style()->willChangeScrollPositio n());
186 WebLayer* scrollLayer = scrollingWebLayerFromElement(scrollElement);
187 ASSERT_FALSE(scrollLayer->mutableProperties() & (WebMutablePropertyScrollLef t | WebMutablePropertyScrollTop));
188 ASSERT_EQ(0UL, scrollLayer->elementId());
189
190 ASSERT_FALSE(document->scrollingElement()->layoutObject()->style()->willChan geScrollPosition());
191 WebLayer* rootScrollLayer = getRootScrollLayer();
192 ASSERT_FALSE(rootScrollLayer->mutableProperties() & (WebMutablePropertyScrol lLeft | WebMutablePropertyScrollTop));
193 ASSERT_EQ(0UL, rootScrollLayer->elementId());
194 }
195
196 TEST_F(CompositorWorkerTest, disconnectedProxies)
197 {
198 // This case is identical to compositor-proxy-basic, but the proxies are
199 // disconnected (the result should be the same as compositor-proxy-plumbing- no-proxies).
200 registerMockedHttpURLLoad("compositor-proxy-basic-disconnected.html");
201 navigateTo(m_baseURL + "compositor-proxy-basic-disconnected.html");
202
203 forceFullCompositingUpdate();
204
205 Document* document = frame()->document();
206
207 Element* tallElement = document->getElementById("tall");
208 ASSERT_FALSE(tallElement->layoutObject()->style()->hasWillChangeTransformHin t());
209 WebLayer* tallLayer = webLayerFromElement(tallElement);
210 ASSERT(!tallLayer);
211
212 Element* proxiedElement = document->getElementById("proxied");
213 ASSERT_FALSE(proxiedElement->layoutObject()->style()->hasWillChangeTransform Hint());
214 WebLayer* proxiedLayer = webLayerFromElement(proxiedElement);
215 ASSERT(!proxiedLayer);
216
217 Element* scrollElement = document->getElementById("proxied-scroller");
218 ASSERT_FALSE(scrollElement->layoutObject()->style()->willChangeScrollPositio n());
219 WebLayer* scrollLayer = scrollingWebLayerFromElement(scrollElement);
220 ASSERT_FALSE(scrollLayer->mutableProperties() & (WebMutablePropertyScrollLef t | WebMutablePropertyScrollTop));
221 ASSERT_EQ(0UL, scrollLayer->elementId());
222
223 ASSERT_FALSE(document->scrollingElement()->layoutObject()->style()->willChan geScrollPosition());
224 WebLayer* rootScrollLayer = getRootScrollLayer();
225 ASSERT_FALSE(rootScrollLayer->mutableProperties() & (WebMutablePropertyScrol lLeft | WebMutablePropertyScrollTop));
226 ASSERT_EQ(0UL, rootScrollLayer->elementId());
227 }
228
229 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698