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

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: fix another media track layout test. Created 5 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
(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/WebCompositorMutableProperties.h"
16 #include "public/platform/WebLayer.h"
17 #include "public/platform/WebLayerTreeView.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
chrishtr 2015/12/01 23:17:03 Use the mock theme?
Ian Vollick 2015/12/02 00:39:33 These lines were copied from ScrollingCoordinatorT
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 WebLayer* tallLayer = webLayerFromElement(tallElement);
142 EXPECT_TRUE(!tallLayer);
143
144 Element* proxiedElement = document->getElementById("proxied");
145 WebLayer* proxiedLayer = webLayerFromElement(proxiedElement);
146 EXPECT_TRUE(proxiedLayer->compositorMutableProperties() & WebCompositorMutab lePropertyTransform);
147 EXPECT_FALSE(proxiedLayer->compositorMutableProperties() & (WebCompositorMut ablePropertyScrollLeft | WebCompositorMutablePropertyScrollTop | WebCompositorMu tablePropertyOpacity));
148 EXPECT_NE(0UL, proxiedLayer->elementId());
149
150 Element* scrollElement = document->getElementById("proxied-scroller");
151 WebLayer* scrollLayer = scrollingWebLayerFromElement(scrollElement);
152 EXPECT_TRUE(scrollLayer->compositorMutableProperties() & (WebCompositorMutab lePropertyScrollLeft | WebCompositorMutablePropertyScrollTop));
153 EXPECT_FALSE(scrollLayer->compositorMutableProperties() & (WebCompositorMuta blePropertyTransform | WebCompositorMutablePropertyOpacity));
154 EXPECT_NE(0UL, scrollLayer->elementId());
155
156 WebLayer* rootScrollLayer = getRootScrollLayer();
157 EXPECT_TRUE(rootScrollLayer->compositorMutableProperties() & (WebCompositorM utablePropertyScrollLeft | WebCompositorMutablePropertyScrollTop));
158 EXPECT_FALSE(rootScrollLayer->compositorMutableProperties() & (WebCompositor MutablePropertyTransform | WebCompositorMutablePropertyOpacity));
159
160 EXPECT_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 WebLayer* tallLayer = webLayerFromElement(tallElement);
176 EXPECT_TRUE(!tallLayer);
177
178 Element* proxiedElement = document->getElementById("proxied");
179 WebLayer* proxiedLayer = webLayerFromElement(proxiedElement);
180 EXPECT_TRUE(!proxiedLayer);
181
182 Element* scrollElement = document->getElementById("proxied-scroller");
183 WebLayer* scrollLayer = scrollingWebLayerFromElement(scrollElement);
184 EXPECT_FALSE(!!scrollLayer->compositorMutableProperties());
185 EXPECT_EQ(0UL, scrollLayer->elementId());
186
187 WebLayer* rootScrollLayer = getRootScrollLayer();
188 EXPECT_FALSE(!!rootScrollLayer->compositorMutableProperties());
189 EXPECT_EQ(0UL, rootScrollLayer->elementId());
190 }
191
192 TEST_F(CompositorWorkerTest, disconnectedProxies)
193 {
194 // This case is identical to compositor-proxy-basic, but the proxies are
195 // disconnected (the result should be the same as compositor-proxy-plumbing- no-proxies).
196 registerMockedHttpURLLoad("compositor-proxy-basic-disconnected.html");
197 navigateTo(m_baseURL + "compositor-proxy-basic-disconnected.html");
198
199 forceFullCompositingUpdate();
200
201 Document* document = frame()->document();
202
203 Element* tallElement = document->getElementById("tall");
204 WebLayer* tallLayer = webLayerFromElement(tallElement);
205 EXPECT_TRUE(!tallLayer);
206
207 Element* proxiedElement = document->getElementById("proxied");
208 WebLayer* proxiedLayer = webLayerFromElement(proxiedElement);
209 EXPECT_TRUE(!proxiedLayer);
210
211 Element* scrollElement = document->getElementById("proxied-scroller");
212 WebLayer* scrollLayer = scrollingWebLayerFromElement(scrollElement);
213 EXPECT_FALSE(!!scrollLayer->compositorMutableProperties());
214 EXPECT_EQ(0UL, scrollLayer->elementId());
215
216 WebLayer* rootScrollLayer = getRootScrollLayer();
217 EXPECT_FALSE(!!rootScrollLayer->compositorMutableProperties());
218 EXPECT_EQ(0UL, rootScrollLayer->elementId());
219 }
220
221 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698