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

Side by Side Diff: cc/layer_tree_host_impl_unittest.cc

Issue 11189043: cc: Rename cc classes and members to match filenames (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 2 months 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 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 "config.h" 5 #include "config.h"
6 6
7 #include "CCLayerTreeHostImpl.h" 7 #include "CCLayerTreeHostImpl.h"
8 8
9 #include "CCDelegatedRendererLayerImpl.h" 9 #include "CCDelegatedRendererLayerImpl.h"
10 #include "CCHeadsUpDisplayLayerImpl.h" 10 #include "CCHeadsUpDisplayLayerImpl.h"
(...skipping 21 matching lines...) Expand all
32 #include "cc/test/geometry_test_utils.h" 32 #include "cc/test/geometry_test_utils.h"
33 #include "cc/test/layer_test_common.h" 33 #include "cc/test/layer_test_common.h"
34 #include "cc/test/render_pass_test_common.h" 34 #include "cc/test/render_pass_test_common.h"
35 #include "cc/test/test_common.h" 35 #include "cc/test/test_common.h"
36 #include "testing/gmock/include/gmock/gmock.h" 36 #include "testing/gmock/include/gmock/gmock.h"
37 #include "testing/gtest/include/gtest/gtest.h" 37 #include "testing/gtest/include/gtest/gtest.h"
38 #include <public/WebVideoFrame.h> 38 #include <public/WebVideoFrame.h>
39 #include <public/WebVideoFrameProvider.h> 39 #include <public/WebVideoFrameProvider.h>
40 40
41 using namespace cc; 41 using namespace cc;
42 using namespace CCLayerTestCommon; 42 using namespace LayerTestCommon;
43 using namespace WebKit; 43 using namespace WebKit;
44 using namespace WebKitTests; 44 using namespace WebKitTests;
45 45
46 using ::testing::Mock; 46 using ::testing::Mock;
47 using ::testing::Return; 47 using ::testing::Return;
48 using ::testing::AnyNumber; 48 using ::testing::AnyNumber;
49 using ::testing::AtLeast; 49 using ::testing::AtLeast;
50 using ::testing::_; 50 using ::testing::_;
51 51
52 namespace { 52 namespace {
53 53
54 // This test is parametrized to run all tests with the 54 // This test is parametrized to run all tests with the
55 // CCSettings::pageScalePinchZoomEnabled field enabled and disabled. 55 // Settings::pageScalePinchZoomEnabled field enabled and disabled.
56 class CCLayerTreeHostImplTest : public testing::TestWithParam<bool>, 56 class LayerTreeHostImplTest : public testing::TestWithParam<bool>,
57 public CCLayerTreeHostImplClient { 57 public LayerTreeHostImplClient {
58 public: 58 public:
59 CCLayerTreeHostImplTest() 59 LayerTreeHostImplTest()
60 : m_onCanDrawStateChangedCalled(false) 60 : m_onCanDrawStateChangedCalled(false)
61 , m_didRequestCommit(false) 61 , m_didRequestCommit(false)
62 , m_didRequestRedraw(false) 62 , m_didRequestRedraw(false)
63 , m_reduceMemoryResult(true) 63 , m_reduceMemoryResult(true)
64 { 64 {
65 } 65 }
66 66
67 virtual void SetUp() 67 virtual void SetUp()
68 { 68 {
69 CCSettings::setPageScalePinchZoomEnabled(GetParam()); 69 Settings::setPageScalePinchZoomEnabled(GetParam());
70 CCLayerTreeSettings settings; 70 LayerTreeSettings settings;
71 settings.minimumOcclusionTrackingSize = IntSize(); 71 settings.minimumOcclusionTrackingSize = IntSize();
72 72
73 m_hostImpl = CCLayerTreeHostImpl::create(settings, this); 73 m_hostImpl = LayerTreeHostImpl::create(settings, this);
74 m_hostImpl->initializeRenderer(createContext()); 74 m_hostImpl->initializeRenderer(createContext());
75 m_hostImpl->setViewportSize(IntSize(10, 10), IntSize(10, 10)); 75 m_hostImpl->setViewportSize(IntSize(10, 10), IntSize(10, 10));
76 } 76 }
77 77
78 virtual void TearDown() 78 virtual void TearDown()
79 { 79 {
80 CCSettings::reset(); 80 Settings::reset();
81 } 81 }
82 82
83 virtual void didLoseContextOnImplThread() OVERRIDE { } 83 virtual void didLoseContextOnImplThread() OVERRIDE { }
84 virtual void onSwapBuffersCompleteOnImplThread() OVERRIDE { } 84 virtual void onSwapBuffersCompleteOnImplThread() OVERRIDE { }
85 virtual void onVSyncParametersChanged(double, double) OVERRIDE { } 85 virtual void onVSyncParametersChanged(double, double) OVERRIDE { }
86 virtual void onCanDrawStateChanged(bool canDraw) OVERRIDE { m_onCanDrawState ChangedCalled = true; } 86 virtual void onCanDrawStateChanged(bool canDraw) OVERRIDE { m_onCanDrawState ChangedCalled = true; }
87 virtual void setNeedsRedrawOnImplThread() OVERRIDE { m_didRequestRedraw = tr ue; } 87 virtual void setNeedsRedrawOnImplThread() OVERRIDE { m_didRequestRedraw = tr ue; }
88 virtual void setNeedsCommitOnImplThread() OVERRIDE { m_didRequestCommit = tr ue; } 88 virtual void setNeedsCommitOnImplThread() OVERRIDE { m_didRequestCommit = tr ue; }
89 virtual void postAnimationEventsToMainThreadOnImplThread(scoped_ptr<CCAnimat ionEventsVector>, double wallClockTime) OVERRIDE { } 89 virtual void postAnimationEventsToMainThreadOnImplThread(scoped_ptr<Animatio nEventsVector>, double wallClockTime) OVERRIDE { }
90 virtual bool reduceContentsTextureMemoryOnImplThread(size_t limitBytes) OVER RIDE { return m_reduceMemoryResult; } 90 virtual bool reduceContentsTextureMemoryOnImplThread(size_t limitBytes) OVER RIDE { return m_reduceMemoryResult; }
91 91
92 void setReduceMemoryResult(bool reduceMemoryResult) { m_reduceMemoryResult = reduceMemoryResult; } 92 void setReduceMemoryResult(bool reduceMemoryResult) { m_reduceMemoryResult = reduceMemoryResult; }
93 93
94 scoped_ptr<CCLayerTreeHostImpl> createLayerTreeHost(bool partialSwap, scoped _ptr<CCGraphicsContext> graphicsContext, scoped_ptr<CCLayerImpl> root) 94 scoped_ptr<LayerTreeHostImpl> createLayerTreeHost(bool partialSwap, scoped_p tr<GraphicsContext> graphicsContext, scoped_ptr<LayerImpl> root)
95 { 95 {
96 CCSettings::setPartialSwapEnabled(partialSwap); 96 Settings::setPartialSwapEnabled(partialSwap);
97 97
98 CCLayerTreeSettings settings; 98 LayerTreeSettings settings;
99 settings.minimumOcclusionTrackingSize = IntSize(); 99 settings.minimumOcclusionTrackingSize = IntSize();
100 100
101 scoped_ptr<CCLayerTreeHostImpl> myHostImpl = CCLayerTreeHostImpl::create (settings, this); 101 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(set tings, this);
102 102
103 myHostImpl->initializeRenderer(graphicsContext.Pass()); 103 myHostImpl->initializeRenderer(graphicsContext.Pass());
104 myHostImpl->setViewportSize(IntSize(10, 10), IntSize(10, 10)); 104 myHostImpl->setViewportSize(IntSize(10, 10), IntSize(10, 10));
105 105
106 root->setAnchorPoint(FloatPoint(0, 0)); 106 root->setAnchorPoint(FloatPoint(0, 0));
107 root->setPosition(FloatPoint(0, 0)); 107 root->setPosition(FloatPoint(0, 0));
108 root->setBounds(IntSize(10, 10)); 108 root->setBounds(IntSize(10, 10));
109 root->setContentBounds(IntSize(10, 10)); 109 root->setContentBounds(IntSize(10, 10));
110 root->setVisibleContentRect(IntRect(0, 0, 10, 10)); 110 root->setVisibleContentRect(IntRect(0, 0, 10, 10));
111 root->setDrawsContent(true); 111 root->setDrawsContent(true);
112 myHostImpl->setRootLayer(root.Pass()); 112 myHostImpl->setRootLayer(root.Pass());
113 return myHostImpl.Pass(); 113 return myHostImpl.Pass();
114 } 114 }
115 115
116 static void expectClearedScrollDeltasRecursive(CCLayerImpl* layer) 116 static void expectClearedScrollDeltasRecursive(LayerImpl* layer)
117 { 117 {
118 ASSERT_EQ(layer->scrollDelta(), IntSize()); 118 ASSERT_EQ(layer->scrollDelta(), IntSize());
119 for (size_t i = 0; i < layer->children().size(); ++i) 119 for (size_t i = 0; i < layer->children().size(); ++i)
120 expectClearedScrollDeltasRecursive(layer->children()[i]); 120 expectClearedScrollDeltasRecursive(layer->children()[i]);
121 } 121 }
122 122
123 static void expectContains(const CCScrollAndScaleSet& scrollInfo, int id, co nst IntSize& scrollDelta) 123 static void expectContains(const ScrollAndScaleSet& scrollInfo, int id, cons t IntSize& scrollDelta)
124 { 124 {
125 int timesEncountered = 0; 125 int timesEncountered = 0;
126 126
127 for (size_t i = 0; i < scrollInfo.scrolls.size(); ++i) { 127 for (size_t i = 0; i < scrollInfo.scrolls.size(); ++i) {
128 if (scrollInfo.scrolls[i].layerId != id) 128 if (scrollInfo.scrolls[i].layerId != id)
129 continue; 129 continue;
130 EXPECT_EQ(scrollDelta.width(), scrollInfo.scrolls[i].scrollDelta.wid th()); 130 EXPECT_EQ(scrollDelta.width(), scrollInfo.scrolls[i].scrollDelta.wid th());
131 EXPECT_EQ(scrollDelta.height(), scrollInfo.scrolls[i].scrollDelta.he ight()); 131 EXPECT_EQ(scrollDelta.height(), scrollInfo.scrolls[i].scrollDelta.he ight());
132 timesEncountered++; 132 timesEncountered++;
133 } 133 }
134 134
135 ASSERT_EQ(timesEncountered, 1); 135 ASSERT_EQ(timesEncountered, 1);
136 } 136 }
137 137
138 void setupScrollAndContentsLayers(const IntSize& contentSize) 138 void setupScrollAndContentsLayers(const IntSize& contentSize)
139 { 139 {
140 scoped_ptr<CCLayerImpl> root = CCLayerImpl::create(1); 140 scoped_ptr<LayerImpl> root = LayerImpl::create(1);
141 root->setScrollable(true); 141 root->setScrollable(true);
142 root->setScrollPosition(IntPoint(0, 0)); 142 root->setScrollPosition(IntPoint(0, 0));
143 root->setMaxScrollPosition(contentSize); 143 root->setMaxScrollPosition(contentSize);
144 root->setBounds(contentSize); 144 root->setBounds(contentSize);
145 root->setContentBounds(contentSize); 145 root->setContentBounds(contentSize);
146 root->setPosition(FloatPoint(0, 0)); 146 root->setPosition(FloatPoint(0, 0));
147 root->setAnchorPoint(FloatPoint(0, 0)); 147 root->setAnchorPoint(FloatPoint(0, 0));
148 148
149 scoped_ptr<CCLayerImpl> contents = CCLayerImpl::create(2); 149 scoped_ptr<LayerImpl> contents = LayerImpl::create(2);
150 contents->setDrawsContent(true); 150 contents->setDrawsContent(true);
151 contents->setBounds(contentSize); 151 contents->setBounds(contentSize);
152 contents->setContentBounds(contentSize); 152 contents->setContentBounds(contentSize);
153 contents->setPosition(FloatPoint(0, 0)); 153 contents->setPosition(FloatPoint(0, 0));
154 contents->setAnchorPoint(FloatPoint(0, 0)); 154 contents->setAnchorPoint(FloatPoint(0, 0));
155 root->addChild(contents.Pass()); 155 root->addChild(contents.Pass());
156 m_hostImpl->setRootLayer(root.Pass()); 156 m_hostImpl->setRootLayer(root.Pass());
157 } 157 }
158 158
159 static scoped_ptr<CCLayerImpl> createScrollableLayer(int id, const IntSize& size) 159 static scoped_ptr<LayerImpl> createScrollableLayer(int id, const IntSize& si ze)
160 { 160 {
161 scoped_ptr<CCLayerImpl> layer = CCLayerImpl::create(id); 161 scoped_ptr<LayerImpl> layer = LayerImpl::create(id);
162 layer->setScrollable(true); 162 layer->setScrollable(true);
163 layer->setDrawsContent(true); 163 layer->setDrawsContent(true);
164 layer->setBounds(size); 164 layer->setBounds(size);
165 layer->setContentBounds(size); 165 layer->setContentBounds(size);
166 layer->setMaxScrollPosition(IntSize(size.width() * 2, size.height() * 2) ); 166 layer->setMaxScrollPosition(IntSize(size.width() * 2, size.height() * 2) );
167 return layer.Pass(); 167 return layer.Pass();
168 } 168 }
169 169
170 void initializeRendererAndDrawFrame() 170 void initializeRendererAndDrawFrame()
171 { 171 {
172 m_hostImpl->initializeRenderer(createContext()); 172 m_hostImpl->initializeRenderer(createContext());
173 CCLayerTreeHostImpl::FrameData frame; 173 LayerTreeHostImpl::FrameData frame;
174 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); 174 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame));
175 m_hostImpl->drawLayers(frame); 175 m_hostImpl->drawLayers(frame);
176 m_hostImpl->didDrawAllLayers(frame); 176 m_hostImpl->didDrawAllLayers(frame);
177 } 177 }
178 178
179 protected: 179 protected:
180 scoped_ptr<CCGraphicsContext> createContext() 180 scoped_ptr<GraphicsContext> createContext()
181 { 181 {
182 return FakeWebCompositorOutputSurface::create(scoped_ptr<WebKit::WebGrap hicsContext3D>(new FakeWebGraphicsContext3D)).PassAs<CCGraphicsContext>(); 182 return FakeWebCompositorOutputSurface::create(scoped_ptr<WebKit::WebGrap hicsContext3D>(new FakeWebGraphicsContext3D)).PassAs<GraphicsContext>();
183 } 183 }
184 184
185 DebugScopedSetImplThread m_alwaysImplThread; 185 DebugScopedSetImplThread m_alwaysImplThread;
186 DebugScopedSetMainThreadBlocked m_alwaysMainThreadBlocked; 186 DebugScopedSetMainThreadBlocked m_alwaysMainThreadBlocked;
187 187
188 scoped_ptr<CCLayerTreeHostImpl> m_hostImpl; 188 scoped_ptr<LayerTreeHostImpl> m_hostImpl;
189 bool m_onCanDrawStateChangedCalled; 189 bool m_onCanDrawStateChangedCalled;
190 bool m_didRequestCommit; 190 bool m_didRequestCommit;
191 bool m_didRequestRedraw; 191 bool m_didRequestRedraw;
192 bool m_reduceMemoryResult; 192 bool m_reduceMemoryResult;
193 CCScopedSettings m_scopedSettings; 193 ScopedSettings m_scopedSettings;
194 }; 194 };
195 195
196 class FakeWebGraphicsContext3DMakeCurrentFails : public FakeWebGraphicsContext3D { 196 class FakeWebGraphicsContext3DMakeCurrentFails : public FakeWebGraphicsContext3D {
197 public: 197 public:
198 virtual bool makeContextCurrent() { return false; } 198 virtual bool makeContextCurrent() { return false; }
199 }; 199 };
200 200
201 TEST_P(CCLayerTreeHostImplTest, notifyIfCanDrawChanged) 201 TEST_P(LayerTreeHostImplTest, notifyIfCanDrawChanged)
202 { 202 {
203 // Note: It is not possible to disable the renderer once it has been set, 203 // Note: It is not possible to disable the renderer once it has been set,
204 // so we do not need to test that disabling the renderer notifies us 204 // so we do not need to test that disabling the renderer notifies us
205 // that canDraw changed. 205 // that canDraw changed.
206 EXPECT_FALSE(m_hostImpl->canDraw()); 206 EXPECT_FALSE(m_hostImpl->canDraw());
207 m_onCanDrawStateChangedCalled = false; 207 m_onCanDrawStateChangedCalled = false;
208 208
209 setupScrollAndContentsLayers(IntSize(100, 100)); 209 setupScrollAndContentsLayers(IntSize(100, 100));
210 EXPECT_TRUE(m_hostImpl->canDraw()); 210 EXPECT_TRUE(m_hostImpl->canDraw());
211 EXPECT_TRUE(m_onCanDrawStateChangedCalled); 211 EXPECT_TRUE(m_onCanDrawStateChangedCalled);
212 m_onCanDrawStateChangedCalled = false; 212 m_onCanDrawStateChangedCalled = false;
213 213
214 // Toggle the root layer to make sure it toggles canDraw 214 // Toggle the root layer to make sure it toggles canDraw
215 m_hostImpl->setRootLayer(scoped_ptr<CCLayerImpl>()); 215 m_hostImpl->setRootLayer(scoped_ptr<LayerImpl>());
216 EXPECT_FALSE(m_hostImpl->canDraw()); 216 EXPECT_FALSE(m_hostImpl->canDraw());
217 EXPECT_TRUE(m_onCanDrawStateChangedCalled); 217 EXPECT_TRUE(m_onCanDrawStateChangedCalled);
218 m_onCanDrawStateChangedCalled = false; 218 m_onCanDrawStateChangedCalled = false;
219 219
220 setupScrollAndContentsLayers(IntSize(100, 100)); 220 setupScrollAndContentsLayers(IntSize(100, 100));
221 EXPECT_TRUE(m_hostImpl->canDraw()); 221 EXPECT_TRUE(m_hostImpl->canDraw());
222 EXPECT_TRUE(m_onCanDrawStateChangedCalled); 222 EXPECT_TRUE(m_onCanDrawStateChangedCalled);
223 m_onCanDrawStateChangedCalled = false; 223 m_onCanDrawStateChangedCalled = false;
224 224
225 // Toggle the device viewport size to make sure it toggles canDraw. 225 // Toggle the device viewport size to make sure it toggles canDraw.
(...skipping 23 matching lines...) Expand all
249 EXPECT_FALSE(m_hostImpl->canDraw()); 249 EXPECT_FALSE(m_hostImpl->canDraw());
250 EXPECT_TRUE(m_onCanDrawStateChangedCalled); 250 EXPECT_TRUE(m_onCanDrawStateChangedCalled);
251 m_onCanDrawStateChangedCalled = false; 251 m_onCanDrawStateChangedCalled = false;
252 252
253 m_hostImpl->resetContentsTexturesPurged(); 253 m_hostImpl->resetContentsTexturesPurged();
254 EXPECT_TRUE(m_hostImpl->canDraw()); 254 EXPECT_TRUE(m_hostImpl->canDraw());
255 EXPECT_TRUE(m_onCanDrawStateChangedCalled); 255 EXPECT_TRUE(m_onCanDrawStateChangedCalled);
256 m_onCanDrawStateChangedCalled = false; 256 m_onCanDrawStateChangedCalled = false;
257 } 257 }
258 258
259 TEST_P(CCLayerTreeHostImplTest, scrollDeltaNoLayers) 259 TEST_P(LayerTreeHostImplTest, scrollDeltaNoLayers)
260 { 260 {
261 ASSERT_FALSE(m_hostImpl->rootLayer()); 261 ASSERT_FALSE(m_hostImpl->rootLayer());
262 262
263 scoped_ptr<CCScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas (); 263 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas() ;
264 ASSERT_EQ(scrollInfo->scrolls.size(), 0u); 264 ASSERT_EQ(scrollInfo->scrolls.size(), 0u);
265 } 265 }
266 266
267 TEST_P(CCLayerTreeHostImplTest, scrollDeltaTreeButNoChanges) 267 TEST_P(LayerTreeHostImplTest, scrollDeltaTreeButNoChanges)
268 { 268 {
269 { 269 {
270 scoped_ptr<CCLayerImpl> root = CCLayerImpl::create(1); 270 scoped_ptr<LayerImpl> root = LayerImpl::create(1);
271 root->addChild(CCLayerImpl::create(2)); 271 root->addChild(LayerImpl::create(2));
272 root->addChild(CCLayerImpl::create(3)); 272 root->addChild(LayerImpl::create(3));
273 root->children()[1]->addChild(CCLayerImpl::create(4)); 273 root->children()[1]->addChild(LayerImpl::create(4));
274 root->children()[1]->addChild(CCLayerImpl::create(5)); 274 root->children()[1]->addChild(LayerImpl::create(5));
275 root->children()[1]->children()[0]->addChild(CCLayerImpl::create(6)); 275 root->children()[1]->children()[0]->addChild(LayerImpl::create(6));
276 m_hostImpl->setRootLayer(root.Pass()); 276 m_hostImpl->setRootLayer(root.Pass());
277 } 277 }
278 CCLayerImpl* root = m_hostImpl->rootLayer(); 278 LayerImpl* root = m_hostImpl->rootLayer();
279 279
280 expectClearedScrollDeltasRecursive(root); 280 expectClearedScrollDeltasRecursive(root);
281 281
282 scoped_ptr<CCScrollAndScaleSet> scrollInfo; 282 scoped_ptr<ScrollAndScaleSet> scrollInfo;
283 283
284 scrollInfo = m_hostImpl->processScrollDeltas(); 284 scrollInfo = m_hostImpl->processScrollDeltas();
285 ASSERT_EQ(scrollInfo->scrolls.size(), 0u); 285 ASSERT_EQ(scrollInfo->scrolls.size(), 0u);
286 expectClearedScrollDeltasRecursive(root); 286 expectClearedScrollDeltasRecursive(root);
287 287
288 scrollInfo = m_hostImpl->processScrollDeltas(); 288 scrollInfo = m_hostImpl->processScrollDeltas();
289 ASSERT_EQ(scrollInfo->scrolls.size(), 0u); 289 ASSERT_EQ(scrollInfo->scrolls.size(), 0u);
290 expectClearedScrollDeltasRecursive(root); 290 expectClearedScrollDeltasRecursive(root);
291 } 291 }
292 292
293 TEST_P(CCLayerTreeHostImplTest, scrollDeltaRepeatedScrolls) 293 TEST_P(LayerTreeHostImplTest, scrollDeltaRepeatedScrolls)
294 { 294 {
295 IntPoint scrollPosition(20, 30); 295 IntPoint scrollPosition(20, 30);
296 IntSize scrollDelta(11, -15); 296 IntSize scrollDelta(11, -15);
297 { 297 {
298 scoped_ptr<CCLayerImpl> root = CCLayerImpl::create(1); 298 scoped_ptr<LayerImpl> root = LayerImpl::create(1);
299 root->setScrollPosition(scrollPosition); 299 root->setScrollPosition(scrollPosition);
300 root->setScrollable(true); 300 root->setScrollable(true);
301 root->setMaxScrollPosition(IntSize(100, 100)); 301 root->setMaxScrollPosition(IntSize(100, 100));
302 root->scrollBy(scrollDelta); 302 root->scrollBy(scrollDelta);
303 m_hostImpl->setRootLayer(root.Pass()); 303 m_hostImpl->setRootLayer(root.Pass());
304 } 304 }
305 CCLayerImpl* root = m_hostImpl->rootLayer(); 305 LayerImpl* root = m_hostImpl->rootLayer();
306 306
307 scoped_ptr<CCScrollAndScaleSet> scrollInfo; 307 scoped_ptr<ScrollAndScaleSet> scrollInfo;
308 308
309 scrollInfo = m_hostImpl->processScrollDeltas(); 309 scrollInfo = m_hostImpl->processScrollDeltas();
310 ASSERT_EQ(scrollInfo->scrolls.size(), 1u); 310 ASSERT_EQ(scrollInfo->scrolls.size(), 1u);
311 EXPECT_EQ(root->sentScrollDelta(), scrollDelta); 311 EXPECT_EQ(root->sentScrollDelta(), scrollDelta);
312 expectContains(*scrollInfo, root->id(), scrollDelta); 312 expectContains(*scrollInfo, root->id(), scrollDelta);
313 313
314 IntSize scrollDelta2(-5, 27); 314 IntSize scrollDelta2(-5, 27);
315 root->scrollBy(scrollDelta2); 315 root->scrollBy(scrollDelta2);
316 scrollInfo = m_hostImpl->processScrollDeltas(); 316 scrollInfo = m_hostImpl->processScrollDeltas();
317 ASSERT_EQ(scrollInfo->scrolls.size(), 1u); 317 ASSERT_EQ(scrollInfo->scrolls.size(), 1u);
318 EXPECT_EQ(root->sentScrollDelta(), scrollDelta + scrollDelta2); 318 EXPECT_EQ(root->sentScrollDelta(), scrollDelta + scrollDelta2);
319 expectContains(*scrollInfo, root->id(), scrollDelta + scrollDelta2); 319 expectContains(*scrollInfo, root->id(), scrollDelta + scrollDelta2);
320 320
321 root->scrollBy(IntSize()); 321 root->scrollBy(IntSize());
322 scrollInfo = m_hostImpl->processScrollDeltas(); 322 scrollInfo = m_hostImpl->processScrollDeltas();
323 EXPECT_EQ(root->sentScrollDelta(), scrollDelta + scrollDelta2); 323 EXPECT_EQ(root->sentScrollDelta(), scrollDelta + scrollDelta2);
324 } 324 }
325 325
326 TEST_P(CCLayerTreeHostImplTest, scrollRootCallsCommitAndRedraw) 326 TEST_P(LayerTreeHostImplTest, scrollRootCallsCommitAndRedraw)
327 { 327 {
328 setupScrollAndContentsLayers(IntSize(100, 100)); 328 setupScrollAndContentsLayers(IntSize(100, 100));
329 m_hostImpl->setViewportSize(IntSize(50, 50), IntSize(50, 50)); 329 m_hostImpl->setViewportSize(IntSize(50, 50), IntSize(50, 50));
330 initializeRendererAndDrawFrame(); 330 initializeRendererAndDrawFrame();
331 331
332 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), CCInputHandlerClient::Whee l), CCInputHandlerClient::ScrollStarted); 332 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), InputHandlerClient::Wheel) , InputHandlerClient::ScrollStarted);
333 m_hostImpl->scrollBy(IntPoint(), IntSize(0, 10)); 333 m_hostImpl->scrollBy(IntPoint(), IntSize(0, 10));
334 m_hostImpl->scrollEnd(); 334 m_hostImpl->scrollEnd();
335 EXPECT_TRUE(m_didRequestRedraw); 335 EXPECT_TRUE(m_didRequestRedraw);
336 EXPECT_TRUE(m_didRequestCommit); 336 EXPECT_TRUE(m_didRequestCommit);
337 } 337 }
338 338
339 TEST_P(CCLayerTreeHostImplTest, scrollWithoutRootLayer) 339 TEST_P(LayerTreeHostImplTest, scrollWithoutRootLayer)
340 { 340 {
341 // We should not crash when trying to scroll an empty layer tree. 341 // We should not crash when trying to scroll an empty layer tree.
342 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), CCInputHandlerClient::Whee l), CCInputHandlerClient::ScrollIgnored); 342 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), InputHandlerClient::Wheel) , InputHandlerClient::ScrollIgnored);
343 } 343 }
344 344
345 TEST_P(CCLayerTreeHostImplTest, scrollWithoutRenderer) 345 TEST_P(LayerTreeHostImplTest, scrollWithoutRenderer)
346 { 346 {
347 CCLayerTreeSettings settings; 347 LayerTreeSettings settings;
348 m_hostImpl = CCLayerTreeHostImpl::create(settings, this); 348 m_hostImpl = LayerTreeHostImpl::create(settings, this);
349 349
350 // Initialization will fail here. 350 // Initialization will fail here.
351 m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurface::create(scoped _ptr<WebKit::WebGraphicsContext3D>(new FakeWebGraphicsContext3DMakeCurrentFails) ).PassAs<CCGraphicsContext>()); 351 m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurface::create(scoped _ptr<WebKit::WebGraphicsContext3D>(new FakeWebGraphicsContext3DMakeCurrentFails) ).PassAs<GraphicsContext>());
352 m_hostImpl->setViewportSize(IntSize(10, 10), IntSize(10, 10)); 352 m_hostImpl->setViewportSize(IntSize(10, 10), IntSize(10, 10));
353 353
354 setupScrollAndContentsLayers(IntSize(100, 100)); 354 setupScrollAndContentsLayers(IntSize(100, 100));
355 355
356 // We should not crash when trying to scroll after the renderer initializati on fails. 356 // We should not crash when trying to scroll after the renderer initializati on fails.
357 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), CCInputHandlerClient::Whee l), CCInputHandlerClient::ScrollIgnored); 357 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), InputHandlerClient::Wheel) , InputHandlerClient::ScrollIgnored);
358 } 358 }
359 359
360 TEST_P(CCLayerTreeHostImplTest, replaceTreeWhileScrolling) 360 TEST_P(LayerTreeHostImplTest, replaceTreeWhileScrolling)
361 { 361 {
362 const int scrollLayerId = 1; 362 const int scrollLayerId = 1;
363 363
364 setupScrollAndContentsLayers(IntSize(100, 100)); 364 setupScrollAndContentsLayers(IntSize(100, 100));
365 m_hostImpl->setViewportSize(IntSize(50, 50), IntSize(50, 50)); 365 m_hostImpl->setViewportSize(IntSize(50, 50), IntSize(50, 50));
366 initializeRendererAndDrawFrame(); 366 initializeRendererAndDrawFrame();
367 367
368 // We should not crash if the tree is replaced while we are scrolling. 368 // We should not crash if the tree is replaced while we are scrolling.
369 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), CCInputHandlerClient::Whee l), CCInputHandlerClient::ScrollStarted); 369 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), InputHandlerClient::Wheel) , InputHandlerClient::ScrollStarted);
370 m_hostImpl->detachLayerTree(); 370 m_hostImpl->detachLayerTree();
371 371
372 setupScrollAndContentsLayers(IntSize(100, 100)); 372 setupScrollAndContentsLayers(IntSize(100, 100));
373 373
374 // We should still be scrolling, because the scrolled layer also exists in t he new tree. 374 // We should still be scrolling, because the scrolled layer also exists in t he new tree.
375 IntSize scrollDelta(0, 10); 375 IntSize scrollDelta(0, 10);
376 m_hostImpl->scrollBy(IntPoint(), scrollDelta); 376 m_hostImpl->scrollBy(IntPoint(), scrollDelta);
377 m_hostImpl->scrollEnd(); 377 m_hostImpl->scrollEnd();
378 scoped_ptr<CCScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas (); 378 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas() ;
379 expectContains(*scrollInfo, scrollLayerId, scrollDelta); 379 expectContains(*scrollInfo, scrollLayerId, scrollDelta);
380 } 380 }
381 381
382 TEST_P(CCLayerTreeHostImplTest, clearRootRenderSurfaceAndScroll) 382 TEST_P(LayerTreeHostImplTest, clearRootRenderSurfaceAndScroll)
383 { 383 {
384 setupScrollAndContentsLayers(IntSize(100, 100)); 384 setupScrollAndContentsLayers(IntSize(100, 100));
385 m_hostImpl->setViewportSize(IntSize(50, 50), IntSize(50, 50)); 385 m_hostImpl->setViewportSize(IntSize(50, 50), IntSize(50, 50));
386 initializeRendererAndDrawFrame(); 386 initializeRendererAndDrawFrame();
387 387
388 // We should be able to scroll even if the root layer loses its render surfa ce after the most 388 // We should be able to scroll even if the root layer loses its render surfa ce after the most
389 // recent render. 389 // recent render.
390 m_hostImpl->rootLayer()->clearRenderSurface(); 390 m_hostImpl->rootLayer()->clearRenderSurface();
391 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), CCInputHandlerClient::Whee l), CCInputHandlerClient::ScrollStarted); 391 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), InputHandlerClient::Wheel) , InputHandlerClient::ScrollStarted);
392 } 392 }
393 393
394 TEST_P(CCLayerTreeHostImplTest, wheelEventHandlers) 394 TEST_P(LayerTreeHostImplTest, wheelEventHandlers)
395 { 395 {
396 setupScrollAndContentsLayers(IntSize(100, 100)); 396 setupScrollAndContentsLayers(IntSize(100, 100));
397 m_hostImpl->setViewportSize(IntSize(50, 50), IntSize(50, 50)); 397 m_hostImpl->setViewportSize(IntSize(50, 50), IntSize(50, 50));
398 initializeRendererAndDrawFrame(); 398 initializeRendererAndDrawFrame();
399 CCLayerImpl* root = m_hostImpl->rootLayer(); 399 LayerImpl* root = m_hostImpl->rootLayer();
400 400
401 root->setHaveWheelEventHandlers(true); 401 root->setHaveWheelEventHandlers(true);
402 402
403 // With registered event handlers, wheel scrolls have to go to the main thre ad. 403 // With registered event handlers, wheel scrolls have to go to the main thre ad.
404 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), CCInputHandlerClient::Whee l), CCInputHandlerClient::ScrollOnMainThread); 404 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), InputHandlerClient::Wheel) , InputHandlerClient::ScrollOnMainThread);
405 405
406 // But gesture scrolls can still be handled. 406 // But gesture scrolls can still be handled.
407 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), CCInputHandlerClient::Gest ure), CCInputHandlerClient::ScrollStarted); 407 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), InputHandlerClient::Gestur e), InputHandlerClient::ScrollStarted);
408 } 408 }
409 409
410 TEST_P(CCLayerTreeHostImplTest, shouldScrollOnMainThread) 410 TEST_P(LayerTreeHostImplTest, shouldScrollOnMainThread)
411 { 411 {
412 setupScrollAndContentsLayers(IntSize(100, 100)); 412 setupScrollAndContentsLayers(IntSize(100, 100));
413 m_hostImpl->setViewportSize(IntSize(50, 50), IntSize(50, 50)); 413 m_hostImpl->setViewportSize(IntSize(50, 50), IntSize(50, 50));
414 initializeRendererAndDrawFrame(); 414 initializeRendererAndDrawFrame();
415 CCLayerImpl* root = m_hostImpl->rootLayer(); 415 LayerImpl* root = m_hostImpl->rootLayer();
416 416
417 root->setShouldScrollOnMainThread(true); 417 root->setShouldScrollOnMainThread(true);
418 418
419 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), CCInputHandlerClient::Whee l), CCInputHandlerClient::ScrollOnMainThread); 419 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), InputHandlerClient::Wheel) , InputHandlerClient::ScrollOnMainThread);
420 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), CCInputHandlerClient::Gest ure), CCInputHandlerClient::ScrollOnMainThread); 420 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), InputHandlerClient::Gestur e), InputHandlerClient::ScrollOnMainThread);
421 } 421 }
422 422
423 TEST_P(CCLayerTreeHostImplTest, nonFastScrollableRegionBasic) 423 TEST_P(LayerTreeHostImplTest, nonFastScrollableRegionBasic)
424 { 424 {
425 setupScrollAndContentsLayers(IntSize(200, 200)); 425 setupScrollAndContentsLayers(IntSize(200, 200));
426 m_hostImpl->setViewportSize(IntSize(100, 100), IntSize(100, 100)); 426 m_hostImpl->setViewportSize(IntSize(100, 100), IntSize(100, 100));
427 initializeRendererAndDrawFrame(); 427 initializeRendererAndDrawFrame();
428 CCLayerImpl* root = m_hostImpl->rootLayer(); 428 LayerImpl* root = m_hostImpl->rootLayer();
429 429
430 root->setNonFastScrollableRegion(IntRect(0, 0, 50, 50)); 430 root->setNonFastScrollableRegion(IntRect(0, 0, 50, 50));
431 431
432 // All scroll types inside the non-fast scrollable region should fail. 432 // All scroll types inside the non-fast scrollable region should fail.
433 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(25, 25), CCInputHandlerClient::Wh eel), CCInputHandlerClient::ScrollOnMainThread); 433 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(25, 25), InputHandlerClient::Whee l), InputHandlerClient::ScrollOnMainThread);
434 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(25, 25), CCInputHandlerClient::Ge sture), CCInputHandlerClient::ScrollOnMainThread); 434 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(25, 25), InputHandlerClient::Gest ure), InputHandlerClient::ScrollOnMainThread);
435 435
436 // All scroll types outside this region should succeed. 436 // All scroll types outside this region should succeed.
437 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(75, 75), CCInputHandlerClient::Wh eel), CCInputHandlerClient::ScrollStarted); 437 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(75, 75), InputHandlerClient::Whee l), InputHandlerClient::ScrollStarted);
438 m_hostImpl->scrollBy(IntPoint(), IntSize(0, 10)); 438 m_hostImpl->scrollBy(IntPoint(), IntSize(0, 10));
439 m_hostImpl->scrollEnd(); 439 m_hostImpl->scrollEnd();
440 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(75, 75), CCInputHandlerClient::Ge sture), CCInputHandlerClient::ScrollStarted); 440 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(75, 75), InputHandlerClient::Gest ure), InputHandlerClient::ScrollStarted);
441 m_hostImpl->scrollBy(IntPoint(), IntSize(0, 10)); 441 m_hostImpl->scrollBy(IntPoint(), IntSize(0, 10));
442 m_hostImpl->scrollEnd(); 442 m_hostImpl->scrollEnd();
443 } 443 }
444 444
445 TEST_P(CCLayerTreeHostImplTest, nonFastScrollableRegionWithOffset) 445 TEST_P(LayerTreeHostImplTest, nonFastScrollableRegionWithOffset)
446 { 446 {
447 setupScrollAndContentsLayers(IntSize(200, 200)); 447 setupScrollAndContentsLayers(IntSize(200, 200));
448 m_hostImpl->setViewportSize(IntSize(100, 100), IntSize(100, 100)); 448 m_hostImpl->setViewportSize(IntSize(100, 100), IntSize(100, 100));
449 CCLayerImpl* root = m_hostImpl->rootLayer(); 449 LayerImpl* root = m_hostImpl->rootLayer();
450 450
451 root->setNonFastScrollableRegion(IntRect(0, 0, 50, 50)); 451 root->setNonFastScrollableRegion(IntRect(0, 0, 50, 50));
452 root->setPosition(FloatPoint(-25, 0)); 452 root->setPosition(FloatPoint(-25, 0));
453 initializeRendererAndDrawFrame(); 453 initializeRendererAndDrawFrame();
454 454
455 // This point would fall into the non-fast scrollable region except that we' ve moved the layer down by 25 pixels. 455 // This point would fall into the non-fast scrollable region except that we' ve moved the layer down by 25 pixels.
456 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(40, 10), CCInputHandlerClient::Wh eel), CCInputHandlerClient::ScrollStarted); 456 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(40, 10), InputHandlerClient::Whee l), InputHandlerClient::ScrollStarted);
457 m_hostImpl->scrollBy(IntPoint(), IntSize(0, 1)); 457 m_hostImpl->scrollBy(IntPoint(), IntSize(0, 1));
458 m_hostImpl->scrollEnd(); 458 m_hostImpl->scrollEnd();
459 459
460 // This point is still inside the non-fast region. 460 // This point is still inside the non-fast region.
461 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(10, 10), CCInputHandlerClient::Wh eel), CCInputHandlerClient::ScrollOnMainThread); 461 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(10, 10), InputHandlerClient::Whee l), InputHandlerClient::ScrollOnMainThread);
462 } 462 }
463 463
464 TEST_P(CCLayerTreeHostImplTest, maxScrollPositionChangedByDeviceScaleFactor) 464 TEST_P(LayerTreeHostImplTest, maxScrollPositionChangedByDeviceScaleFactor)
465 { 465 {
466 setupScrollAndContentsLayers(IntSize(100, 100)); 466 setupScrollAndContentsLayers(IntSize(100, 100));
467 467
468 float deviceScaleFactor = 2; 468 float deviceScaleFactor = 2;
469 IntSize layoutViewport(25, 25); 469 IntSize layoutViewport(25, 25);
470 IntSize deviceViewport(layoutViewport); 470 IntSize deviceViewport(layoutViewport);
471 deviceViewport.scale(deviceScaleFactor); 471 deviceViewport.scale(deviceScaleFactor);
472 m_hostImpl->setViewportSize(layoutViewport, deviceViewport); 472 m_hostImpl->setViewportSize(layoutViewport, deviceViewport);
473 m_hostImpl->setDeviceScaleFactor(deviceScaleFactor); 473 m_hostImpl->setDeviceScaleFactor(deviceScaleFactor);
474 EXPECT_EQ(m_hostImpl->rootLayer()->maxScrollPosition(), IntSize(25, 25)); 474 EXPECT_EQ(m_hostImpl->rootLayer()->maxScrollPosition(), IntSize(25, 25));
475 475
476 deviceScaleFactor = 1; 476 deviceScaleFactor = 1;
477 m_hostImpl->setViewportSize(layoutViewport, layoutViewport); 477 m_hostImpl->setViewportSize(layoutViewport, layoutViewport);
478 m_hostImpl->setDeviceScaleFactor(deviceScaleFactor); 478 m_hostImpl->setDeviceScaleFactor(deviceScaleFactor);
479 EXPECT_EQ(m_hostImpl->rootLayer()->maxScrollPosition(), IntSize(75, 75)); 479 EXPECT_EQ(m_hostImpl->rootLayer()->maxScrollPosition(), IntSize(75, 75));
480 } 480 }
481 481
482 TEST_P(CCLayerTreeHostImplTest, implPinchZoom) 482 TEST_P(LayerTreeHostImplTest, implPinchZoom)
483 { 483 {
484 // This test is specific to the page-scale based pinch zoom. 484 // This test is specific to the page-scale based pinch zoom.
485 if (!CCSettings::pageScalePinchZoomEnabled()) 485 if (!Settings::pageScalePinchZoomEnabled())
486 return; 486 return;
487 487
488 setupScrollAndContentsLayers(IntSize(100, 100)); 488 setupScrollAndContentsLayers(IntSize(100, 100));
489 m_hostImpl->setViewportSize(IntSize(50, 50), IntSize(50, 50)); 489 m_hostImpl->setViewportSize(IntSize(50, 50), IntSize(50, 50));
490 initializeRendererAndDrawFrame(); 490 initializeRendererAndDrawFrame();
491 491
492 CCLayerImpl* scrollLayer = m_hostImpl->rootScrollLayer(); 492 LayerImpl* scrollLayer = m_hostImpl->rootScrollLayer();
493 ASSERT(scrollLayer); 493 ASSERT(scrollLayer);
494 494
495 const float minPageScale = 1, maxPageScale = 4; 495 const float minPageScale = 1, maxPageScale = 4;
496 const WebTransformationMatrix identityScaleTransform; 496 const WebTransformationMatrix identityScaleTransform;
497 497
498 // The impl-based pinch zoome should not adjust the max scroll position. 498 // The impl-based pinch zoome should not adjust the max scroll position.
499 { 499 {
500 m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale); 500 m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale);
501 scrollLayer->setImplTransform(identityScaleTransform); 501 scrollLayer->setImplTransform(identityScaleTransform);
502 scrollLayer->setScrollDelta(IntSize()); 502 scrollLayer->setScrollDelta(IntSize());
503 503
504 float pageScaleDelta = 2; 504 float pageScaleDelta = 2;
505 m_hostImpl->pinchGestureBegin(); 505 m_hostImpl->pinchGestureBegin();
506 m_hostImpl->pinchGestureUpdate(pageScaleDelta, IntPoint(50, 50)); 506 m_hostImpl->pinchGestureUpdate(pageScaleDelta, IntPoint(50, 50));
507 m_hostImpl->pinchGestureEnd(); 507 m_hostImpl->pinchGestureEnd();
508 EXPECT_TRUE(m_didRequestRedraw); 508 EXPECT_TRUE(m_didRequestRedraw);
509 EXPECT_TRUE(m_didRequestCommit); 509 EXPECT_TRUE(m_didRequestCommit);
510 510
511 scoped_ptr<CCScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDe ltas(); 511 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDelt as();
512 EXPECT_EQ(scrollInfo->pageScaleDelta, pageScaleDelta); 512 EXPECT_EQ(scrollInfo->pageScaleDelta, pageScaleDelta);
513 513
514 EXPECT_EQ(m_hostImpl->rootLayer()->maxScrollPosition(), IntSize(50, 50)) ; 514 EXPECT_EQ(m_hostImpl->rootLayer()->maxScrollPosition(), IntSize(50, 50)) ;
515 } 515 }
516 516
517 // Scrolling after a pinch gesture should always be in local space. The scr oll deltas do not 517 // Scrolling after a pinch gesture should always be in local space. The scr oll deltas do not
518 // have the page scale factor applied. 518 // have the page scale factor applied.
519 { 519 {
520 m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale); 520 m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale);
521 scrollLayer->setImplTransform(identityScaleTransform); 521 scrollLayer->setImplTransform(identityScaleTransform);
522 scrollLayer->setScrollDelta(IntSize()); 522 scrollLayer->setScrollDelta(IntSize());
523 523
524 float pageScaleDelta = 2; 524 float pageScaleDelta = 2;
525 m_hostImpl->pinchGestureBegin(); 525 m_hostImpl->pinchGestureBegin();
526 m_hostImpl->pinchGestureUpdate(pageScaleDelta, IntPoint(0, 0)); 526 m_hostImpl->pinchGestureUpdate(pageScaleDelta, IntPoint(0, 0));
527 m_hostImpl->pinchGestureEnd(); 527 m_hostImpl->pinchGestureEnd();
528 528
529 IntSize scrollDelta(0, 10); 529 IntSize scrollDelta(0, 10);
530 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(5, 5), CCInputHandlerClient:: Wheel), CCInputHandlerClient::ScrollStarted); 530 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(5, 5), InputHandlerClient::Wh eel), InputHandlerClient::ScrollStarted);
531 m_hostImpl->scrollBy(IntPoint(), scrollDelta); 531 m_hostImpl->scrollBy(IntPoint(), scrollDelta);
532 m_hostImpl->scrollEnd(); 532 m_hostImpl->scrollEnd();
533 533
534 scoped_ptr<CCScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDe ltas(); 534 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDelt as();
535 expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), scrollD elta); 535 expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), scrollD elta);
536 } 536 }
537 } 537 }
538 538
539 TEST_P(CCLayerTreeHostImplTest, pinchGesture) 539 TEST_P(LayerTreeHostImplTest, pinchGesture)
540 { 540 {
541 setupScrollAndContentsLayers(IntSize(100, 100)); 541 setupScrollAndContentsLayers(IntSize(100, 100));
542 m_hostImpl->setViewportSize(IntSize(50, 50), IntSize(50, 50)); 542 m_hostImpl->setViewportSize(IntSize(50, 50), IntSize(50, 50));
543 initializeRendererAndDrawFrame(); 543 initializeRendererAndDrawFrame();
544 544
545 CCLayerImpl* scrollLayer = m_hostImpl->rootScrollLayer(); 545 LayerImpl* scrollLayer = m_hostImpl->rootScrollLayer();
546 ASSERT(scrollLayer); 546 ASSERT(scrollLayer);
547 547
548 const float minPageScale = CCSettings::pageScalePinchZoomEnabled() ? 1 : 0.5 ; 548 const float minPageScale = Settings::pageScalePinchZoomEnabled() ? 1 : 0.5;
549 const float maxPageScale = 4; 549 const float maxPageScale = 4;
550 const WebTransformationMatrix identityScaleTransform; 550 const WebTransformationMatrix identityScaleTransform;
551 551
552 // Basic pinch zoom in gesture 552 // Basic pinch zoom in gesture
553 { 553 {
554 m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale); 554 m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale);
555 scrollLayer->setImplTransform(identityScaleTransform); 555 scrollLayer->setImplTransform(identityScaleTransform);
556 scrollLayer->setScrollDelta(IntSize()); 556 scrollLayer->setScrollDelta(IntSize());
557 557
558 float pageScaleDelta = 2; 558 float pageScaleDelta = 2;
559 m_hostImpl->pinchGestureBegin(); 559 m_hostImpl->pinchGestureBegin();
560 m_hostImpl->pinchGestureUpdate(pageScaleDelta, IntPoint(50, 50)); 560 m_hostImpl->pinchGestureUpdate(pageScaleDelta, IntPoint(50, 50));
561 m_hostImpl->pinchGestureEnd(); 561 m_hostImpl->pinchGestureEnd();
562 EXPECT_TRUE(m_didRequestRedraw); 562 EXPECT_TRUE(m_didRequestRedraw);
563 EXPECT_TRUE(m_didRequestCommit); 563 EXPECT_TRUE(m_didRequestCommit);
564 564
565 scoped_ptr<CCScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDe ltas(); 565 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDelt as();
566 EXPECT_EQ(scrollInfo->pageScaleDelta, pageScaleDelta); 566 EXPECT_EQ(scrollInfo->pageScaleDelta, pageScaleDelta);
567 } 567 }
568 568
569 // Zoom-in clamping 569 // Zoom-in clamping
570 { 570 {
571 m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale); 571 m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale);
572 scrollLayer->setImplTransform(identityScaleTransform); 572 scrollLayer->setImplTransform(identityScaleTransform);
573 scrollLayer->setScrollDelta(IntSize()); 573 scrollLayer->setScrollDelta(IntSize());
574 float pageScaleDelta = 10; 574 float pageScaleDelta = 10;
575 575
576 m_hostImpl->pinchGestureBegin(); 576 m_hostImpl->pinchGestureBegin();
577 m_hostImpl->pinchGestureUpdate(pageScaleDelta, IntPoint(50, 50)); 577 m_hostImpl->pinchGestureUpdate(pageScaleDelta, IntPoint(50, 50));
578 m_hostImpl->pinchGestureEnd(); 578 m_hostImpl->pinchGestureEnd();
579 579
580 scoped_ptr<CCScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDe ltas(); 580 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDelt as();
581 EXPECT_EQ(scrollInfo->pageScaleDelta, maxPageScale); 581 EXPECT_EQ(scrollInfo->pageScaleDelta, maxPageScale);
582 } 582 }
583 583
584 // Zoom-out clamping 584 // Zoom-out clamping
585 { 585 {
586 m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale); 586 m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale);
587 scrollLayer->setImplTransform(identityScaleTransform); 587 scrollLayer->setImplTransform(identityScaleTransform);
588 scrollLayer->setScrollDelta(IntSize()); 588 scrollLayer->setScrollDelta(IntSize());
589 scrollLayer->setScrollPosition(IntPoint(50, 50)); 589 scrollLayer->setScrollPosition(IntPoint(50, 50));
590 590
591 float pageScaleDelta = 0.1f; 591 float pageScaleDelta = 0.1f;
592 m_hostImpl->pinchGestureBegin(); 592 m_hostImpl->pinchGestureBegin();
593 m_hostImpl->pinchGestureUpdate(pageScaleDelta, IntPoint(0, 0)); 593 m_hostImpl->pinchGestureUpdate(pageScaleDelta, IntPoint(0, 0));
594 m_hostImpl->pinchGestureEnd(); 594 m_hostImpl->pinchGestureEnd();
595 595
596 scoped_ptr<CCScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDe ltas(); 596 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDelt as();
597 EXPECT_EQ(scrollInfo->pageScaleDelta, minPageScale); 597 EXPECT_EQ(scrollInfo->pageScaleDelta, minPageScale);
598 598
599 if (!CCSettings::pageScalePinchZoomEnabled()) { 599 if (!Settings::pageScalePinchZoomEnabled()) {
600 // Pushed to (0,0) via clamping against contents layer size. 600 // Pushed to (0,0) via clamping against contents layer size.
601 expectContains(*scrollInfo, scrollLayer->id(), IntSize(-50, -50)); 601 expectContains(*scrollInfo, scrollLayer->id(), IntSize(-50, -50));
602 } else { 602 } else {
603 EXPECT_TRUE(scrollInfo->scrolls.isEmpty()); 603 EXPECT_TRUE(scrollInfo->scrolls.isEmpty());
604 } 604 }
605 } 605 }
606 606
607 // Two-finger panning 607 // Two-finger panning
608 { 608 {
609 m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale); 609 m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale);
610 scrollLayer->setImplTransform(identityScaleTransform); 610 scrollLayer->setImplTransform(identityScaleTransform);
611 scrollLayer->setScrollDelta(IntSize()); 611 scrollLayer->setScrollDelta(IntSize());
612 scrollLayer->setScrollPosition(IntPoint(20, 20)); 612 scrollLayer->setScrollPosition(IntPoint(20, 20));
613 613
614 float pageScaleDelta = 1; 614 float pageScaleDelta = 1;
615 m_hostImpl->pinchGestureBegin(); 615 m_hostImpl->pinchGestureBegin();
616 m_hostImpl->pinchGestureUpdate(pageScaleDelta, IntPoint(10, 10)); 616 m_hostImpl->pinchGestureUpdate(pageScaleDelta, IntPoint(10, 10));
617 m_hostImpl->pinchGestureUpdate(pageScaleDelta, IntPoint(20, 20)); 617 m_hostImpl->pinchGestureUpdate(pageScaleDelta, IntPoint(20, 20));
618 m_hostImpl->pinchGestureEnd(); 618 m_hostImpl->pinchGestureEnd();
619 619
620 scoped_ptr<CCScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDe ltas(); 620 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDelt as();
621 EXPECT_EQ(scrollInfo->pageScaleDelta, pageScaleDelta); 621 EXPECT_EQ(scrollInfo->pageScaleDelta, pageScaleDelta);
622 expectContains(*scrollInfo, scrollLayer->id(), IntSize(-10, -10)); 622 expectContains(*scrollInfo, scrollLayer->id(), IntSize(-10, -10));
623 } 623 }
624 } 624 }
625 625
626 TEST_P(CCLayerTreeHostImplTest, pageScaleAnimation) 626 TEST_P(LayerTreeHostImplTest, pageScaleAnimation)
627 { 627 {
628 setupScrollAndContentsLayers(IntSize(100, 100)); 628 setupScrollAndContentsLayers(IntSize(100, 100));
629 m_hostImpl->setViewportSize(IntSize(50, 50), IntSize(50, 50)); 629 m_hostImpl->setViewportSize(IntSize(50, 50), IntSize(50, 50));
630 initializeRendererAndDrawFrame(); 630 initializeRendererAndDrawFrame();
631 631
632 CCLayerImpl* scrollLayer = m_hostImpl->rootScrollLayer(); 632 LayerImpl* scrollLayer = m_hostImpl->rootScrollLayer();
633 ASSERT(scrollLayer); 633 ASSERT(scrollLayer);
634 634
635 const float minPageScale = CCSettings::pageScalePinchZoomEnabled() ? 1 : 0.5 ; 635 const float minPageScale = Settings::pageScalePinchZoomEnabled() ? 1 : 0.5;
636 const float maxPageScale = 4; 636 const float maxPageScale = 4;
637 const double startTime = 1; 637 const double startTime = 1;
638 const double duration = 0.1; 638 const double duration = 0.1;
639 const double halfwayThroughAnimation = startTime + duration / 2; 639 const double halfwayThroughAnimation = startTime + duration / 2;
640 const double endTime = startTime + duration; 640 const double endTime = startTime + duration;
641 const WebTransformationMatrix identityScaleTransform; 641 const WebTransformationMatrix identityScaleTransform;
642 642
643 // Non-anchor zoom-in 643 // Non-anchor zoom-in
644 { 644 {
645 m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale); 645 m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale);
646 scrollLayer->setImplTransform(identityScaleTransform); 646 scrollLayer->setImplTransform(identityScaleTransform);
647 scrollLayer->setScrollPosition(IntPoint(50, 50)); 647 scrollLayer->setScrollPosition(IntPoint(50, 50));
648 648
649 m_hostImpl->startPageScaleAnimation(IntSize(0, 0), false, 2, startTime, duration); 649 m_hostImpl->startPageScaleAnimation(IntSize(0, 0), false, 2, startTime, duration);
650 m_hostImpl->animate(halfwayThroughAnimation, halfwayThroughAnimation); 650 m_hostImpl->animate(halfwayThroughAnimation, halfwayThroughAnimation);
651 EXPECT_TRUE(m_didRequestRedraw); 651 EXPECT_TRUE(m_didRequestRedraw);
652 m_hostImpl->animate(endTime, endTime); 652 m_hostImpl->animate(endTime, endTime);
653 EXPECT_TRUE(m_didRequestCommit); 653 EXPECT_TRUE(m_didRequestCommit);
654 654
655 scoped_ptr<CCScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDe ltas(); 655 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDelt as();
656 EXPECT_EQ(scrollInfo->pageScaleDelta, 2); 656 EXPECT_EQ(scrollInfo->pageScaleDelta, 2);
657 expectContains(*scrollInfo, scrollLayer->id(), IntSize(-50, -50)); 657 expectContains(*scrollInfo, scrollLayer->id(), IntSize(-50, -50));
658 } 658 }
659 659
660 // Anchor zoom-out 660 // Anchor zoom-out
661 { 661 {
662 m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale); 662 m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale);
663 scrollLayer->setImplTransform(identityScaleTransform); 663 scrollLayer->setImplTransform(identityScaleTransform);
664 scrollLayer->setScrollPosition(IntPoint(50, 50)); 664 scrollLayer->setScrollPosition(IntPoint(50, 50));
665 665
666 m_hostImpl->startPageScaleAnimation(IntSize(25, 25), true, minPageScale, startTime, duration); 666 m_hostImpl->startPageScaleAnimation(IntSize(25, 25), true, minPageScale, startTime, duration);
667 m_hostImpl->animate(endTime, endTime); 667 m_hostImpl->animate(endTime, endTime);
668 EXPECT_TRUE(m_didRequestRedraw); 668 EXPECT_TRUE(m_didRequestRedraw);
669 EXPECT_TRUE(m_didRequestCommit); 669 EXPECT_TRUE(m_didRequestCommit);
670 670
671 scoped_ptr<CCScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDe ltas(); 671 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDelt as();
672 EXPECT_EQ(scrollInfo->pageScaleDelta, minPageScale); 672 EXPECT_EQ(scrollInfo->pageScaleDelta, minPageScale);
673 // Pushed to (0,0) via clamping against contents layer size. 673 // Pushed to (0,0) via clamping against contents layer size.
674 expectContains(*scrollInfo, scrollLayer->id(), IntSize(-50, -50)); 674 expectContains(*scrollInfo, scrollLayer->id(), IntSize(-50, -50));
675 } 675 }
676 } 676 }
677 677
678 TEST_P(CCLayerTreeHostImplTest, inhibitScrollAndPageScaleUpdatesWhilePinchZoomin g) 678 TEST_P(LayerTreeHostImplTest, inhibitScrollAndPageScaleUpdatesWhilePinchZooming)
679 { 679 {
680 setupScrollAndContentsLayers(IntSize(100, 100)); 680 setupScrollAndContentsLayers(IntSize(100, 100));
681 m_hostImpl->setViewportSize(IntSize(50, 50), IntSize(50, 50)); 681 m_hostImpl->setViewportSize(IntSize(50, 50), IntSize(50, 50));
682 initializeRendererAndDrawFrame(); 682 initializeRendererAndDrawFrame();
683 683
684 CCLayerImpl* scrollLayer = m_hostImpl->rootScrollLayer(); 684 LayerImpl* scrollLayer = m_hostImpl->rootScrollLayer();
685 ASSERT(scrollLayer); 685 ASSERT(scrollLayer);
686 686
687 const float minPageScale = CCSettings::pageScalePinchZoomEnabled() ? 1 : 0.5 ; 687 const float minPageScale = Settings::pageScalePinchZoomEnabled() ? 1 : 0.5;
688 const float maxPageScale = 4; 688 const float maxPageScale = 4;
689 689
690 // Pinch zoom in. 690 // Pinch zoom in.
691 { 691 {
692 // Start a pinch in gesture at the bottom right corner of the viewport. 692 // Start a pinch in gesture at the bottom right corner of the viewport.
693 const float zoomInDelta = 2; 693 const float zoomInDelta = 2;
694 m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale); 694 m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale);
695 m_hostImpl->pinchGestureBegin(); 695 m_hostImpl->pinchGestureBegin();
696 m_hostImpl->pinchGestureUpdate(zoomInDelta, IntPoint(50, 50)); 696 m_hostImpl->pinchGestureUpdate(zoomInDelta, IntPoint(50, 50));
697 697
698 // Because we are pinch zooming in, we shouldn't get any scroll or page 698 // Because we are pinch zooming in, we shouldn't get any scroll or page
699 // scale deltas. 699 // scale deltas.
700 scoped_ptr<CCScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDe ltas(); 700 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDelt as();
701 EXPECT_EQ(scrollInfo->pageScaleDelta, 1); 701 EXPECT_EQ(scrollInfo->pageScaleDelta, 1);
702 EXPECT_EQ(scrollInfo->scrolls.size(), 0u); 702 EXPECT_EQ(scrollInfo->scrolls.size(), 0u);
703 703
704 // Once the gesture ends, we get the final scroll and page scale values. 704 // Once the gesture ends, we get the final scroll and page scale values.
705 m_hostImpl->pinchGestureEnd(); 705 m_hostImpl->pinchGestureEnd();
706 scrollInfo = m_hostImpl->processScrollDeltas(); 706 scrollInfo = m_hostImpl->processScrollDeltas();
707 EXPECT_EQ(scrollInfo->pageScaleDelta, zoomInDelta); 707 EXPECT_EQ(scrollInfo->pageScaleDelta, zoomInDelta);
708 if (!CCSettings::pageScalePinchZoomEnabled()) { 708 if (!Settings::pageScalePinchZoomEnabled()) {
709 expectContains(*scrollInfo, scrollLayer->id(), IntSize(25, 25)); 709 expectContains(*scrollInfo, scrollLayer->id(), IntSize(25, 25));
710 } else { 710 } else {
711 EXPECT_TRUE(scrollInfo->scrolls.isEmpty()); 711 EXPECT_TRUE(scrollInfo->scrolls.isEmpty());
712 } 712 }
713 } 713 }
714 714
715 // Pinch zoom out. 715 // Pinch zoom out.
716 { 716 {
717 // Start a pinch out gesture at the bottom right corner of the viewport. 717 // Start a pinch out gesture at the bottom right corner of the viewport.
718 const float zoomOutDelta = 0.75; 718 const float zoomOutDelta = 0.75;
719 m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale); 719 m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale);
720 m_hostImpl->pinchGestureBegin(); 720 m_hostImpl->pinchGestureBegin();
721 m_hostImpl->pinchGestureUpdate(zoomOutDelta, IntPoint(50, 50)); 721 m_hostImpl->pinchGestureUpdate(zoomOutDelta, IntPoint(50, 50));
722 722
723 // Since we are pinch zooming out, we should get an update to zoom all 723 // Since we are pinch zooming out, we should get an update to zoom all
724 // the way out to the minimum page scale. 724 // the way out to the minimum page scale.
725 scoped_ptr<CCScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDe ltas(); 725 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDelt as();
726 if (!CCSettings::pageScalePinchZoomEnabled()) { 726 if (!Settings::pageScalePinchZoomEnabled()) {
727 EXPECT_EQ(scrollInfo->pageScaleDelta, minPageScale); 727 EXPECT_EQ(scrollInfo->pageScaleDelta, minPageScale);
728 expectContains(*scrollInfo, scrollLayer->id(), IntSize(0, 0)); 728 expectContains(*scrollInfo, scrollLayer->id(), IntSize(0, 0));
729 } else { 729 } else {
730 EXPECT_EQ(scrollInfo->pageScaleDelta, 1); 730 EXPECT_EQ(scrollInfo->pageScaleDelta, 1);
731 EXPECT_TRUE(scrollInfo->scrolls.isEmpty()); 731 EXPECT_TRUE(scrollInfo->scrolls.isEmpty());
732 } 732 }
733 733
734 // Once the gesture ends, we get the final scroll and page scale values. 734 // Once the gesture ends, we get the final scroll and page scale values.
735 m_hostImpl->pinchGestureEnd(); 735 m_hostImpl->pinchGestureEnd();
736 scrollInfo = m_hostImpl->processScrollDeltas(); 736 scrollInfo = m_hostImpl->processScrollDeltas();
737 if (CCSettings::pageScalePinchZoomEnabled()) { 737 if (Settings::pageScalePinchZoomEnabled()) {
738 EXPECT_EQ(scrollInfo->pageScaleDelta, minPageScale); 738 EXPECT_EQ(scrollInfo->pageScaleDelta, minPageScale);
739 expectContains(*scrollInfo, scrollLayer->id(), IntSize(25, 25)); 739 expectContains(*scrollInfo, scrollLayer->id(), IntSize(25, 25));
740 } else { 740 } else {
741 EXPECT_EQ(scrollInfo->pageScaleDelta, zoomOutDelta); 741 EXPECT_EQ(scrollInfo->pageScaleDelta, zoomOutDelta);
742 expectContains(*scrollInfo, scrollLayer->id(), IntSize(8, 8)); 742 expectContains(*scrollInfo, scrollLayer->id(), IntSize(8, 8));
743 } 743 }
744 } 744 }
745 } 745 }
746 746
747 TEST_P(CCLayerTreeHostImplTest, inhibitScrollAndPageScaleUpdatesWhileAnimatingPa geScale) 747 TEST_P(LayerTreeHostImplTest, inhibitScrollAndPageScaleUpdatesWhileAnimatingPage Scale)
748 { 748 {
749 setupScrollAndContentsLayers(IntSize(100, 100)); 749 setupScrollAndContentsLayers(IntSize(100, 100));
750 m_hostImpl->setViewportSize(IntSize(50, 50), IntSize(50, 50)); 750 m_hostImpl->setViewportSize(IntSize(50, 50), IntSize(50, 50));
751 initializeRendererAndDrawFrame(); 751 initializeRendererAndDrawFrame();
752 752
753 CCLayerImpl* scrollLayer = m_hostImpl->rootScrollLayer(); 753 LayerImpl* scrollLayer = m_hostImpl->rootScrollLayer();
754 ASSERT(scrollLayer); 754 ASSERT(scrollLayer);
755 755
756 const float minPageScale = CCSettings::pageScalePinchZoomEnabled() ? 1 : 0.5 ; 756 const float minPageScale = Settings::pageScalePinchZoomEnabled() ? 1 : 0.5;
757 const float maxPageScale = 4; 757 const float maxPageScale = 4;
758 const double startTime = 1; 758 const double startTime = 1;
759 const double duration = 0.1; 759 const double duration = 0.1;
760 const double halfwayThroughAnimation = startTime + duration / 2; 760 const double halfwayThroughAnimation = startTime + duration / 2;
761 const double endTime = startTime + duration; 761 const double endTime = startTime + duration;
762 762
763 // Start a page scale animation. 763 // Start a page scale animation.
764 const float pageScaleDelta = 2; 764 const float pageScaleDelta = 2;
765 m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale); 765 m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale);
766 m_hostImpl->startPageScaleAnimation(IntSize(50, 50), false, pageScaleDelta, startTime, duration); 766 m_hostImpl->startPageScaleAnimation(IntSize(50, 50), false, pageScaleDelta, startTime, duration);
767 767
768 // We should immediately get the final zoom and scroll values for the 768 // We should immediately get the final zoom and scroll values for the
769 // animation. 769 // animation.
770 m_hostImpl->animate(halfwayThroughAnimation, halfwayThroughAnimation); 770 m_hostImpl->animate(halfwayThroughAnimation, halfwayThroughAnimation);
771 scoped_ptr<CCScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas (); 771 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas() ;
772 772
773 if (!CCSettings::pageScalePinchZoomEnabled()) { 773 if (!Settings::pageScalePinchZoomEnabled()) {
774 EXPECT_EQ(scrollInfo->pageScaleDelta, pageScaleDelta); 774 EXPECT_EQ(scrollInfo->pageScaleDelta, pageScaleDelta);
775 expectContains(*scrollInfo, scrollLayer->id(), IntSize(25, 25)); 775 expectContains(*scrollInfo, scrollLayer->id(), IntSize(25, 25));
776 } else { 776 } else {
777 EXPECT_EQ(scrollInfo->pageScaleDelta, 1); 777 EXPECT_EQ(scrollInfo->pageScaleDelta, 1);
778 EXPECT_TRUE(scrollInfo->scrolls.isEmpty()); 778 EXPECT_TRUE(scrollInfo->scrolls.isEmpty());
779 } 779 }
780 780
781 // Scrolling during the animation is ignored. 781 // Scrolling during the animation is ignored.
782 const IntSize scrollDelta(0, 10); 782 const IntSize scrollDelta(0, 10);
783 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(25, 25), CCInputHandlerClient::Wh eel), CCInputHandlerClient::ScrollStarted); 783 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(25, 25), InputHandlerClient::Whee l), InputHandlerClient::ScrollStarted);
784 m_hostImpl->scrollBy(IntPoint(), scrollDelta); 784 m_hostImpl->scrollBy(IntPoint(), scrollDelta);
785 m_hostImpl->scrollEnd(); 785 m_hostImpl->scrollEnd();
786 786
787 // The final page scale and scroll deltas should match what we got 787 // The final page scale and scroll deltas should match what we got
788 // earlier. 788 // earlier.
789 m_hostImpl->animate(endTime, endTime); 789 m_hostImpl->animate(endTime, endTime);
790 scrollInfo = m_hostImpl->processScrollDeltas(); 790 scrollInfo = m_hostImpl->processScrollDeltas();
791 EXPECT_EQ(scrollInfo->pageScaleDelta, pageScaleDelta); 791 EXPECT_EQ(scrollInfo->pageScaleDelta, pageScaleDelta);
792 expectContains(*scrollInfo, scrollLayer->id(), IntSize(25, 25)); 792 expectContains(*scrollInfo, scrollLayer->id(), IntSize(25, 25));
793 } 793 }
794 794
795 class DidDrawCheckLayer : public CCTiledLayerImpl { 795 class DidDrawCheckLayer : public TiledLayerImpl {
796 public: 796 public:
797 static scoped_ptr<CCLayerImpl> create(int id) { return scoped_ptr<CCLayerImp l>(new DidDrawCheckLayer(id)); } 797 static scoped_ptr<LayerImpl> create(int id) { return scoped_ptr<LayerImpl>(n ew DidDrawCheckLayer(id)); }
798 798
799 virtual void didDraw(CCResourceProvider*) OVERRIDE 799 virtual void didDraw(ResourceProvider*) OVERRIDE
800 { 800 {
801 m_didDrawCalled = true; 801 m_didDrawCalled = true;
802 } 802 }
803 803
804 virtual void willDraw(CCResourceProvider*) OVERRIDE 804 virtual void willDraw(ResourceProvider*) OVERRIDE
805 { 805 {
806 m_willDrawCalled = true; 806 m_willDrawCalled = true;
807 } 807 }
808 808
809 bool didDrawCalled() const { return m_didDrawCalled; } 809 bool didDrawCalled() const { return m_didDrawCalled; }
810 bool willDrawCalled() const { return m_willDrawCalled; } 810 bool willDrawCalled() const { return m_willDrawCalled; }
811 811
812 void clearDidDrawCheck() 812 void clearDidDrawCheck()
813 { 813 {
814 m_didDrawCalled = false; 814 m_didDrawCalled = false;
815 m_willDrawCalled = false; 815 m_willDrawCalled = false;
816 } 816 }
817 817
818 protected: 818 protected:
819 explicit DidDrawCheckLayer(int id) 819 explicit DidDrawCheckLayer(int id)
820 : CCTiledLayerImpl(id) 820 : TiledLayerImpl(id)
821 , m_didDrawCalled(false) 821 , m_didDrawCalled(false)
822 , m_willDrawCalled(false) 822 , m_willDrawCalled(false)
823 { 823 {
824 setAnchorPoint(FloatPoint(0, 0)); 824 setAnchorPoint(FloatPoint(0, 0));
825 setBounds(IntSize(10, 10)); 825 setBounds(IntSize(10, 10));
826 setContentBounds(IntSize(10, 10)); 826 setContentBounds(IntSize(10, 10));
827 setDrawsContent(true); 827 setDrawsContent(true);
828 setSkipsDraw(false); 828 setSkipsDraw(false);
829 setVisibleContentRect(IntRect(0, 0, 10, 10)); 829 setVisibleContentRect(IntRect(0, 0, 10, 10));
830 830
831 scoped_ptr<CCLayerTilingData> tiler = CCLayerTilingData::create(IntSize( 100, 100), CCLayerTilingData::HasBorderTexels); 831 scoped_ptr<LayerTilingData> tiler = LayerTilingData::create(IntSize(100, 100), LayerTilingData::HasBorderTexels);
832 tiler->setBounds(contentBounds()); 832 tiler->setBounds(contentBounds());
833 setTilingData(*tiler.get()); 833 setTilingData(*tiler.get());
834 } 834 }
835 835
836 private: 836 private:
837 bool m_didDrawCalled; 837 bool m_didDrawCalled;
838 bool m_willDrawCalled; 838 bool m_willDrawCalled;
839 }; 839 };
840 840
841 TEST_P(CCLayerTreeHostImplTest, didDrawNotCalledOnHiddenLayer) 841 TEST_P(LayerTreeHostImplTest, didDrawNotCalledOnHiddenLayer)
842 { 842 {
843 // The root layer is always drawn, so run this test on a child layer that 843 // The root layer is always drawn, so run this test on a child layer that
844 // will be masked out by the root layer's bounds. 844 // will be masked out by the root layer's bounds.
845 m_hostImpl->setRootLayer(DidDrawCheckLayer::create(1)); 845 m_hostImpl->setRootLayer(DidDrawCheckLayer::create(1));
846 DidDrawCheckLayer* root = static_cast<DidDrawCheckLayer*>(m_hostImpl->rootLa yer()); 846 DidDrawCheckLayer* root = static_cast<DidDrawCheckLayer*>(m_hostImpl->rootLa yer());
847 root->setMasksToBounds(true); 847 root->setMasksToBounds(true);
848 848
849 root->addChild(DidDrawCheckLayer::create(2)); 849 root->addChild(DidDrawCheckLayer::create(2));
850 DidDrawCheckLayer* layer = static_cast<DidDrawCheckLayer*>(root->children()[ 0]); 850 DidDrawCheckLayer* layer = static_cast<DidDrawCheckLayer*>(root->children()[ 0]);
851 // Ensure visibleContentRect for layer is empty 851 // Ensure visibleContentRect for layer is empty
852 layer->setPosition(FloatPoint(100, 100)); 852 layer->setPosition(FloatPoint(100, 100));
853 layer->setBounds(IntSize(10, 10)); 853 layer->setBounds(IntSize(10, 10));
854 layer->setContentBounds(IntSize(10, 10)); 854 layer->setContentBounds(IntSize(10, 10));
855 855
856 CCLayerTreeHostImpl::FrameData frame; 856 LayerTreeHostImpl::FrameData frame;
857 857
858 EXPECT_FALSE(layer->willDrawCalled()); 858 EXPECT_FALSE(layer->willDrawCalled());
859 EXPECT_FALSE(layer->didDrawCalled()); 859 EXPECT_FALSE(layer->didDrawCalled());
860 860
861 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); 861 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame));
862 m_hostImpl->drawLayers(frame); 862 m_hostImpl->drawLayers(frame);
863 m_hostImpl->didDrawAllLayers(frame); 863 m_hostImpl->didDrawAllLayers(frame);
864 864
865 EXPECT_FALSE(layer->willDrawCalled()); 865 EXPECT_FALSE(layer->willDrawCalled());
866 EXPECT_FALSE(layer->didDrawCalled()); 866 EXPECT_FALSE(layer->didDrawCalled());
867 867
868 EXPECT_TRUE(layer->visibleContentRect().isEmpty()); 868 EXPECT_TRUE(layer->visibleContentRect().isEmpty());
869 869
870 // Ensure visibleContentRect for layer layer is not empty 870 // Ensure visibleContentRect for layer layer is not empty
871 layer->setPosition(FloatPoint(0, 0)); 871 layer->setPosition(FloatPoint(0, 0));
872 872
873 EXPECT_FALSE(layer->willDrawCalled()); 873 EXPECT_FALSE(layer->willDrawCalled());
874 EXPECT_FALSE(layer->didDrawCalled()); 874 EXPECT_FALSE(layer->didDrawCalled());
875 875
876 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); 876 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame));
877 m_hostImpl->drawLayers(frame); 877 m_hostImpl->drawLayers(frame);
878 m_hostImpl->didDrawAllLayers(frame); 878 m_hostImpl->didDrawAllLayers(frame);
879 879
880 EXPECT_TRUE(layer->willDrawCalled()); 880 EXPECT_TRUE(layer->willDrawCalled());
881 EXPECT_TRUE(layer->didDrawCalled()); 881 EXPECT_TRUE(layer->didDrawCalled());
882 882
883 EXPECT_FALSE(layer->visibleContentRect().isEmpty()); 883 EXPECT_FALSE(layer->visibleContentRect().isEmpty());
884 } 884 }
885 885
886 TEST_P(CCLayerTreeHostImplTest, willDrawNotCalledOnOccludedLayer) 886 TEST_P(LayerTreeHostImplTest, willDrawNotCalledOnOccludedLayer)
887 { 887 {
888 IntSize bigSize(1000, 1000); 888 IntSize bigSize(1000, 1000);
889 m_hostImpl->setViewportSize(bigSize, bigSize); 889 m_hostImpl->setViewportSize(bigSize, bigSize);
890 890
891 m_hostImpl->setRootLayer(DidDrawCheckLayer::create(1)); 891 m_hostImpl->setRootLayer(DidDrawCheckLayer::create(1));
892 DidDrawCheckLayer* root = static_cast<DidDrawCheckLayer*>(m_hostImpl->rootLa yer()); 892 DidDrawCheckLayer* root = static_cast<DidDrawCheckLayer*>(m_hostImpl->rootLa yer());
893 893
894 root->addChild(DidDrawCheckLayer::create(2)); 894 root->addChild(DidDrawCheckLayer::create(2));
895 DidDrawCheckLayer* occludedLayer = static_cast<DidDrawCheckLayer*>(root->chi ldren()[0]); 895 DidDrawCheckLayer* occludedLayer = static_cast<DidDrawCheckLayer*>(root->chi ldren()[0]);
896 896
897 root->addChild(DidDrawCheckLayer::create(3)); 897 root->addChild(DidDrawCheckLayer::create(3));
898 DidDrawCheckLayer* topLayer = static_cast<DidDrawCheckLayer*>(root->children ()[1]); 898 DidDrawCheckLayer* topLayer = static_cast<DidDrawCheckLayer*>(root->children ()[1]);
899 // This layer covers the occludedLayer above. Make this layer large so it ca n occlude. 899 // This layer covers the occludedLayer above. Make this layer large so it ca n occlude.
900 topLayer->setBounds(bigSize); 900 topLayer->setBounds(bigSize);
901 topLayer->setContentBounds(bigSize); 901 topLayer->setContentBounds(bigSize);
902 topLayer->setContentsOpaque(true); 902 topLayer->setContentsOpaque(true);
903 903
904 CCLayerTreeHostImpl::FrameData frame; 904 LayerTreeHostImpl::FrameData frame;
905 905
906 EXPECT_FALSE(occludedLayer->willDrawCalled()); 906 EXPECT_FALSE(occludedLayer->willDrawCalled());
907 EXPECT_FALSE(occludedLayer->didDrawCalled()); 907 EXPECT_FALSE(occludedLayer->didDrawCalled());
908 EXPECT_FALSE(topLayer->willDrawCalled()); 908 EXPECT_FALSE(topLayer->willDrawCalled());
909 EXPECT_FALSE(topLayer->didDrawCalled()); 909 EXPECT_FALSE(topLayer->didDrawCalled());
910 910
911 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); 911 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame));
912 m_hostImpl->drawLayers(frame); 912 m_hostImpl->drawLayers(frame);
913 m_hostImpl->didDrawAllLayers(frame); 913 m_hostImpl->didDrawAllLayers(frame);
914 914
915 EXPECT_FALSE(occludedLayer->willDrawCalled()); 915 EXPECT_FALSE(occludedLayer->willDrawCalled());
916 EXPECT_FALSE(occludedLayer->didDrawCalled()); 916 EXPECT_FALSE(occludedLayer->didDrawCalled());
917 EXPECT_TRUE(topLayer->willDrawCalled()); 917 EXPECT_TRUE(topLayer->willDrawCalled());
918 EXPECT_TRUE(topLayer->didDrawCalled()); 918 EXPECT_TRUE(topLayer->didDrawCalled());
919 } 919 }
920 920
921 TEST_P(CCLayerTreeHostImplTest, didDrawCalledOnAllLayers) 921 TEST_P(LayerTreeHostImplTest, didDrawCalledOnAllLayers)
922 { 922 {
923 m_hostImpl->setRootLayer(DidDrawCheckLayer::create(1)); 923 m_hostImpl->setRootLayer(DidDrawCheckLayer::create(1));
924 DidDrawCheckLayer* root = static_cast<DidDrawCheckLayer*>(m_hostImpl->rootLa yer()); 924 DidDrawCheckLayer* root = static_cast<DidDrawCheckLayer*>(m_hostImpl->rootLa yer());
925 925
926 root->addChild(DidDrawCheckLayer::create(2)); 926 root->addChild(DidDrawCheckLayer::create(2));
927 DidDrawCheckLayer* layer1 = static_cast<DidDrawCheckLayer*>(root->children() [0]); 927 DidDrawCheckLayer* layer1 = static_cast<DidDrawCheckLayer*>(root->children() [0]);
928 928
929 layer1->addChild(DidDrawCheckLayer::create(3)); 929 layer1->addChild(DidDrawCheckLayer::create(3));
930 DidDrawCheckLayer* layer2 = static_cast<DidDrawCheckLayer*>(layer1->children ()[0]); 930 DidDrawCheckLayer* layer2 = static_cast<DidDrawCheckLayer*>(layer1->children ()[0]);
931 931
932 layer1->setOpacity(0.3f); 932 layer1->setOpacity(0.3f);
933 layer1->setPreserves3D(false); 933 layer1->setPreserves3D(false);
934 934
935 EXPECT_FALSE(root->didDrawCalled()); 935 EXPECT_FALSE(root->didDrawCalled());
936 EXPECT_FALSE(layer1->didDrawCalled()); 936 EXPECT_FALSE(layer1->didDrawCalled());
937 EXPECT_FALSE(layer2->didDrawCalled()); 937 EXPECT_FALSE(layer2->didDrawCalled());
938 938
939 CCLayerTreeHostImpl::FrameData frame; 939 LayerTreeHostImpl::FrameData frame;
940 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); 940 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame));
941 m_hostImpl->drawLayers(frame); 941 m_hostImpl->drawLayers(frame);
942 m_hostImpl->didDrawAllLayers(frame); 942 m_hostImpl->didDrawAllLayers(frame);
943 943
944 EXPECT_TRUE(root->didDrawCalled()); 944 EXPECT_TRUE(root->didDrawCalled());
945 EXPECT_TRUE(layer1->didDrawCalled()); 945 EXPECT_TRUE(layer1->didDrawCalled());
946 EXPECT_TRUE(layer2->didDrawCalled()); 946 EXPECT_TRUE(layer2->didDrawCalled());
947 947
948 EXPECT_NE(root->renderSurface(), layer1->renderSurface()); 948 EXPECT_NE(root->renderSurface(), layer1->renderSurface());
949 EXPECT_TRUE(!!layer1->renderSurface()); 949 EXPECT_TRUE(!!layer1->renderSurface());
950 } 950 }
951 951
952 class MissingTextureAnimatingLayer : public DidDrawCheckLayer { 952 class MissingTextureAnimatingLayer : public DidDrawCheckLayer {
953 public: 953 public:
954 static scoped_ptr<CCLayerImpl> create(int id, bool tileMissing, bool skipsDr aw, bool animating, CCResourceProvider* resourceProvider) 954 static scoped_ptr<LayerImpl> create(int id, bool tileMissing, bool skipsDraw , bool animating, ResourceProvider* resourceProvider)
955 { 955 {
956 return scoped_ptr<CCLayerImpl>(new MissingTextureAnimatingLayer(id, tile Missing, skipsDraw, animating, resourceProvider)); 956 return scoped_ptr<LayerImpl>(new MissingTextureAnimatingLayer(id, tileMi ssing, skipsDraw, animating, resourceProvider));
957 } 957 }
958 958
959 private: 959 private:
960 explicit MissingTextureAnimatingLayer(int id, bool tileMissing, bool skipsDr aw, bool animating, CCResourceProvider* resourceProvider) 960 explicit MissingTextureAnimatingLayer(int id, bool tileMissing, bool skipsDr aw, bool animating, ResourceProvider* resourceProvider)
961 : DidDrawCheckLayer(id) 961 : DidDrawCheckLayer(id)
962 { 962 {
963 scoped_ptr<CCLayerTilingData> tilingData = CCLayerTilingData::create(Int Size(10, 10), CCLayerTilingData::NoBorderTexels); 963 scoped_ptr<LayerTilingData> tilingData = LayerTilingData::create(IntSize (10, 10), LayerTilingData::NoBorderTexels);
964 tilingData->setBounds(bounds()); 964 tilingData->setBounds(bounds());
965 setTilingData(*tilingData.get()); 965 setTilingData(*tilingData.get());
966 setSkipsDraw(skipsDraw); 966 setSkipsDraw(skipsDraw);
967 if (!tileMissing) { 967 if (!tileMissing) {
968 CCResourceProvider::ResourceId resource = resourceProvider->createRe source(CCRenderer::ContentPool, IntSize(), GraphicsContext3D::RGBA, CCResourcePr ovider::TextureUsageAny); 968 ResourceProvider::ResourceId resource = resourceProvider->createReso urce(Renderer::ContentPool, IntSize(), GraphicsContext3D::RGBA, ResourceProvider ::TextureUsageAny);
969 pushTileProperties(0, 0, resource, IntRect()); 969 pushTileProperties(0, 0, resource, IntRect());
970 } 970 }
971 if (animating) 971 if (animating)
972 addAnimatedTransformToLayer(*this, 10, 3, 0); 972 addAnimatedTransformToLayer(*this, 10, 3, 0);
973 } 973 }
974 }; 974 };
975 975
976 TEST_P(CCLayerTreeHostImplTest, prepareToDrawFailsWhenAnimationUsesCheckerboard) 976 TEST_P(LayerTreeHostImplTest, prepareToDrawFailsWhenAnimationUsesCheckerboard)
977 { 977 {
978 // When the texture is not missing, we draw as usual. 978 // When the texture is not missing, we draw as usual.
979 m_hostImpl->setRootLayer(DidDrawCheckLayer::create(1)); 979 m_hostImpl->setRootLayer(DidDrawCheckLayer::create(1));
980 DidDrawCheckLayer* root = static_cast<DidDrawCheckLayer*>(m_hostImpl->rootLa yer()); 980 DidDrawCheckLayer* root = static_cast<DidDrawCheckLayer*>(m_hostImpl->rootLa yer());
981 root->addChild(MissingTextureAnimatingLayer::create(2, false, false, true, m _hostImpl->resourceProvider())); 981 root->addChild(MissingTextureAnimatingLayer::create(2, false, false, true, m _hostImpl->resourceProvider()));
982 982
983 CCLayerTreeHostImpl::FrameData frame; 983 LayerTreeHostImpl::FrameData frame;
984 984
985 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); 985 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame));
986 m_hostImpl->drawLayers(frame); 986 m_hostImpl->drawLayers(frame);
987 m_hostImpl->didDrawAllLayers(frame); 987 m_hostImpl->didDrawAllLayers(frame);
988 988
989 // When a texture is missing and we're not animating, we draw as usual with checkerboarding. 989 // When a texture is missing and we're not animating, we draw as usual with checkerboarding.
990 m_hostImpl->setRootLayer(DidDrawCheckLayer::create(1)); 990 m_hostImpl->setRootLayer(DidDrawCheckLayer::create(1));
991 root = static_cast<DidDrawCheckLayer*>(m_hostImpl->rootLayer()); 991 root = static_cast<DidDrawCheckLayer*>(m_hostImpl->rootLayer());
992 root->addChild(MissingTextureAnimatingLayer::create(2, true, false, false, m _hostImpl->resourceProvider())); 992 root->addChild(MissingTextureAnimatingLayer::create(2, true, false, false, m _hostImpl->resourceProvider()));
993 993
(...skipping 13 matching lines...) Expand all
1007 // When the layer skips draw and we're animating, we still draw the frame. 1007 // When the layer skips draw and we're animating, we still draw the frame.
1008 m_hostImpl->setRootLayer(DidDrawCheckLayer::create(1)); 1008 m_hostImpl->setRootLayer(DidDrawCheckLayer::create(1));
1009 root = static_cast<DidDrawCheckLayer*>(m_hostImpl->rootLayer()); 1009 root = static_cast<DidDrawCheckLayer*>(m_hostImpl->rootLayer());
1010 root->addChild(MissingTextureAnimatingLayer::create(2, false, true, true, m_ hostImpl->resourceProvider())); 1010 root->addChild(MissingTextureAnimatingLayer::create(2, false, true, true, m_ hostImpl->resourceProvider()));
1011 1011
1012 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); 1012 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame));
1013 m_hostImpl->drawLayers(frame); 1013 m_hostImpl->drawLayers(frame);
1014 m_hostImpl->didDrawAllLayers(frame); 1014 m_hostImpl->didDrawAllLayers(frame);
1015 } 1015 }
1016 1016
1017 TEST_P(CCLayerTreeHostImplTest, scrollRootIgnored) 1017 TEST_P(LayerTreeHostImplTest, scrollRootIgnored)
1018 { 1018 {
1019 scoped_ptr<CCLayerImpl> root = CCLayerImpl::create(1); 1019 scoped_ptr<LayerImpl> root = LayerImpl::create(1);
1020 root->setScrollable(false); 1020 root->setScrollable(false);
1021 m_hostImpl->setRootLayer(root.Pass()); 1021 m_hostImpl->setRootLayer(root.Pass());
1022 initializeRendererAndDrawFrame(); 1022 initializeRendererAndDrawFrame();
1023 1023
1024 // Scroll event is ignored because layer is not scrollable. 1024 // Scroll event is ignored because layer is not scrollable.
1025 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), CCInputHandlerClient::Whee l), CCInputHandlerClient::ScrollIgnored); 1025 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), InputHandlerClient::Wheel) , InputHandlerClient::ScrollIgnored);
1026 EXPECT_FALSE(m_didRequestRedraw); 1026 EXPECT_FALSE(m_didRequestRedraw);
1027 EXPECT_FALSE(m_didRequestCommit); 1027 EXPECT_FALSE(m_didRequestCommit);
1028 } 1028 }
1029 1029
1030 TEST_P(CCLayerTreeHostImplTest, scrollNonCompositedRoot) 1030 TEST_P(LayerTreeHostImplTest, scrollNonCompositedRoot)
1031 { 1031 {
1032 // Test the configuration where a non-composited root layer is embedded in a 1032 // Test the configuration where a non-composited root layer is embedded in a
1033 // scrollable outer layer. 1033 // scrollable outer layer.
1034 IntSize surfaceSize(10, 10); 1034 IntSize surfaceSize(10, 10);
1035 1035
1036 scoped_ptr<CCLayerImpl> contentLayer = CCLayerImpl::create(1); 1036 scoped_ptr<LayerImpl> contentLayer = LayerImpl::create(1);
1037 contentLayer->setUseLCDText(true); 1037 contentLayer->setUseLCDText(true);
1038 contentLayer->setDrawsContent(true); 1038 contentLayer->setDrawsContent(true);
1039 contentLayer->setPosition(FloatPoint(0, 0)); 1039 contentLayer->setPosition(FloatPoint(0, 0));
1040 contentLayer->setAnchorPoint(FloatPoint(0, 0)); 1040 contentLayer->setAnchorPoint(FloatPoint(0, 0));
1041 contentLayer->setBounds(surfaceSize); 1041 contentLayer->setBounds(surfaceSize);
1042 contentLayer->setContentBounds(IntSize(surfaceSize.width() * 2, surfaceSize. height() * 2)); 1042 contentLayer->setContentBounds(IntSize(surfaceSize.width() * 2, surfaceSize. height() * 2));
1043 1043
1044 scoped_ptr<CCLayerImpl> scrollLayer = CCLayerImpl::create(2); 1044 scoped_ptr<LayerImpl> scrollLayer = LayerImpl::create(2);
1045 scrollLayer->setScrollable(true); 1045 scrollLayer->setScrollable(true);
1046 scrollLayer->setMaxScrollPosition(surfaceSize); 1046 scrollLayer->setMaxScrollPosition(surfaceSize);
1047 scrollLayer->setBounds(surfaceSize); 1047 scrollLayer->setBounds(surfaceSize);
1048 scrollLayer->setContentBounds(surfaceSize); 1048 scrollLayer->setContentBounds(surfaceSize);
1049 scrollLayer->setPosition(FloatPoint(0, 0)); 1049 scrollLayer->setPosition(FloatPoint(0, 0));
1050 scrollLayer->setAnchorPoint(FloatPoint(0, 0)); 1050 scrollLayer->setAnchorPoint(FloatPoint(0, 0));
1051 scrollLayer->addChild(contentLayer.Pass()); 1051 scrollLayer->addChild(contentLayer.Pass());
1052 1052
1053 m_hostImpl->setRootLayer(scrollLayer.Pass()); 1053 m_hostImpl->setRootLayer(scrollLayer.Pass());
1054 m_hostImpl->setViewportSize(surfaceSize, surfaceSize); 1054 m_hostImpl->setViewportSize(surfaceSize, surfaceSize);
1055 initializeRendererAndDrawFrame(); 1055 initializeRendererAndDrawFrame();
1056 1056
1057 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(5, 5), CCInputHandlerClient::Whee l), CCInputHandlerClient::ScrollStarted); 1057 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(5, 5), InputHandlerClient::Wheel) , InputHandlerClient::ScrollStarted);
1058 m_hostImpl->scrollBy(IntPoint(), IntSize(0, 10)); 1058 m_hostImpl->scrollBy(IntPoint(), IntSize(0, 10));
1059 m_hostImpl->scrollEnd(); 1059 m_hostImpl->scrollEnd();
1060 EXPECT_TRUE(m_didRequestRedraw); 1060 EXPECT_TRUE(m_didRequestRedraw);
1061 EXPECT_TRUE(m_didRequestCommit); 1061 EXPECT_TRUE(m_didRequestCommit);
1062 } 1062 }
1063 1063
1064 TEST_P(CCLayerTreeHostImplTest, scrollChildCallsCommitAndRedraw) 1064 TEST_P(LayerTreeHostImplTest, scrollChildCallsCommitAndRedraw)
1065 { 1065 {
1066 IntSize surfaceSize(10, 10); 1066 IntSize surfaceSize(10, 10);
1067 scoped_ptr<CCLayerImpl> root = CCLayerImpl::create(1); 1067 scoped_ptr<LayerImpl> root = LayerImpl::create(1);
1068 root->setBounds(surfaceSize); 1068 root->setBounds(surfaceSize);
1069 root->setContentBounds(surfaceSize); 1069 root->setContentBounds(surfaceSize);
1070 root->addChild(createScrollableLayer(2, surfaceSize)); 1070 root->addChild(createScrollableLayer(2, surfaceSize));
1071 m_hostImpl->setRootLayer(root.Pass()); 1071 m_hostImpl->setRootLayer(root.Pass());
1072 m_hostImpl->setViewportSize(surfaceSize, surfaceSize); 1072 m_hostImpl->setViewportSize(surfaceSize, surfaceSize);
1073 initializeRendererAndDrawFrame(); 1073 initializeRendererAndDrawFrame();
1074 1074
1075 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(5, 5), CCInputHandlerClient::Whee l), CCInputHandlerClient::ScrollStarted); 1075 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(5, 5), InputHandlerClient::Wheel) , InputHandlerClient::ScrollStarted);
1076 m_hostImpl->scrollBy(IntPoint(), IntSize(0, 10)); 1076 m_hostImpl->scrollBy(IntPoint(), IntSize(0, 10));
1077 m_hostImpl->scrollEnd(); 1077 m_hostImpl->scrollEnd();
1078 EXPECT_TRUE(m_didRequestRedraw); 1078 EXPECT_TRUE(m_didRequestRedraw);
1079 EXPECT_TRUE(m_didRequestCommit); 1079 EXPECT_TRUE(m_didRequestCommit);
1080 } 1080 }
1081 1081
1082 TEST_P(CCLayerTreeHostImplTest, scrollMissesChild) 1082 TEST_P(LayerTreeHostImplTest, scrollMissesChild)
1083 { 1083 {
1084 IntSize surfaceSize(10, 10); 1084 IntSize surfaceSize(10, 10);
1085 scoped_ptr<CCLayerImpl> root = CCLayerImpl::create(1); 1085 scoped_ptr<LayerImpl> root = LayerImpl::create(1);
1086 root->addChild(createScrollableLayer(2, surfaceSize)); 1086 root->addChild(createScrollableLayer(2, surfaceSize));
1087 m_hostImpl->setRootLayer(root.Pass()); 1087 m_hostImpl->setRootLayer(root.Pass());
1088 m_hostImpl->setViewportSize(surfaceSize, surfaceSize); 1088 m_hostImpl->setViewportSize(surfaceSize, surfaceSize);
1089 initializeRendererAndDrawFrame(); 1089 initializeRendererAndDrawFrame();
1090 1090
1091 // Scroll event is ignored because the input coordinate is outside the layer boundaries. 1091 // Scroll event is ignored because the input coordinate is outside the layer boundaries.
1092 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(15, 5), CCInputHandlerClient::Whe el), CCInputHandlerClient::ScrollIgnored); 1092 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(15, 5), InputHandlerClient::Wheel ), InputHandlerClient::ScrollIgnored);
1093 EXPECT_FALSE(m_didRequestRedraw); 1093 EXPECT_FALSE(m_didRequestRedraw);
1094 EXPECT_FALSE(m_didRequestCommit); 1094 EXPECT_FALSE(m_didRequestCommit);
1095 } 1095 }
1096 1096
1097 TEST_P(CCLayerTreeHostImplTest, scrollMissesBackfacingChild) 1097 TEST_P(LayerTreeHostImplTest, scrollMissesBackfacingChild)
1098 { 1098 {
1099 IntSize surfaceSize(10, 10); 1099 IntSize surfaceSize(10, 10);
1100 scoped_ptr<CCLayerImpl> root = CCLayerImpl::create(1); 1100 scoped_ptr<LayerImpl> root = LayerImpl::create(1);
1101 scoped_ptr<CCLayerImpl> child = createScrollableLayer(2, surfaceSize); 1101 scoped_ptr<LayerImpl> child = createScrollableLayer(2, surfaceSize);
1102 m_hostImpl->setViewportSize(surfaceSize, surfaceSize); 1102 m_hostImpl->setViewportSize(surfaceSize, surfaceSize);
1103 1103
1104 WebTransformationMatrix matrix; 1104 WebTransformationMatrix matrix;
1105 matrix.rotate3d(180, 0, 0); 1105 matrix.rotate3d(180, 0, 0);
1106 child->setTransform(matrix); 1106 child->setTransform(matrix);
1107 child->setDoubleSided(false); 1107 child->setDoubleSided(false);
1108 1108
1109 root->addChild(child.Pass()); 1109 root->addChild(child.Pass());
1110 m_hostImpl->setRootLayer(root.Pass()); 1110 m_hostImpl->setRootLayer(root.Pass());
1111 initializeRendererAndDrawFrame(); 1111 initializeRendererAndDrawFrame();
1112 1112
1113 // Scroll event is ignored because the scrollable layer is not facing the vi ewer and there is 1113 // Scroll event is ignored because the scrollable layer is not facing the vi ewer and there is
1114 // nothing scrollable behind it. 1114 // nothing scrollable behind it.
1115 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(5, 5), CCInputHandlerClient::Whee l), CCInputHandlerClient::ScrollIgnored); 1115 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(5, 5), InputHandlerClient::Wheel) , InputHandlerClient::ScrollIgnored);
1116 EXPECT_FALSE(m_didRequestRedraw); 1116 EXPECT_FALSE(m_didRequestRedraw);
1117 EXPECT_FALSE(m_didRequestCommit); 1117 EXPECT_FALSE(m_didRequestCommit);
1118 } 1118 }
1119 1119
1120 TEST_P(CCLayerTreeHostImplTest, scrollBlockedByContentLayer) 1120 TEST_P(LayerTreeHostImplTest, scrollBlockedByContentLayer)
1121 { 1121 {
1122 IntSize surfaceSize(10, 10); 1122 IntSize surfaceSize(10, 10);
1123 scoped_ptr<CCLayerImpl> contentLayer = createScrollableLayer(1, surfaceSize) ; 1123 scoped_ptr<LayerImpl> contentLayer = createScrollableLayer(1, surfaceSize);
1124 contentLayer->setShouldScrollOnMainThread(true); 1124 contentLayer->setShouldScrollOnMainThread(true);
1125 contentLayer->setScrollable(false); 1125 contentLayer->setScrollable(false);
1126 1126
1127 scoped_ptr<CCLayerImpl> scrollLayer = createScrollableLayer(2, surfaceSize); 1127 scoped_ptr<LayerImpl> scrollLayer = createScrollableLayer(2, surfaceSize);
1128 scrollLayer->addChild(contentLayer.Pass()); 1128 scrollLayer->addChild(contentLayer.Pass());
1129 1129
1130 m_hostImpl->setRootLayer(scrollLayer.Pass()); 1130 m_hostImpl->setRootLayer(scrollLayer.Pass());
1131 m_hostImpl->setViewportSize(surfaceSize, surfaceSize); 1131 m_hostImpl->setViewportSize(surfaceSize, surfaceSize);
1132 initializeRendererAndDrawFrame(); 1132 initializeRendererAndDrawFrame();
1133 1133
1134 // Scrolling fails because the content layer is asking to be scrolled on the main thread. 1134 // Scrolling fails because the content layer is asking to be scrolled on the main thread.
1135 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(5, 5), CCInputHandlerClient::Whee l), CCInputHandlerClient::ScrollOnMainThread); 1135 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(5, 5), InputHandlerClient::Wheel) , InputHandlerClient::ScrollOnMainThread);
1136 } 1136 }
1137 1137
1138 TEST_P(CCLayerTreeHostImplTest, scrollRootAndChangePageScaleOnMainThread) 1138 TEST_P(LayerTreeHostImplTest, scrollRootAndChangePageScaleOnMainThread)
1139 { 1139 {
1140 IntSize surfaceSize(10, 10); 1140 IntSize surfaceSize(10, 10);
1141 float pageScale = 2; 1141 float pageScale = 2;
1142 scoped_ptr<CCLayerImpl> root = createScrollableLayer(1, surfaceSize); 1142 scoped_ptr<LayerImpl> root = createScrollableLayer(1, surfaceSize);
1143 m_hostImpl->setRootLayer(root.Pass()); 1143 m_hostImpl->setRootLayer(root.Pass());
1144 m_hostImpl->setViewportSize(surfaceSize, surfaceSize); 1144 m_hostImpl->setViewportSize(surfaceSize, surfaceSize);
1145 initializeRendererAndDrawFrame(); 1145 initializeRendererAndDrawFrame();
1146 1146
1147 IntSize scrollDelta(0, 10); 1147 IntSize scrollDelta(0, 10);
1148 IntSize expectedScrollDelta(scrollDelta); 1148 IntSize expectedScrollDelta(scrollDelta);
1149 IntSize expectedMaxScroll(m_hostImpl->rootLayer()->maxScrollPosition()); 1149 IntSize expectedMaxScroll(m_hostImpl->rootLayer()->maxScrollPosition());
1150 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(5, 5), CCInputHandlerClient::Whee l), CCInputHandlerClient::ScrollStarted); 1150 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(5, 5), InputHandlerClient::Wheel) , InputHandlerClient::ScrollStarted);
1151 m_hostImpl->scrollBy(IntPoint(), scrollDelta); 1151 m_hostImpl->scrollBy(IntPoint(), scrollDelta);
1152 m_hostImpl->scrollEnd(); 1152 m_hostImpl->scrollEnd();
1153 1153
1154 // Set new page scale from main thread. 1154 // Set new page scale from main thread.
1155 m_hostImpl->setPageScaleFactorAndLimits(pageScale, pageScale, pageScale); 1155 m_hostImpl->setPageScaleFactorAndLimits(pageScale, pageScale, pageScale);
1156 1156
1157 if (!CCSettings::pageScalePinchZoomEnabled()) { 1157 if (!Settings::pageScalePinchZoomEnabled()) {
1158 // The scale should apply to the scroll delta. 1158 // The scale should apply to the scroll delta.
1159 expectedScrollDelta.scale(pageScale); 1159 expectedScrollDelta.scale(pageScale);
1160 } 1160 }
1161 scoped_ptr<CCScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas (); 1161 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas() ;
1162 expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), expectedScr ollDelta); 1162 expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), expectedScr ollDelta);
1163 1163
1164 // The scroll range should also have been updated. 1164 // The scroll range should also have been updated.
1165 EXPECT_EQ(m_hostImpl->rootLayer()->maxScrollPosition(), expectedMaxScroll); 1165 EXPECT_EQ(m_hostImpl->rootLayer()->maxScrollPosition(), expectedMaxScroll);
1166 1166
1167 // The page scale delta remains constant because the impl thread did not sca le. 1167 // The page scale delta remains constant because the impl thread did not sca le.
1168 EXPECT_EQ(m_hostImpl->rootLayer()->implTransform(), WebTransformationMatrix( )); 1168 EXPECT_EQ(m_hostImpl->rootLayer()->implTransform(), WebTransformationMatrix( ));
1169 } 1169 }
1170 1170
1171 TEST_P(CCLayerTreeHostImplTest, scrollRootAndChangePageScaleOnImplThread) 1171 TEST_P(LayerTreeHostImplTest, scrollRootAndChangePageScaleOnImplThread)
1172 { 1172 {
1173 IntSize surfaceSize(10, 10); 1173 IntSize surfaceSize(10, 10);
1174 float pageScale = 2; 1174 float pageScale = 2;
1175 scoped_ptr<CCLayerImpl> root = createScrollableLayer(1, surfaceSize); 1175 scoped_ptr<LayerImpl> root = createScrollableLayer(1, surfaceSize);
1176 m_hostImpl->setRootLayer(root.Pass()); 1176 m_hostImpl->setRootLayer(root.Pass());
1177 m_hostImpl->setViewportSize(surfaceSize, surfaceSize); 1177 m_hostImpl->setViewportSize(surfaceSize, surfaceSize);
1178 m_hostImpl->setPageScaleFactorAndLimits(1, 1, pageScale); 1178 m_hostImpl->setPageScaleFactorAndLimits(1, 1, pageScale);
1179 initializeRendererAndDrawFrame(); 1179 initializeRendererAndDrawFrame();
1180 1180
1181 IntSize scrollDelta(0, 10); 1181 IntSize scrollDelta(0, 10);
1182 IntSize expectedScrollDelta(scrollDelta); 1182 IntSize expectedScrollDelta(scrollDelta);
1183 IntSize expectedMaxScroll(m_hostImpl->rootLayer()->maxScrollPosition()); 1183 IntSize expectedMaxScroll(m_hostImpl->rootLayer()->maxScrollPosition());
1184 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(5, 5), CCInputHandlerClient::Whee l), CCInputHandlerClient::ScrollStarted); 1184 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(5, 5), InputHandlerClient::Wheel) , InputHandlerClient::ScrollStarted);
1185 m_hostImpl->scrollBy(IntPoint(), scrollDelta); 1185 m_hostImpl->scrollBy(IntPoint(), scrollDelta);
1186 m_hostImpl->scrollEnd(); 1186 m_hostImpl->scrollEnd();
1187 1187
1188 // Set new page scale on impl thread by pinching. 1188 // Set new page scale on impl thread by pinching.
1189 m_hostImpl->pinchGestureBegin(); 1189 m_hostImpl->pinchGestureBegin();
1190 m_hostImpl->pinchGestureUpdate(pageScale, IntPoint()); 1190 m_hostImpl->pinchGestureUpdate(pageScale, IntPoint());
1191 m_hostImpl->pinchGestureEnd(); 1191 m_hostImpl->pinchGestureEnd();
1192 m_hostImpl->updateRootScrollLayerImplTransform(); 1192 m_hostImpl->updateRootScrollLayerImplTransform();
1193 1193
1194 // The scroll delta is not scaled because the main thread did not scale. 1194 // The scroll delta is not scaled because the main thread did not scale.
1195 scoped_ptr<CCScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas (); 1195 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas() ;
1196 expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), expectedScr ollDelta); 1196 expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), expectedScr ollDelta);
1197 1197
1198 // The scroll range should also have been updated. 1198 // The scroll range should also have been updated.
1199 EXPECT_EQ(m_hostImpl->rootLayer()->maxScrollPosition(), expectedMaxScroll); 1199 EXPECT_EQ(m_hostImpl->rootLayer()->maxScrollPosition(), expectedMaxScroll);
1200 1200
1201 // The page scale delta should match the new scale on the impl side. 1201 // The page scale delta should match the new scale on the impl side.
1202 WebTransformationMatrix expectedScale; 1202 WebTransformationMatrix expectedScale;
1203 expectedScale.scale(pageScale); 1203 expectedScale.scale(pageScale);
1204 EXPECT_EQ(m_hostImpl->rootLayer()->implTransform(), expectedScale); 1204 EXPECT_EQ(m_hostImpl->rootLayer()->implTransform(), expectedScale);
1205 } 1205 }
1206 1206
1207 TEST_P(CCLayerTreeHostImplTest, pageScaleDeltaAppliedToRootScrollLayerOnly) 1207 TEST_P(LayerTreeHostImplTest, pageScaleDeltaAppliedToRootScrollLayerOnly)
1208 { 1208 {
1209 IntSize surfaceSize(10, 10); 1209 IntSize surfaceSize(10, 10);
1210 float defaultPageScale = 1; 1210 float defaultPageScale = 1;
1211 WebTransformationMatrix defaultPageScaleMatrix; 1211 WebTransformationMatrix defaultPageScaleMatrix;
1212 1212
1213 float newPageScale = 2; 1213 float newPageScale = 2;
1214 WebTransformationMatrix newPageScaleMatrix; 1214 WebTransformationMatrix newPageScaleMatrix;
1215 newPageScaleMatrix.scale(newPageScale); 1215 newPageScaleMatrix.scale(newPageScale);
1216 1216
1217 // Create a normal scrollable root layer and another scrollable child layer. 1217 // Create a normal scrollable root layer and another scrollable child layer.
1218 setupScrollAndContentsLayers(surfaceSize); 1218 setupScrollAndContentsLayers(surfaceSize);
1219 CCLayerImpl* root = m_hostImpl->rootLayer(); 1219 LayerImpl* root = m_hostImpl->rootLayer();
1220 CCLayerImpl* child = root->children()[0]; 1220 LayerImpl* child = root->children()[0];
1221 1221
1222 scoped_ptr<CCLayerImpl> scrollableChild = createScrollableLayer(3, surfaceSi ze); 1222 scoped_ptr<LayerImpl> scrollableChild = createScrollableLayer(3, surfaceSize );
1223 child->addChild(scrollableChild.Pass()); 1223 child->addChild(scrollableChild.Pass());
1224 CCLayerImpl* grandChild = child->children()[0]; 1224 LayerImpl* grandChild = child->children()[0];
1225 1225
1226 // Set new page scale on impl thread by pinching. 1226 // Set new page scale on impl thread by pinching.
1227 m_hostImpl->pinchGestureBegin(); 1227 m_hostImpl->pinchGestureBegin();
1228 m_hostImpl->pinchGestureUpdate(newPageScale, IntPoint()); 1228 m_hostImpl->pinchGestureUpdate(newPageScale, IntPoint());
1229 m_hostImpl->pinchGestureEnd(); 1229 m_hostImpl->pinchGestureEnd();
1230 m_hostImpl->updateRootScrollLayerImplTransform(); 1230 m_hostImpl->updateRootScrollLayerImplTransform();
1231 1231
1232 // The page scale delta should only be applied to the scrollable root layer. 1232 // The page scale delta should only be applied to the scrollable root layer.
1233 EXPECT_EQ(root->implTransform(), newPageScaleMatrix); 1233 EXPECT_EQ(root->implTransform(), newPageScaleMatrix);
1234 EXPECT_EQ(child->implTransform(), defaultPageScaleMatrix); 1234 EXPECT_EQ(child->implTransform(), defaultPageScaleMatrix);
1235 EXPECT_EQ(grandChild->implTransform(), defaultPageScaleMatrix); 1235 EXPECT_EQ(grandChild->implTransform(), defaultPageScaleMatrix);
1236 1236
1237 // Make sure all the layers are drawn with the page scale delta applied, i.e ., the page scale 1237 // Make sure all the layers are drawn with the page scale delta applied, i.e ., the page scale
1238 // delta on the root layer is applied hierarchically. 1238 // delta on the root layer is applied hierarchically.
1239 CCLayerTreeHostImpl::FrameData frame; 1239 LayerTreeHostImpl::FrameData frame;
1240 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); 1240 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame));
1241 m_hostImpl->drawLayers(frame); 1241 m_hostImpl->drawLayers(frame);
1242 m_hostImpl->didDrawAllLayers(frame); 1242 m_hostImpl->didDrawAllLayers(frame);
1243 1243
1244 EXPECT_EQ(root->drawTransform().m11(), newPageScale); 1244 EXPECT_EQ(root->drawTransform().m11(), newPageScale);
1245 EXPECT_EQ(root->drawTransform().m22(), newPageScale); 1245 EXPECT_EQ(root->drawTransform().m22(), newPageScale);
1246 EXPECT_EQ(child->drawTransform().m11(), newPageScale); 1246 EXPECT_EQ(child->drawTransform().m11(), newPageScale);
1247 EXPECT_EQ(child->drawTransform().m22(), newPageScale); 1247 EXPECT_EQ(child->drawTransform().m22(), newPageScale);
1248 EXPECT_EQ(grandChild->drawTransform().m11(), newPageScale); 1248 EXPECT_EQ(grandChild->drawTransform().m11(), newPageScale);
1249 EXPECT_EQ(grandChild->drawTransform().m22(), newPageScale); 1249 EXPECT_EQ(grandChild->drawTransform().m22(), newPageScale);
1250 } 1250 }
1251 1251
1252 TEST_P(CCLayerTreeHostImplTest, scrollChildAndChangePageScaleOnMainThread) 1252 TEST_P(LayerTreeHostImplTest, scrollChildAndChangePageScaleOnMainThread)
1253 { 1253 {
1254 IntSize surfaceSize(10, 10); 1254 IntSize surfaceSize(10, 10);
1255 scoped_ptr<CCLayerImpl> root = CCLayerImpl::create(1); 1255 scoped_ptr<LayerImpl> root = LayerImpl::create(1);
1256 root->setBounds(surfaceSize); 1256 root->setBounds(surfaceSize);
1257 root->setContentBounds(surfaceSize); 1257 root->setContentBounds(surfaceSize);
1258 // Also mark the root scrollable so it becomes the root scroll layer. 1258 // Also mark the root scrollable so it becomes the root scroll layer.
1259 root->setScrollable(true); 1259 root->setScrollable(true);
1260 int scrollLayerId = 2; 1260 int scrollLayerId = 2;
1261 root->addChild(createScrollableLayer(scrollLayerId, surfaceSize)); 1261 root->addChild(createScrollableLayer(scrollLayerId, surfaceSize));
1262 m_hostImpl->setRootLayer(root.Pass()); 1262 m_hostImpl->setRootLayer(root.Pass());
1263 m_hostImpl->setViewportSize(surfaceSize, surfaceSize); 1263 m_hostImpl->setViewportSize(surfaceSize, surfaceSize);
1264 initializeRendererAndDrawFrame(); 1264 initializeRendererAndDrawFrame();
1265 1265
1266 CCLayerImpl* child = m_hostImpl->rootLayer()->children()[0]; 1266 LayerImpl* child = m_hostImpl->rootLayer()->children()[0];
1267 1267
1268 IntSize scrollDelta(0, 10); 1268 IntSize scrollDelta(0, 10);
1269 IntSize expectedScrollDelta(scrollDelta); 1269 IntSize expectedScrollDelta(scrollDelta);
1270 IntSize expectedMaxScroll(child->maxScrollPosition()); 1270 IntSize expectedMaxScroll(child->maxScrollPosition());
1271 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(5, 5), CCInputHandlerClient::Whee l), CCInputHandlerClient::ScrollStarted); 1271 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(5, 5), InputHandlerClient::Wheel) , InputHandlerClient::ScrollStarted);
1272 m_hostImpl->scrollBy(IntPoint(), scrollDelta); 1272 m_hostImpl->scrollBy(IntPoint(), scrollDelta);
1273 m_hostImpl->scrollEnd(); 1273 m_hostImpl->scrollEnd();
1274 1274
1275 float pageScale = 2; 1275 float pageScale = 2;
1276 m_hostImpl->setPageScaleFactorAndLimits(pageScale, 1, pageScale); 1276 m_hostImpl->setPageScaleFactorAndLimits(pageScale, 1, pageScale);
1277 1277
1278 m_hostImpl->updateRootScrollLayerImplTransform(); 1278 m_hostImpl->updateRootScrollLayerImplTransform();
1279 1279
1280 if (!CCSettings::pageScalePinchZoomEnabled()) { 1280 if (!Settings::pageScalePinchZoomEnabled()) {
1281 // The scale should apply to the scroll delta. 1281 // The scale should apply to the scroll delta.
1282 expectedScrollDelta.scale(pageScale); 1282 expectedScrollDelta.scale(pageScale);
1283 } 1283 }
1284 scoped_ptr<CCScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas (); 1284 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas() ;
1285 expectContains(*scrollInfo.get(), scrollLayerId, expectedScrollDelta); 1285 expectContains(*scrollInfo.get(), scrollLayerId, expectedScrollDelta);
1286 1286
1287 // The scroll range should not have changed. 1287 // The scroll range should not have changed.
1288 EXPECT_EQ(child->maxScrollPosition(), expectedMaxScroll); 1288 EXPECT_EQ(child->maxScrollPosition(), expectedMaxScroll);
1289 1289
1290 // The page scale delta remains constant because the impl thread did not sca le. 1290 // The page scale delta remains constant because the impl thread did not sca le.
1291 WebTransformationMatrix identityTransform; 1291 WebTransformationMatrix identityTransform;
1292 EXPECT_EQ(child->implTransform(), WebTransformationMatrix()); 1292 EXPECT_EQ(child->implTransform(), WebTransformationMatrix());
1293 } 1293 }
1294 1294
1295 TEST_P(CCLayerTreeHostImplTest, scrollChildBeyondLimit) 1295 TEST_P(LayerTreeHostImplTest, scrollChildBeyondLimit)
1296 { 1296 {
1297 // Scroll a child layer beyond its maximum scroll range and make sure the 1297 // Scroll a child layer beyond its maximum scroll range and make sure the
1298 // parent layer is scrolled on the axis on which the child was unable to 1298 // parent layer is scrolled on the axis on which the child was unable to
1299 // scroll. 1299 // scroll.
1300 IntSize surfaceSize(10, 10); 1300 IntSize surfaceSize(10, 10);
1301 scoped_ptr<CCLayerImpl> root = createScrollableLayer(1, surfaceSize); 1301 scoped_ptr<LayerImpl> root = createScrollableLayer(1, surfaceSize);
1302 1302
1303 scoped_ptr<CCLayerImpl> grandChild = createScrollableLayer(3, surfaceSize); 1303 scoped_ptr<LayerImpl> grandChild = createScrollableLayer(3, surfaceSize);
1304 grandChild->setScrollPosition(IntPoint(0, 5)); 1304 grandChild->setScrollPosition(IntPoint(0, 5));
1305 1305
1306 scoped_ptr<CCLayerImpl> child = createScrollableLayer(2, surfaceSize); 1306 scoped_ptr<LayerImpl> child = createScrollableLayer(2, surfaceSize);
1307 child->setScrollPosition(IntPoint(3, 0)); 1307 child->setScrollPosition(IntPoint(3, 0));
1308 child->addChild(grandChild.Pass()); 1308 child->addChild(grandChild.Pass());
1309 1309
1310 root->addChild(child.Pass()); 1310 root->addChild(child.Pass());
1311 m_hostImpl->setRootLayer(root.Pass()); 1311 m_hostImpl->setRootLayer(root.Pass());
1312 m_hostImpl->setViewportSize(surfaceSize, surfaceSize); 1312 m_hostImpl->setViewportSize(surfaceSize, surfaceSize);
1313 initializeRendererAndDrawFrame(); 1313 initializeRendererAndDrawFrame();
1314 { 1314 {
1315 IntSize scrollDelta(-8, -7); 1315 IntSize scrollDelta(-8, -7);
1316 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(5, 5), CCInputHandlerClient:: Wheel), CCInputHandlerClient::ScrollStarted); 1316 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(5, 5), InputHandlerClient::Wh eel), InputHandlerClient::ScrollStarted);
1317 m_hostImpl->scrollBy(IntPoint(), scrollDelta); 1317 m_hostImpl->scrollBy(IntPoint(), scrollDelta);
1318 m_hostImpl->scrollEnd(); 1318 m_hostImpl->scrollEnd();
1319 1319
1320 scoped_ptr<CCScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDe ltas(); 1320 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDelt as();
1321 1321
1322 // The grand child should have scrolled up to its limit. 1322 // The grand child should have scrolled up to its limit.
1323 CCLayerImpl* child = m_hostImpl->rootLayer()->children()[0]; 1323 LayerImpl* child = m_hostImpl->rootLayer()->children()[0];
1324 CCLayerImpl* grandChild = child->children()[0]; 1324 LayerImpl* grandChild = child->children()[0];
1325 expectContains(*scrollInfo.get(), grandChild->id(), IntSize(0, -5)); 1325 expectContains(*scrollInfo.get(), grandChild->id(), IntSize(0, -5));
1326 1326
1327 // The child should have only scrolled on the other axis. 1327 // The child should have only scrolled on the other axis.
1328 expectContains(*scrollInfo.get(), child->id(), IntSize(-3, 0)); 1328 expectContains(*scrollInfo.get(), child->id(), IntSize(-3, 0));
1329 } 1329 }
1330 } 1330 }
1331 1331
1332 TEST_P(CCLayerTreeHostImplTest, scrollEventBubbling) 1332 TEST_P(LayerTreeHostImplTest, scrollEventBubbling)
1333 { 1333 {
1334 // When we try to scroll a non-scrollable child layer, the scroll delta 1334 // When we try to scroll a non-scrollable child layer, the scroll delta
1335 // should be applied to one of its ancestors if possible. 1335 // should be applied to one of its ancestors if possible.
1336 IntSize surfaceSize(10, 10); 1336 IntSize surfaceSize(10, 10);
1337 scoped_ptr<CCLayerImpl> root = createScrollableLayer(1, surfaceSize); 1337 scoped_ptr<LayerImpl> root = createScrollableLayer(1, surfaceSize);
1338 scoped_ptr<CCLayerImpl> child = createScrollableLayer(2, surfaceSize); 1338 scoped_ptr<LayerImpl> child = createScrollableLayer(2, surfaceSize);
1339 1339
1340 child->setScrollable(false); 1340 child->setScrollable(false);
1341 root->addChild(child.Pass()); 1341 root->addChild(child.Pass());
1342 1342
1343 m_hostImpl->setRootLayer(root.Pass()); 1343 m_hostImpl->setRootLayer(root.Pass());
1344 m_hostImpl->setViewportSize(surfaceSize, surfaceSize); 1344 m_hostImpl->setViewportSize(surfaceSize, surfaceSize);
1345 initializeRendererAndDrawFrame(); 1345 initializeRendererAndDrawFrame();
1346 { 1346 {
1347 IntSize scrollDelta(0, 4); 1347 IntSize scrollDelta(0, 4);
1348 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(5, 5), CCInputHandlerClient:: Wheel), CCInputHandlerClient::ScrollStarted); 1348 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(5, 5), InputHandlerClient::Wh eel), InputHandlerClient::ScrollStarted);
1349 m_hostImpl->scrollBy(IntPoint(), scrollDelta); 1349 m_hostImpl->scrollBy(IntPoint(), scrollDelta);
1350 m_hostImpl->scrollEnd(); 1350 m_hostImpl->scrollEnd();
1351 1351
1352 scoped_ptr<CCScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDe ltas(); 1352 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDelt as();
1353 1353
1354 // Only the root should have scrolled. 1354 // Only the root should have scrolled.
1355 ASSERT_EQ(scrollInfo->scrolls.size(), 1u); 1355 ASSERT_EQ(scrollInfo->scrolls.size(), 1u);
1356 expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), scrollD elta); 1356 expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), scrollD elta);
1357 } 1357 }
1358 } 1358 }
1359 1359
1360 TEST_P(CCLayerTreeHostImplTest, scrollBeforeRedraw) 1360 TEST_P(LayerTreeHostImplTest, scrollBeforeRedraw)
1361 { 1361 {
1362 IntSize surfaceSize(10, 10); 1362 IntSize surfaceSize(10, 10);
1363 m_hostImpl->setRootLayer(createScrollableLayer(1, surfaceSize)); 1363 m_hostImpl->setRootLayer(createScrollableLayer(1, surfaceSize));
1364 m_hostImpl->setViewportSize(surfaceSize, surfaceSize); 1364 m_hostImpl->setViewportSize(surfaceSize, surfaceSize);
1365 1365
1366 // Draw one frame and then immediately rebuild the layer tree to mimic a tre e synchronization. 1366 // Draw one frame and then immediately rebuild the layer tree to mimic a tre e synchronization.
1367 initializeRendererAndDrawFrame(); 1367 initializeRendererAndDrawFrame();
1368 m_hostImpl->detachLayerTree(); 1368 m_hostImpl->detachLayerTree();
1369 m_hostImpl->setRootLayer(createScrollableLayer(2, surfaceSize)); 1369 m_hostImpl->setRootLayer(createScrollableLayer(2, surfaceSize));
1370 1370
1371 // Scrolling should still work even though we did not draw yet. 1371 // Scrolling should still work even though we did not draw yet.
1372 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(5, 5), CCInputHandlerClient::Whee l), CCInputHandlerClient::ScrollStarted); 1372 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(5, 5), InputHandlerClient::Wheel) , InputHandlerClient::ScrollStarted);
1373 } 1373 }
1374 1374
1375 TEST_P(CCLayerTreeHostImplTest, scrollAxisAlignedRotatedLayer) 1375 TEST_P(LayerTreeHostImplTest, scrollAxisAlignedRotatedLayer)
1376 { 1376 {
1377 setupScrollAndContentsLayers(IntSize(100, 100)); 1377 setupScrollAndContentsLayers(IntSize(100, 100));
1378 1378
1379 // Rotate the root layer 90 degrees counter-clockwise about its center. 1379 // Rotate the root layer 90 degrees counter-clockwise about its center.
1380 WebTransformationMatrix rotateTransform; 1380 WebTransformationMatrix rotateTransform;
1381 rotateTransform.rotate(-90); 1381 rotateTransform.rotate(-90);
1382 m_hostImpl->rootLayer()->setTransform(rotateTransform); 1382 m_hostImpl->rootLayer()->setTransform(rotateTransform);
1383 1383
1384 IntSize surfaceSize(50, 50); 1384 IntSize surfaceSize(50, 50);
1385 m_hostImpl->setViewportSize(surfaceSize, surfaceSize); 1385 m_hostImpl->setViewportSize(surfaceSize, surfaceSize);
1386 initializeRendererAndDrawFrame(); 1386 initializeRendererAndDrawFrame();
1387 1387
1388 // Scroll to the right in screen coordinates with a gesture. 1388 // Scroll to the right in screen coordinates with a gesture.
1389 IntSize gestureScrollDelta(10, 0); 1389 IntSize gestureScrollDelta(10, 0);
1390 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), CCInputHandlerClient::Gest ure), CCInputHandlerClient::ScrollStarted); 1390 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), InputHandlerClient::Gestur e), InputHandlerClient::ScrollStarted);
1391 m_hostImpl->scrollBy(IntPoint(), gestureScrollDelta); 1391 m_hostImpl->scrollBy(IntPoint(), gestureScrollDelta);
1392 m_hostImpl->scrollEnd(); 1392 m_hostImpl->scrollEnd();
1393 1393
1394 // The layer should have scrolled down in its local coordinates. 1394 // The layer should have scrolled down in its local coordinates.
1395 scoped_ptr<CCScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas (); 1395 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas() ;
1396 expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), IntSize(0, gestureScrollDelta.width())); 1396 expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), IntSize(0, gestureScrollDelta.width()));
1397 1397
1398 // Reset and scroll down with the wheel. 1398 // Reset and scroll down with the wheel.
1399 m_hostImpl->rootLayer()->setScrollDelta(FloatSize()); 1399 m_hostImpl->rootLayer()->setScrollDelta(FloatSize());
1400 IntSize wheelScrollDelta(0, 10); 1400 IntSize wheelScrollDelta(0, 10);
1401 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), CCInputHandlerClient::Whee l), CCInputHandlerClient::ScrollStarted); 1401 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), InputHandlerClient::Wheel) , InputHandlerClient::ScrollStarted);
1402 m_hostImpl->scrollBy(IntPoint(), wheelScrollDelta); 1402 m_hostImpl->scrollBy(IntPoint(), wheelScrollDelta);
1403 m_hostImpl->scrollEnd(); 1403 m_hostImpl->scrollEnd();
1404 1404
1405 // The layer should have scrolled down in its local coordinates. 1405 // The layer should have scrolled down in its local coordinates.
1406 scrollInfo = m_hostImpl->processScrollDeltas(); 1406 scrollInfo = m_hostImpl->processScrollDeltas();
1407 expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), wheelScroll Delta); 1407 expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), wheelScroll Delta);
1408 } 1408 }
1409 1409
1410 TEST_P(CCLayerTreeHostImplTest, scrollNonAxisAlignedRotatedLayer) 1410 TEST_P(LayerTreeHostImplTest, scrollNonAxisAlignedRotatedLayer)
1411 { 1411 {
1412 setupScrollAndContentsLayers(IntSize(100, 100)); 1412 setupScrollAndContentsLayers(IntSize(100, 100));
1413 int childLayerId = 3; 1413 int childLayerId = 3;
1414 float childLayerAngle = -20; 1414 float childLayerAngle = -20;
1415 1415
1416 // Create a child layer that is rotated to a non-axis-aligned angle. 1416 // Create a child layer that is rotated to a non-axis-aligned angle.
1417 scoped_ptr<CCLayerImpl> child = createScrollableLayer(childLayerId, m_hostIm pl->rootLayer()->contentBounds()); 1417 scoped_ptr<LayerImpl> child = createScrollableLayer(childLayerId, m_hostImpl ->rootLayer()->contentBounds());
1418 WebTransformationMatrix rotateTransform; 1418 WebTransformationMatrix rotateTransform;
1419 rotateTransform.translate(-50, -50); 1419 rotateTransform.translate(-50, -50);
1420 rotateTransform.rotate(childLayerAngle); 1420 rotateTransform.rotate(childLayerAngle);
1421 rotateTransform.translate(50, 50); 1421 rotateTransform.translate(50, 50);
1422 child->setTransform(rotateTransform); 1422 child->setTransform(rotateTransform);
1423 1423
1424 // Only allow vertical scrolling. 1424 // Only allow vertical scrolling.
1425 child->setMaxScrollPosition(IntSize(0, child->contentBounds().height())); 1425 child->setMaxScrollPosition(IntSize(0, child->contentBounds().height()));
1426 m_hostImpl->rootLayer()->addChild(child.Pass()); 1426 m_hostImpl->rootLayer()->addChild(child.Pass());
1427 1427
1428 IntSize surfaceSize(50, 50); 1428 IntSize surfaceSize(50, 50);
1429 m_hostImpl->setViewportSize(surfaceSize, surfaceSize); 1429 m_hostImpl->setViewportSize(surfaceSize, surfaceSize);
1430 initializeRendererAndDrawFrame(); 1430 initializeRendererAndDrawFrame();
1431 1431
1432 { 1432 {
1433 // Scroll down in screen coordinates with a gesture. 1433 // Scroll down in screen coordinates with a gesture.
1434 IntSize gestureScrollDelta(0, 10); 1434 IntSize gestureScrollDelta(0, 10);
1435 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), CCInputHandlerClient:: Gesture), CCInputHandlerClient::ScrollStarted); 1435 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), InputHandlerClient::Ge sture), InputHandlerClient::ScrollStarted);
1436 m_hostImpl->scrollBy(IntPoint(), gestureScrollDelta); 1436 m_hostImpl->scrollBy(IntPoint(), gestureScrollDelta);
1437 m_hostImpl->scrollEnd(); 1437 m_hostImpl->scrollEnd();
1438 1438
1439 // The child layer should have scrolled down in its local coordinates an amount proportional to 1439 // The child layer should have scrolled down in its local coordinates an amount proportional to
1440 // the angle between it and the input scroll delta. 1440 // the angle between it and the input scroll delta.
1441 IntSize expectedScrollDelta(0, gestureScrollDelta.height() * cosf(deg2ra d(childLayerAngle))); 1441 IntSize expectedScrollDelta(0, gestureScrollDelta.height() * cosf(deg2ra d(childLayerAngle)));
1442 scoped_ptr<CCScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDe ltas(); 1442 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDelt as();
1443 expectContains(*scrollInfo.get(), childLayerId, expectedScrollDelta); 1443 expectContains(*scrollInfo.get(), childLayerId, expectedScrollDelta);
1444 1444
1445 // The root layer should not have scrolled, because the input delta was close to the layer's 1445 // The root layer should not have scrolled, because the input delta was close to the layer's
1446 // axis of movement. 1446 // axis of movement.
1447 EXPECT_EQ(scrollInfo->scrolls.size(), 1u); 1447 EXPECT_EQ(scrollInfo->scrolls.size(), 1u);
1448 } 1448 }
1449 1449
1450 { 1450 {
1451 // Now reset and scroll the same amount horizontally. 1451 // Now reset and scroll the same amount horizontally.
1452 m_hostImpl->rootLayer()->children()[1]->setScrollDelta(FloatSize()); 1452 m_hostImpl->rootLayer()->children()[1]->setScrollDelta(FloatSize());
1453 IntSize gestureScrollDelta(10, 0); 1453 IntSize gestureScrollDelta(10, 0);
1454 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), CCInputHandlerClient:: Gesture), CCInputHandlerClient::ScrollStarted); 1454 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), InputHandlerClient::Ge sture), InputHandlerClient::ScrollStarted);
1455 m_hostImpl->scrollBy(IntPoint(), gestureScrollDelta); 1455 m_hostImpl->scrollBy(IntPoint(), gestureScrollDelta);
1456 m_hostImpl->scrollEnd(); 1456 m_hostImpl->scrollEnd();
1457 1457
1458 // The child layer should have scrolled down in its local coordinates an amount proportional to 1458 // The child layer should have scrolled down in its local coordinates an amount proportional to
1459 // the angle between it and the input scroll delta. 1459 // the angle between it and the input scroll delta.
1460 IntSize expectedScrollDelta(0, -gestureScrollDelta.width() * sinf(deg2ra d(childLayerAngle))); 1460 IntSize expectedScrollDelta(0, -gestureScrollDelta.width() * sinf(deg2ra d(childLayerAngle)));
1461 scoped_ptr<CCScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDe ltas(); 1461 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDelt as();
1462 expectContains(*scrollInfo.get(), childLayerId, expectedScrollDelta); 1462 expectContains(*scrollInfo.get(), childLayerId, expectedScrollDelta);
1463 1463
1464 // The root layer should have scrolled more, since the input scroll delt a was mostly 1464 // The root layer should have scrolled more, since the input scroll delt a was mostly
1465 // orthogonal to the child layer's vertical scroll axis. 1465 // orthogonal to the child layer's vertical scroll axis.
1466 IntSize expectedRootScrollDelta(gestureScrollDelta.width() * pow(cosf(de g2rad(childLayerAngle)), 2), 0); 1466 IntSize expectedRootScrollDelta(gestureScrollDelta.width() * pow(cosf(de g2rad(childLayerAngle)), 2), 0);
1467 expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), expecte dRootScrollDelta); 1467 expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), expecte dRootScrollDelta);
1468 } 1468 }
1469 } 1469 }
1470 1470
1471 TEST_P(CCLayerTreeHostImplTest, scrollScaledLayer) 1471 TEST_P(LayerTreeHostImplTest, scrollScaledLayer)
1472 { 1472 {
1473 setupScrollAndContentsLayers(IntSize(100, 100)); 1473 setupScrollAndContentsLayers(IntSize(100, 100));
1474 1474
1475 // Scale the layer to twice its normal size. 1475 // Scale the layer to twice its normal size.
1476 int scale = 2; 1476 int scale = 2;
1477 WebTransformationMatrix scaleTransform; 1477 WebTransformationMatrix scaleTransform;
1478 scaleTransform.scale(scale); 1478 scaleTransform.scale(scale);
1479 m_hostImpl->rootLayer()->setTransform(scaleTransform); 1479 m_hostImpl->rootLayer()->setTransform(scaleTransform);
1480 1480
1481 IntSize surfaceSize(50, 50); 1481 IntSize surfaceSize(50, 50);
1482 m_hostImpl->setViewportSize(surfaceSize, surfaceSize); 1482 m_hostImpl->setViewportSize(surfaceSize, surfaceSize);
1483 initializeRendererAndDrawFrame(); 1483 initializeRendererAndDrawFrame();
1484 1484
1485 // Scroll down in screen coordinates with a gesture. 1485 // Scroll down in screen coordinates with a gesture.
1486 IntSize scrollDelta(0, 10); 1486 IntSize scrollDelta(0, 10);
1487 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), CCInputHandlerClient::Gest ure), CCInputHandlerClient::ScrollStarted); 1487 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), InputHandlerClient::Gestur e), InputHandlerClient::ScrollStarted);
1488 m_hostImpl->scrollBy(IntPoint(), scrollDelta); 1488 m_hostImpl->scrollBy(IntPoint(), scrollDelta);
1489 m_hostImpl->scrollEnd(); 1489 m_hostImpl->scrollEnd();
1490 1490
1491 // The layer should have scrolled down in its local coordinates, but half he amount. 1491 // The layer should have scrolled down in its local coordinates, but half he amount.
1492 scoped_ptr<CCScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas (); 1492 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas() ;
1493 expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), IntSize(0, scrollDelta.height() / scale)); 1493 expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), IntSize(0, scrollDelta.height() / scale));
1494 1494
1495 // Reset and scroll down with the wheel. 1495 // Reset and scroll down with the wheel.
1496 m_hostImpl->rootLayer()->setScrollDelta(FloatSize()); 1496 m_hostImpl->rootLayer()->setScrollDelta(FloatSize());
1497 IntSize wheelScrollDelta(0, 10); 1497 IntSize wheelScrollDelta(0, 10);
1498 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), CCInputHandlerClient::Whee l), CCInputHandlerClient::ScrollStarted); 1498 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), InputHandlerClient::Wheel) , InputHandlerClient::ScrollStarted);
1499 m_hostImpl->scrollBy(IntPoint(), wheelScrollDelta); 1499 m_hostImpl->scrollBy(IntPoint(), wheelScrollDelta);
1500 m_hostImpl->scrollEnd(); 1500 m_hostImpl->scrollEnd();
1501 1501
1502 // The scale should not have been applied to the scroll delta. 1502 // The scale should not have been applied to the scroll delta.
1503 scrollInfo = m_hostImpl->processScrollDeltas(); 1503 scrollInfo = m_hostImpl->processScrollDeltas();
1504 expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), wheelScroll Delta); 1504 expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), wheelScroll Delta);
1505 } 1505 }
1506 1506
1507 class BlendStateTrackerContext: public FakeWebGraphicsContext3D { 1507 class BlendStateTrackerContext: public FakeWebGraphicsContext3D {
1508 public: 1508 public:
(...skipping 10 matching lines...) Expand all
1519 if (cap == GraphicsContext3D::BLEND) 1519 if (cap == GraphicsContext3D::BLEND)
1520 m_blend = false; 1520 m_blend = false;
1521 } 1521 }
1522 1522
1523 bool blend() const { return m_blend; } 1523 bool blend() const { return m_blend; }
1524 1524
1525 private: 1525 private:
1526 bool m_blend; 1526 bool m_blend;
1527 }; 1527 };
1528 1528
1529 class BlendStateCheckLayer : public CCLayerImpl { 1529 class BlendStateCheckLayer : public LayerImpl {
1530 public: 1530 public:
1531 static scoped_ptr<CCLayerImpl> create(int id, CCResourceProvider* resourcePr ovider) { return scoped_ptr<CCLayerImpl>(new BlendStateCheckLayer(id, resourcePr ovider)); } 1531 static scoped_ptr<LayerImpl> create(int id, ResourceProvider* resourceProvid er) { return scoped_ptr<LayerImpl>(new BlendStateCheckLayer(id, resourceProvider )); }
1532 1532
1533 virtual void appendQuads(CCQuadSink& quadSink, CCAppendQuadsData& appendQuad sData) OVERRIDE 1533 virtual void appendQuads(QuadSink& quadSink, AppendQuadsData& appendQuadsDat a) OVERRIDE
1534 { 1534 {
1535 m_quadsAppended = true; 1535 m_quadsAppended = true;
1536 1536
1537 IntRect opaqueRect; 1537 IntRect opaqueRect;
1538 if (contentsOpaque()) 1538 if (contentsOpaque())
1539 opaqueRect = m_quadRect; 1539 opaqueRect = m_quadRect;
1540 else 1540 else
1541 opaqueRect = m_opaqueContentRect; 1541 opaqueRect = m_opaqueContentRect;
1542 1542
1543 CCSharedQuadState* sharedQuadState = quadSink.useSharedQuadState(createS haredQuadState()); 1543 SharedQuadState* sharedQuadState = quadSink.useSharedQuadState(createSha redQuadState());
1544 scoped_ptr<CCTileDrawQuad> testBlendingDrawQuad = CCTileDrawQuad::create (sharedQuadState, m_quadRect, opaqueRect, m_resourceId, IntPoint(), IntSize(1, 1 ), 0, false, false, false, false, false); 1544 scoped_ptr<TileDrawQuad> testBlendingDrawQuad = TileDrawQuad::create(sha redQuadState, m_quadRect, opaqueRect, m_resourceId, IntPoint(), IntSize(1, 1), 0 , false, false, false, false, false);
1545 testBlendingDrawQuad->setQuadVisibleRect(m_quadVisibleRect); 1545 testBlendingDrawQuad->setQuadVisibleRect(m_quadVisibleRect);
1546 EXPECT_EQ(m_blend, testBlendingDrawQuad->needsBlending()); 1546 EXPECT_EQ(m_blend, testBlendingDrawQuad->needsBlending());
1547 EXPECT_EQ(m_hasRenderSurface, !!renderSurface()); 1547 EXPECT_EQ(m_hasRenderSurface, !!renderSurface());
1548 quadSink.append(testBlendingDrawQuad.PassAs<CCDrawQuad>(), appendQuadsDa ta); 1548 quadSink.append(testBlendingDrawQuad.PassAs<DrawQuad>(), appendQuadsData );
1549 } 1549 }
1550 1550
1551 void setExpectation(bool blend, bool hasRenderSurface) 1551 void setExpectation(bool blend, bool hasRenderSurface)
1552 { 1552 {
1553 m_blend = blend; 1553 m_blend = blend;
1554 m_hasRenderSurface = hasRenderSurface; 1554 m_hasRenderSurface = hasRenderSurface;
1555 m_quadsAppended = false; 1555 m_quadsAppended = false;
1556 } 1556 }
1557 1557
1558 bool quadsAppended() const { return m_quadsAppended; } 1558 bool quadsAppended() const { return m_quadsAppended; }
1559 1559
1560 void setQuadRect(const IntRect& rect) { m_quadRect = rect; } 1560 void setQuadRect(const IntRect& rect) { m_quadRect = rect; }
1561 void setQuadVisibleRect(const IntRect& rect) { m_quadVisibleRect = rect; } 1561 void setQuadVisibleRect(const IntRect& rect) { m_quadVisibleRect = rect; }
1562 void setOpaqueContentRect(const IntRect& rect) { m_opaqueContentRect = rect; } 1562 void setOpaqueContentRect(const IntRect& rect) { m_opaqueContentRect = rect; }
1563 1563
1564 private: 1564 private:
1565 explicit BlendStateCheckLayer(int id, CCResourceProvider* resourceProvider) 1565 explicit BlendStateCheckLayer(int id, ResourceProvider* resourceProvider)
1566 : CCLayerImpl(id) 1566 : LayerImpl(id)
1567 , m_blend(false) 1567 , m_blend(false)
1568 , m_hasRenderSurface(false) 1568 , m_hasRenderSurface(false)
1569 , m_quadsAppended(false) 1569 , m_quadsAppended(false)
1570 , m_quadRect(5, 5, 5, 5) 1570 , m_quadRect(5, 5, 5, 5)
1571 , m_quadVisibleRect(5, 5, 5, 5) 1571 , m_quadVisibleRect(5, 5, 5, 5)
1572 , m_resourceId(resourceProvider->createResource(CCRenderer::ContentPool, IntSize(1, 1), GraphicsContext3D::RGBA, CCResourceProvider::TextureUsageAny)) 1572 , m_resourceId(resourceProvider->createResource(Renderer::ContentPool, I ntSize(1, 1), GraphicsContext3D::RGBA, ResourceProvider::TextureUsageAny))
1573 { 1573 {
1574 setAnchorPoint(FloatPoint(0, 0)); 1574 setAnchorPoint(FloatPoint(0, 0));
1575 setBounds(IntSize(10, 10)); 1575 setBounds(IntSize(10, 10));
1576 setContentBounds(IntSize(10, 10)); 1576 setContentBounds(IntSize(10, 10));
1577 setDrawsContent(true); 1577 setDrawsContent(true);
1578 } 1578 }
1579 1579
1580 bool m_blend; 1580 bool m_blend;
1581 bool m_hasRenderSurface; 1581 bool m_hasRenderSurface;
1582 bool m_quadsAppended; 1582 bool m_quadsAppended;
1583 IntRect m_quadRect; 1583 IntRect m_quadRect;
1584 IntRect m_opaqueContentRect; 1584 IntRect m_opaqueContentRect;
1585 IntRect m_quadVisibleRect; 1585 IntRect m_quadVisibleRect;
1586 CCResourceProvider::ResourceId m_resourceId; 1586 ResourceProvider::ResourceId m_resourceId;
1587 }; 1587 };
1588 1588
1589 TEST_P(CCLayerTreeHostImplTest, blendingOffWhenDrawingOpaqueLayers) 1589 TEST_P(LayerTreeHostImplTest, blendingOffWhenDrawingOpaqueLayers)
1590 { 1590 {
1591 { 1591 {
1592 scoped_ptr<CCLayerImpl> root = CCLayerImpl::create(1); 1592 scoped_ptr<LayerImpl> root = LayerImpl::create(1);
1593 root->setAnchorPoint(FloatPoint(0, 0)); 1593 root->setAnchorPoint(FloatPoint(0, 0));
1594 root->setBounds(IntSize(10, 10)); 1594 root->setBounds(IntSize(10, 10));
1595 root->setContentBounds(root->bounds()); 1595 root->setContentBounds(root->bounds());
1596 root->setDrawsContent(false); 1596 root->setDrawsContent(false);
1597 m_hostImpl->setRootLayer(root.Pass()); 1597 m_hostImpl->setRootLayer(root.Pass());
1598 } 1598 }
1599 CCLayerImpl* root = m_hostImpl->rootLayer(); 1599 LayerImpl* root = m_hostImpl->rootLayer();
1600 1600
1601 root->addChild(BlendStateCheckLayer::create(2, m_hostImpl->resourceProvider( ))); 1601 root->addChild(BlendStateCheckLayer::create(2, m_hostImpl->resourceProvider( )));
1602 BlendStateCheckLayer* layer1 = static_cast<BlendStateCheckLayer*>(root->chil dren()[0]); 1602 BlendStateCheckLayer* layer1 = static_cast<BlendStateCheckLayer*>(root->chil dren()[0]);
1603 layer1->setPosition(FloatPoint(2, 2)); 1603 layer1->setPosition(FloatPoint(2, 2));
1604 1604
1605 CCLayerTreeHostImpl::FrameData frame; 1605 LayerTreeHostImpl::FrameData frame;
1606 1606
1607 // Opaque layer, drawn without blending. 1607 // Opaque layer, drawn without blending.
1608 layer1->setContentsOpaque(true); 1608 layer1->setContentsOpaque(true);
1609 layer1->setExpectation(false, false); 1609 layer1->setExpectation(false, false);
1610 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); 1610 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame));
1611 m_hostImpl->drawLayers(frame); 1611 m_hostImpl->drawLayers(frame);
1612 EXPECT_TRUE(layer1->quadsAppended()); 1612 EXPECT_TRUE(layer1->quadsAppended());
1613 m_hostImpl->didDrawAllLayers(frame); 1613 m_hostImpl->didDrawAllLayers(frame);
1614 1614
1615 // Layer with translucent content and painting, so drawn with blending. 1615 // Layer with translucent content and painting, so drawn with blending.
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
1771 layer1->setQuadVisibleRect(IntRect(5, 5, 2, 5)); 1771 layer1->setQuadVisibleRect(IntRect(5, 5, 2, 5));
1772 layer1->setOpaqueContentRect(IntRect(5, 5, 2, 5)); 1772 layer1->setOpaqueContentRect(IntRect(5, 5, 2, 5));
1773 layer1->setExpectation(false, false); 1773 layer1->setExpectation(false, false);
1774 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); 1774 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame));
1775 m_hostImpl->drawLayers(frame); 1775 m_hostImpl->drawLayers(frame);
1776 EXPECT_TRUE(layer1->quadsAppended()); 1776 EXPECT_TRUE(layer1->quadsAppended());
1777 m_hostImpl->didDrawAllLayers(frame); 1777 m_hostImpl->didDrawAllLayers(frame);
1778 1778
1779 } 1779 }
1780 1780
1781 TEST_P(CCLayerTreeHostImplTest, viewportCovered) 1781 TEST_P(LayerTreeHostImplTest, viewportCovered)
1782 { 1782 {
1783 m_hostImpl->initializeRenderer(createContext()); 1783 m_hostImpl->initializeRenderer(createContext());
1784 m_hostImpl->setBackgroundColor(SK_ColorGRAY); 1784 m_hostImpl->setBackgroundColor(SK_ColorGRAY);
1785 1785
1786 IntSize viewportSize(1000, 1000); 1786 IntSize viewportSize(1000, 1000);
1787 m_hostImpl->setViewportSize(viewportSize, viewportSize); 1787 m_hostImpl->setViewportSize(viewportSize, viewportSize);
1788 1788
1789 m_hostImpl->setRootLayer(BlendStateCheckLayer::create(1, m_hostImpl->resourc eProvider())); 1789 m_hostImpl->setRootLayer(BlendStateCheckLayer::create(1, m_hostImpl->resourc eProvider()));
1790 BlendStateCheckLayer* root = static_cast<BlendStateCheckLayer*>(m_hostImpl-> rootLayer()); 1790 BlendStateCheckLayer* root = static_cast<BlendStateCheckLayer*>(m_hostImpl-> rootLayer());
1791 root->setExpectation(false, true); 1791 root->setExpectation(false, true);
1792 root->setContentsOpaque(true); 1792 root->setContentsOpaque(true);
1793 1793
1794 // No gutter rects 1794 // No gutter rects
1795 { 1795 {
1796 IntRect layerRect(0, 0, 1000, 1000); 1796 IntRect layerRect(0, 0, 1000, 1000);
1797 root->setPosition(layerRect.location()); 1797 root->setPosition(layerRect.location());
1798 root->setBounds(layerRect.size()); 1798 root->setBounds(layerRect.size());
1799 root->setContentBounds(layerRect.size()); 1799 root->setContentBounds(layerRect.size());
1800 root->setQuadRect(IntRect(IntPoint(), layerRect.size())); 1800 root->setQuadRect(IntRect(IntPoint(), layerRect.size()));
1801 root->setQuadVisibleRect(IntRect(IntPoint(), layerRect.size())); 1801 root->setQuadVisibleRect(IntRect(IntPoint(), layerRect.size()));
1802 1802
1803 CCLayerTreeHostImpl::FrameData frame; 1803 LayerTreeHostImpl::FrameData frame;
1804 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); 1804 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame));
1805 ASSERT_EQ(1u, frame.renderPasses.size()); 1805 ASSERT_EQ(1u, frame.renderPasses.size());
1806 1806
1807 size_t numGutterQuads = 0; 1807 size_t numGutterQuads = 0;
1808 for (size_t i = 0; i < frame.renderPasses[0]->quadList().size(); ++i) 1808 for (size_t i = 0; i < frame.renderPasses[0]->quadList().size(); ++i)
1809 numGutterQuads += (frame.renderPasses[0]->quadList()[i]->material() == CCDrawQuad::SolidColor) ? 1 : 0; 1809 numGutterQuads += (frame.renderPasses[0]->quadList()[i]->material() == DrawQuad::SolidColor) ? 1 : 0;
1810 EXPECT_EQ(0u, numGutterQuads); 1810 EXPECT_EQ(0u, numGutterQuads);
1811 EXPECT_EQ(1u, frame.renderPasses[0]->quadList().size()); 1811 EXPECT_EQ(1u, frame.renderPasses[0]->quadList().size());
1812 1812
1813 verifyQuadsExactlyCoverRect(frame.renderPasses[0]->quadList(), IntRect(- layerRect.location(), viewportSize)); 1813 verifyQuadsExactlyCoverRect(frame.renderPasses[0]->quadList(), IntRect(- layerRect.location(), viewportSize));
1814 m_hostImpl->didDrawAllLayers(frame); 1814 m_hostImpl->didDrawAllLayers(frame);
1815 } 1815 }
1816 1816
1817 // Empty visible content area (fullscreen gutter rect) 1817 // Empty visible content area (fullscreen gutter rect)
1818 { 1818 {
1819 IntRect layerRect(0, 0, 0, 0); 1819 IntRect layerRect(0, 0, 0, 0);
1820 root->setPosition(layerRect.location()); 1820 root->setPosition(layerRect.location());
1821 root->setBounds(layerRect.size()); 1821 root->setBounds(layerRect.size());
1822 root->setContentBounds(layerRect.size()); 1822 root->setContentBounds(layerRect.size());
1823 root->setQuadRect(IntRect(IntPoint(), layerRect.size())); 1823 root->setQuadRect(IntRect(IntPoint(), layerRect.size()));
1824 root->setQuadVisibleRect(IntRect(IntPoint(), layerRect.size())); 1824 root->setQuadVisibleRect(IntRect(IntPoint(), layerRect.size()));
1825 1825
1826 CCLayerTreeHostImpl::FrameData frame; 1826 LayerTreeHostImpl::FrameData frame;
1827 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); 1827 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame));
1828 ASSERT_EQ(1u, frame.renderPasses.size()); 1828 ASSERT_EQ(1u, frame.renderPasses.size());
1829 m_hostImpl->didDrawAllLayers(frame); 1829 m_hostImpl->didDrawAllLayers(frame);
1830 1830
1831 size_t numGutterQuads = 0; 1831 size_t numGutterQuads = 0;
1832 for (size_t i = 0; i < frame.renderPasses[0]->quadList().size(); ++i) 1832 for (size_t i = 0; i < frame.renderPasses[0]->quadList().size(); ++i)
1833 numGutterQuads += (frame.renderPasses[0]->quadList()[i]->material() == CCDrawQuad::SolidColor) ? 1 : 0; 1833 numGutterQuads += (frame.renderPasses[0]->quadList()[i]->material() == DrawQuad::SolidColor) ? 1 : 0;
1834 EXPECT_EQ(1u, numGutterQuads); 1834 EXPECT_EQ(1u, numGutterQuads);
1835 EXPECT_EQ(1u, frame.renderPasses[0]->quadList().size()); 1835 EXPECT_EQ(1u, frame.renderPasses[0]->quadList().size());
1836 1836
1837 verifyQuadsExactlyCoverRect(frame.renderPasses[0]->quadList(), IntRect(- layerRect.location(), viewportSize)); 1837 verifyQuadsExactlyCoverRect(frame.renderPasses[0]->quadList(), IntRect(- layerRect.location(), viewportSize));
1838 m_hostImpl->didDrawAllLayers(frame); 1838 m_hostImpl->didDrawAllLayers(frame);
1839 } 1839 }
1840 1840
1841 // Content area in middle of clip rect (four surrounding gutter rects) 1841 // Content area in middle of clip rect (four surrounding gutter rects)
1842 { 1842 {
1843 IntRect layerRect(500, 500, 200, 200); 1843 IntRect layerRect(500, 500, 200, 200);
1844 root->setPosition(layerRect.location()); 1844 root->setPosition(layerRect.location());
1845 root->setBounds(layerRect.size()); 1845 root->setBounds(layerRect.size());
1846 root->setContentBounds(layerRect.size()); 1846 root->setContentBounds(layerRect.size());
1847 root->setQuadRect(IntRect(IntPoint(), layerRect.size())); 1847 root->setQuadRect(IntRect(IntPoint(), layerRect.size()));
1848 root->setQuadVisibleRect(IntRect(IntPoint(), layerRect.size())); 1848 root->setQuadVisibleRect(IntRect(IntPoint(), layerRect.size()));
1849 1849
1850 CCLayerTreeHostImpl::FrameData frame; 1850 LayerTreeHostImpl::FrameData frame;
1851 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); 1851 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame));
1852 ASSERT_EQ(1u, frame.renderPasses.size()); 1852 ASSERT_EQ(1u, frame.renderPasses.size());
1853 1853
1854 size_t numGutterQuads = 0; 1854 size_t numGutterQuads = 0;
1855 for (size_t i = 0; i < frame.renderPasses[0]->quadList().size(); ++i) 1855 for (size_t i = 0; i < frame.renderPasses[0]->quadList().size(); ++i)
1856 numGutterQuads += (frame.renderPasses[0]->quadList()[i]->material() == CCDrawQuad::SolidColor) ? 1 : 0; 1856 numGutterQuads += (frame.renderPasses[0]->quadList()[i]->material() == DrawQuad::SolidColor) ? 1 : 0;
1857 EXPECT_EQ(4u, numGutterQuads); 1857 EXPECT_EQ(4u, numGutterQuads);
1858 EXPECT_EQ(5u, frame.renderPasses[0]->quadList().size()); 1858 EXPECT_EQ(5u, frame.renderPasses[0]->quadList().size());
1859 1859
1860 verifyQuadsExactlyCoverRect(frame.renderPasses[0]->quadList(), IntRect(- layerRect.location(), viewportSize)); 1860 verifyQuadsExactlyCoverRect(frame.renderPasses[0]->quadList(), IntRect(- layerRect.location(), viewportSize));
1861 m_hostImpl->didDrawAllLayers(frame); 1861 m_hostImpl->didDrawAllLayers(frame);
1862 } 1862 }
1863 1863
1864 } 1864 }
1865 1865
1866 1866
1867 class ReshapeTrackerContext: public FakeWebGraphicsContext3D { 1867 class ReshapeTrackerContext: public FakeWebGraphicsContext3D {
1868 public: 1868 public:
1869 ReshapeTrackerContext() : m_reshapeCalled(false) { } 1869 ReshapeTrackerContext() : m_reshapeCalled(false) { }
1870 1870
1871 virtual void reshape(int width, int height) 1871 virtual void reshape(int width, int height)
1872 { 1872 {
1873 m_reshapeCalled = true; 1873 m_reshapeCalled = true;
1874 } 1874 }
1875 1875
1876 bool reshapeCalled() const { return m_reshapeCalled; } 1876 bool reshapeCalled() const { return m_reshapeCalled; }
1877 1877
1878 private: 1878 private:
1879 bool m_reshapeCalled; 1879 bool m_reshapeCalled;
1880 }; 1880 };
1881 1881
1882 class FakeDrawableCCLayerImpl: public CCLayerImpl { 1882 class FakeDrawableLayerImpl: public LayerImpl {
1883 public: 1883 public:
1884 static scoped_ptr<CCLayerImpl> create(int id) { return scoped_ptr<CCLayerImp l>(new FakeDrawableCCLayerImpl(id)); } 1884 static scoped_ptr<LayerImpl> create(int id) { return scoped_ptr<LayerImpl>(n ew FakeDrawableLayerImpl(id)); }
1885 protected: 1885 protected:
1886 explicit FakeDrawableCCLayerImpl(int id) : CCLayerImpl(id) { } 1886 explicit FakeDrawableLayerImpl(int id) : LayerImpl(id) { }
1887 }; 1887 };
1888 1888
1889 // Only reshape when we know we are going to draw. Otherwise, the reshape 1889 // Only reshape when we know we are going to draw. Otherwise, the reshape
1890 // can leave the window at the wrong size if we never draw and the proper 1890 // can leave the window at the wrong size if we never draw and the proper
1891 // viewport size is never set. 1891 // viewport size is never set.
1892 TEST_P(CCLayerTreeHostImplTest, reshapeNotCalledUntilDraw) 1892 TEST_P(LayerTreeHostImplTest, reshapeNotCalledUntilDraw)
1893 { 1893 {
1894 scoped_ptr<CCGraphicsContext> ccContext = FakeWebCompositorOutputSurface::cr eate(scoped_ptr<WebKit::WebGraphicsContext3D>(new ReshapeTrackerContext)).PassAs <CCGraphicsContext>(); 1894 scoped_ptr<GraphicsContext> outputSurface = FakeWebCompositorOutputSurface:: create(scoped_ptr<WebKit::WebGraphicsContext3D>(new ReshapeTrackerContext)).Pass As<GraphicsContext>();
1895 ReshapeTrackerContext* reshapeTracker = static_cast<ReshapeTrackerContext*>( ccContext->context3D()); 1895 ReshapeTrackerContext* reshapeTracker = static_cast<ReshapeTrackerContext*>( outputSurface->context3D());
1896 m_hostImpl->initializeRenderer(ccContext.Pass()); 1896 m_hostImpl->initializeRenderer(outputSurface.Pass());
1897 1897
1898 scoped_ptr<CCLayerImpl> root = FakeDrawableCCLayerImpl::create(1); 1898 scoped_ptr<LayerImpl> root = FakeDrawableLayerImpl::create(1);
1899 root->setAnchorPoint(FloatPoint(0, 0)); 1899 root->setAnchorPoint(FloatPoint(0, 0));
1900 root->setBounds(IntSize(10, 10)); 1900 root->setBounds(IntSize(10, 10));
1901 root->setDrawsContent(true); 1901 root->setDrawsContent(true);
1902 m_hostImpl->setRootLayer(root.Pass()); 1902 m_hostImpl->setRootLayer(root.Pass());
1903 EXPECT_FALSE(reshapeTracker->reshapeCalled()); 1903 EXPECT_FALSE(reshapeTracker->reshapeCalled());
1904 1904
1905 CCLayerTreeHostImpl::FrameData frame; 1905 LayerTreeHostImpl::FrameData frame;
1906 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); 1906 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame));
1907 m_hostImpl->drawLayers(frame); 1907 m_hostImpl->drawLayers(frame);
1908 EXPECT_TRUE(reshapeTracker->reshapeCalled()); 1908 EXPECT_TRUE(reshapeTracker->reshapeCalled());
1909 m_hostImpl->didDrawAllLayers(frame); 1909 m_hostImpl->didDrawAllLayers(frame);
1910 } 1910 }
1911 1911
1912 class PartialSwapTrackerContext : public FakeWebGraphicsContext3D { 1912 class PartialSwapTrackerContext : public FakeWebGraphicsContext3D {
1913 public: 1913 public:
1914 virtual void postSubBufferCHROMIUM(int x, int y, int width, int height) 1914 virtual void postSubBufferCHROMIUM(int x, int y, int width, int height)
1915 { 1915 {
1916 m_partialSwapRect = IntRect(x, y, width, height); 1916 m_partialSwapRect = IntRect(x, y, width, height);
1917 } 1917 }
1918 1918
1919 virtual WebString getString(WGC3Denum name) 1919 virtual WebString getString(WGC3Denum name)
1920 { 1920 {
1921 if (name == GraphicsContext3D::EXTENSIONS) 1921 if (name == GraphicsContext3D::EXTENSIONS)
1922 return WebString("GL_CHROMIUM_post_sub_buffer GL_CHROMIUM_set_visibi lity"); 1922 return WebString("GL_CHROMIUM_post_sub_buffer GL_CHROMIUM_set_visibi lity");
1923 1923
1924 return WebString(); 1924 return WebString();
1925 } 1925 }
1926 1926
1927 IntRect partialSwapRect() const { return m_partialSwapRect; } 1927 IntRect partialSwapRect() const { return m_partialSwapRect; }
1928 1928
1929 private: 1929 private:
1930 IntRect m_partialSwapRect; 1930 IntRect m_partialSwapRect;
1931 }; 1931 };
1932 1932
1933 // Make sure damage tracking propagates all the way to the graphics context, 1933 // Make sure damage tracking propagates all the way to the graphics context,
1934 // where it should request to swap only the subBuffer that is damaged. 1934 // where it should request to swap only the subBuffer that is damaged.
1935 TEST_P(CCLayerTreeHostImplTest, partialSwapReceivesDamageRect) 1935 TEST_P(LayerTreeHostImplTest, partialSwapReceivesDamageRect)
1936 { 1936 {
1937 scoped_ptr<CCGraphicsContext> ccContext = FakeWebCompositorOutputSurface::cr eate(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapTrackerContext)).Pa ssAs<CCGraphicsContext>(); 1937 scoped_ptr<GraphicsContext> outputSurface = FakeWebCompositorOutputSurface:: create(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapTrackerContext)). PassAs<GraphicsContext>();
1938 PartialSwapTrackerContext* partialSwapTracker = static_cast<PartialSwapTrack erContext*>(ccContext->context3D()); 1938 PartialSwapTrackerContext* partialSwapTracker = static_cast<PartialSwapTrack erContext*>(outputSurface->context3D());
1939 1939
1940 // This test creates its own CCLayerTreeHostImpl, so 1940 // This test creates its own LayerTreeHostImpl, so
1941 // that we can force partial swap enabled. 1941 // that we can force partial swap enabled.
1942 CCLayerTreeSettings settings; 1942 LayerTreeSettings settings;
1943 CCSettings::setPartialSwapEnabled(true); 1943 Settings::setPartialSwapEnabled(true);
1944 scoped_ptr<CCLayerTreeHostImpl> layerTreeHostImpl = CCLayerTreeHostImpl::cre ate(settings, this); 1944 scoped_ptr<LayerTreeHostImpl> layerTreeHostImpl = LayerTreeHostImpl::create( settings, this);
1945 layerTreeHostImpl->initializeRenderer(ccContext.Pass()); 1945 layerTreeHostImpl->initializeRenderer(outputSurface.Pass());
1946 layerTreeHostImpl->setViewportSize(IntSize(500, 500), IntSize(500, 500)); 1946 layerTreeHostImpl->setViewportSize(IntSize(500, 500), IntSize(500, 500));
1947 1947
1948 scoped_ptr<CCLayerImpl> root = FakeDrawableCCLayerImpl::create(1); 1948 scoped_ptr<LayerImpl> root = FakeDrawableLayerImpl::create(1);
1949 scoped_ptr<CCLayerImpl> child = FakeDrawableCCLayerImpl::create(2); 1949 scoped_ptr<LayerImpl> child = FakeDrawableLayerImpl::create(2);
1950 child->setPosition(FloatPoint(12, 13)); 1950 child->setPosition(FloatPoint(12, 13));
1951 child->setAnchorPoint(FloatPoint(0, 0)); 1951 child->setAnchorPoint(FloatPoint(0, 0));
1952 child->setBounds(IntSize(14, 15)); 1952 child->setBounds(IntSize(14, 15));
1953 child->setContentBounds(IntSize(14, 15)); 1953 child->setContentBounds(IntSize(14, 15));
1954 child->setDrawsContent(true); 1954 child->setDrawsContent(true);
1955 root->setAnchorPoint(FloatPoint(0, 0)); 1955 root->setAnchorPoint(FloatPoint(0, 0));
1956 root->setBounds(IntSize(500, 500)); 1956 root->setBounds(IntSize(500, 500));
1957 root->setContentBounds(IntSize(500, 500)); 1957 root->setContentBounds(IntSize(500, 500));
1958 root->setDrawsContent(true); 1958 root->setDrawsContent(true);
1959 root->addChild(child.Pass()); 1959 root->addChild(child.Pass());
1960 layerTreeHostImpl->setRootLayer(root.Pass()); 1960 layerTreeHostImpl->setRootLayer(root.Pass());
1961 1961
1962 CCLayerTreeHostImpl::FrameData frame; 1962 LayerTreeHostImpl::FrameData frame;
1963 1963
1964 // First frame, the entire screen should get swapped. 1964 // First frame, the entire screen should get swapped.
1965 EXPECT_TRUE(layerTreeHostImpl->prepareToDraw(frame)); 1965 EXPECT_TRUE(layerTreeHostImpl->prepareToDraw(frame));
1966 layerTreeHostImpl->drawLayers(frame); 1966 layerTreeHostImpl->drawLayers(frame);
1967 layerTreeHostImpl->didDrawAllLayers(frame); 1967 layerTreeHostImpl->didDrawAllLayers(frame);
1968 layerTreeHostImpl->swapBuffers(); 1968 layerTreeHostImpl->swapBuffers();
1969 IntRect actualSwapRect = partialSwapTracker->partialSwapRect(); 1969 IntRect actualSwapRect = partialSwapTracker->partialSwapRect();
1970 IntRect expectedSwapRect = IntRect(IntPoint::zero(), IntSize(500, 500)); 1970 IntRect expectedSwapRect = IntRect(IntPoint::zero(), IntSize(500, 500));
1971 EXPECT_EQ(expectedSwapRect.x(), actualSwapRect.x()); 1971 EXPECT_EQ(expectedSwapRect.x(), actualSwapRect.x());
1972 EXPECT_EQ(expectedSwapRect.y(), actualSwapRect.y()); 1972 EXPECT_EQ(expectedSwapRect.y(), actualSwapRect.y());
(...skipping 26 matching lines...) Expand all
1999 m_hostImpl->didDrawAllLayers(frame); 1999 m_hostImpl->didDrawAllLayers(frame);
2000 layerTreeHostImpl->swapBuffers(); 2000 layerTreeHostImpl->swapBuffers();
2001 actualSwapRect = partialSwapTracker->partialSwapRect(); 2001 actualSwapRect = partialSwapTracker->partialSwapRect();
2002 expectedSwapRect = IntRect(IntPoint::zero(), IntSize(10, 10)); 2002 expectedSwapRect = IntRect(IntPoint::zero(), IntSize(10, 10));
2003 EXPECT_EQ(expectedSwapRect.x(), actualSwapRect.x()); 2003 EXPECT_EQ(expectedSwapRect.x(), actualSwapRect.x());
2004 EXPECT_EQ(expectedSwapRect.y(), actualSwapRect.y()); 2004 EXPECT_EQ(expectedSwapRect.y(), actualSwapRect.y());
2005 EXPECT_EQ(expectedSwapRect.width(), actualSwapRect.width()); 2005 EXPECT_EQ(expectedSwapRect.width(), actualSwapRect.width());
2006 EXPECT_EQ(expectedSwapRect.height(), actualSwapRect.height()); 2006 EXPECT_EQ(expectedSwapRect.height(), actualSwapRect.height());
2007 } 2007 }
2008 2008
2009 TEST_P(CCLayerTreeHostImplTest, rootLayerDoesntCreateExtraSurface) 2009 TEST_P(LayerTreeHostImplTest, rootLayerDoesntCreateExtraSurface)
2010 { 2010 {
2011 scoped_ptr<CCLayerImpl> root = FakeDrawableCCLayerImpl::create(1); 2011 scoped_ptr<LayerImpl> root = FakeDrawableLayerImpl::create(1);
2012 scoped_ptr<CCLayerImpl> child = FakeDrawableCCLayerImpl::create(2); 2012 scoped_ptr<LayerImpl> child = FakeDrawableLayerImpl::create(2);
2013 child->setAnchorPoint(FloatPoint(0, 0)); 2013 child->setAnchorPoint(FloatPoint(0, 0));
2014 child->setBounds(IntSize(10, 10)); 2014 child->setBounds(IntSize(10, 10));
2015 child->setContentBounds(IntSize(10, 10)); 2015 child->setContentBounds(IntSize(10, 10));
2016 child->setDrawsContent(true); 2016 child->setDrawsContent(true);
2017 root->setAnchorPoint(FloatPoint(0, 0)); 2017 root->setAnchorPoint(FloatPoint(0, 0));
2018 root->setBounds(IntSize(10, 10)); 2018 root->setBounds(IntSize(10, 10));
2019 root->setContentBounds(IntSize(10, 10)); 2019 root->setContentBounds(IntSize(10, 10));
2020 root->setDrawsContent(true); 2020 root->setDrawsContent(true);
2021 root->setOpacity(0.7f); 2021 root->setOpacity(0.7f);
2022 root->addChild(child.Pass()); 2022 root->addChild(child.Pass());
2023 2023
2024 m_hostImpl->setRootLayer(root.Pass()); 2024 m_hostImpl->setRootLayer(root.Pass());
2025 2025
2026 CCLayerTreeHostImpl::FrameData frame; 2026 LayerTreeHostImpl::FrameData frame;
2027 2027
2028 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); 2028 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame));
2029 EXPECT_EQ(1u, frame.renderSurfaceLayerList->size()); 2029 EXPECT_EQ(1u, frame.renderSurfaceLayerList->size());
2030 EXPECT_EQ(1u, frame.renderPasses.size()); 2030 EXPECT_EQ(1u, frame.renderPasses.size());
2031 m_hostImpl->didDrawAllLayers(frame); 2031 m_hostImpl->didDrawAllLayers(frame);
2032 } 2032 }
2033 2033
2034 } // namespace 2034 } // namespace
2035 2035
2036 class FakeLayerWithQuads : public CCLayerImpl { 2036 class FakeLayerWithQuads : public LayerImpl {
2037 public: 2037 public:
2038 static scoped_ptr<CCLayerImpl> create(int id) { return scoped_ptr<CCLayerImp l>(new FakeLayerWithQuads(id)); } 2038 static scoped_ptr<LayerImpl> create(int id) { return scoped_ptr<LayerImpl>(n ew FakeLayerWithQuads(id)); }
2039 2039
2040 virtual void appendQuads(CCQuadSink& quadSink, CCAppendQuadsData& appendQuad sData) OVERRIDE 2040 virtual void appendQuads(QuadSink& quadSink, AppendQuadsData& appendQuadsDat a) OVERRIDE
2041 { 2041 {
2042 CCSharedQuadState* sharedQuadState = quadSink.useSharedQuadState(createS haredQuadState()); 2042 SharedQuadState* sharedQuadState = quadSink.useSharedQuadState(createSha redQuadState());
2043 2043
2044 SkColor gray = SkColorSetRGB(100, 100, 100); 2044 SkColor gray = SkColorSetRGB(100, 100, 100);
2045 IntRect quadRect(IntPoint(0, 0), contentBounds()); 2045 IntRect quadRect(IntPoint(0, 0), contentBounds());
2046 scoped_ptr<CCSolidColorDrawQuad> myQuad = CCSolidColorDrawQuad::create(s haredQuadState, quadRect, gray); 2046 scoped_ptr<SolidColorDrawQuad> myQuad = SolidColorDrawQuad::create(share dQuadState, quadRect, gray);
2047 quadSink.append(myQuad.PassAs<CCDrawQuad>(), appendQuadsData); 2047 quadSink.append(myQuad.PassAs<DrawQuad>(), appendQuadsData);
2048 } 2048 }
2049 2049
2050 private: 2050 private:
2051 FakeLayerWithQuads(int id) 2051 FakeLayerWithQuads(int id)
2052 : CCLayerImpl(id) 2052 : LayerImpl(id)
2053 { 2053 {
2054 } 2054 }
2055 }; 2055 };
2056 2056
2057 namespace { 2057 namespace {
2058 2058
2059 class MockContext : public FakeWebGraphicsContext3D { 2059 class MockContext : public FakeWebGraphicsContext3D {
2060 public: 2060 public:
2061 MOCK_METHOD1(useProgram, void(WebGLId program)); 2061 MOCK_METHOD1(useProgram, void(WebGLId program));
2062 MOCK_METHOD5(uniform4f, void(WGC3Dint location, WGC3Dfloat x, WGC3Dfloat y, WGC3Dfloat z, WGC3Dfloat w)); 2062 MOCK_METHOD5(uniform4f, void(WGC3Dint location, WGC3Dfloat x, WGC3Dfloat y, WGC3Dfloat z, WGC3Dfloat w));
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
2139 .WillRepeatedly(Return()); 2139 .WillRepeatedly(Return());
2140 2140
2141 EXPECT_CALL(*m_context, enable(GraphicsContext3D::SCISSOR_TEST)) 2141 EXPECT_CALL(*m_context, enable(GraphicsContext3D::SCISSOR_TEST))
2142 .Times(0); 2142 .Times(0);
2143 2143
2144 EXPECT_CALL(*m_context, scissor(_, _, _, _)) 2144 EXPECT_CALL(*m_context, scissor(_, _, _, _))
2145 .Times(0); 2145 .Times(0);
2146 } 2146 }
2147 }; 2147 };
2148 2148
2149 TEST_P(CCLayerTreeHostImplTest, noPartialSwap) 2149 TEST_P(LayerTreeHostImplTest, noPartialSwap)
2150 { 2150 {
2151 scoped_ptr<CCGraphicsContext> context = FakeWebCompositorOutputSurface::crea te(scoped_ptr<WebGraphicsContext3D>(new MockContext)).PassAs<CCGraphicsContext>( ); 2151 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create (scoped_ptr<WebGraphicsContext3D>(new MockContext)).PassAs<GraphicsContext>();
2152 MockContext* mockContext = static_cast<MockContext*>(context->context3D()); 2152 MockContext* mockContext = static_cast<MockContext*>(context->context3D());
2153 MockContextHarness harness(mockContext); 2153 MockContextHarness harness(mockContext);
2154 2154
2155 harness.mustDrawSolidQuad(); 2155 harness.mustDrawSolidQuad();
2156 harness.mustSetScissor(0, 0, 10, 10); 2156 harness.mustSetScissor(0, 0, 10, 10);
2157 2157
2158 // Run test case 2158 // Run test case
2159 scoped_ptr<CCLayerTreeHostImpl> myHostImpl = createLayerTreeHost(false, cont ext.Pass(), FakeLayerWithQuads::create(1)); 2159 scoped_ptr<LayerTreeHostImpl> myHostImpl = createLayerTreeHost(false, contex t.Pass(), FakeLayerWithQuads::create(1));
2160 2160
2161 CCLayerTreeHostImpl::FrameData frame; 2161 LayerTreeHostImpl::FrameData frame;
2162 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 2162 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
2163 myHostImpl->drawLayers(frame); 2163 myHostImpl->drawLayers(frame);
2164 myHostImpl->didDrawAllLayers(frame); 2164 myHostImpl->didDrawAllLayers(frame);
2165 Mock::VerifyAndClearExpectations(&mockContext); 2165 Mock::VerifyAndClearExpectations(&mockContext);
2166 } 2166 }
2167 2167
2168 TEST_P(CCLayerTreeHostImplTest, partialSwap) 2168 TEST_P(LayerTreeHostImplTest, partialSwap)
2169 { 2169 {
2170 scoped_ptr<CCGraphicsContext> context = FakeWebCompositorOutputSurface::crea te(scoped_ptr<WebKit::WebGraphicsContext3D>(new MockContext)).PassAs<CCGraphicsC ontext>(); 2170 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create (scoped_ptr<WebKit::WebGraphicsContext3D>(new MockContext)).PassAs<GraphicsConte xt>();
2171 MockContext* mockContext = static_cast<MockContext*>(context->context3D()); 2171 MockContext* mockContext = static_cast<MockContext*>(context->context3D());
2172 MockContextHarness harness(mockContext); 2172 MockContextHarness harness(mockContext);
2173 2173
2174 scoped_ptr<CCLayerTreeHostImpl> myHostImpl = createLayerTreeHost(true, conte xt.Pass(), FakeLayerWithQuads::create(1)); 2174 scoped_ptr<LayerTreeHostImpl> myHostImpl = createLayerTreeHost(true, context .Pass(), FakeLayerWithQuads::create(1));
2175 2175
2176 // The first frame is not a partially-swapped one. 2176 // The first frame is not a partially-swapped one.
2177 harness.mustSetScissor(0, 0, 10, 10); 2177 harness.mustSetScissor(0, 0, 10, 10);
2178 harness.mustDrawSolidQuad(); 2178 harness.mustDrawSolidQuad();
2179 { 2179 {
2180 CCLayerTreeHostImpl::FrameData frame; 2180 LayerTreeHostImpl::FrameData frame;
2181 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 2181 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
2182 myHostImpl->drawLayers(frame); 2182 myHostImpl->drawLayers(frame);
2183 myHostImpl->didDrawAllLayers(frame); 2183 myHostImpl->didDrawAllLayers(frame);
2184 } 2184 }
2185 Mock::VerifyAndClearExpectations(&mockContext); 2185 Mock::VerifyAndClearExpectations(&mockContext);
2186 2186
2187 // Damage a portion of the frame. 2187 // Damage a portion of the frame.
2188 myHostImpl->rootLayer()->setUpdateRect(IntRect(0, 0, 2, 3)); 2188 myHostImpl->rootLayer()->setUpdateRect(IntRect(0, 0, 2, 3));
2189 2189
2190 // The second frame will be partially-swapped (the y coordinates are flipped ). 2190 // The second frame will be partially-swapped (the y coordinates are flipped ).
2191 harness.mustSetScissor(0, 7, 2, 3); 2191 harness.mustSetScissor(0, 7, 2, 3);
2192 harness.mustDrawSolidQuad(); 2192 harness.mustDrawSolidQuad();
2193 { 2193 {
2194 CCLayerTreeHostImpl::FrameData frame; 2194 LayerTreeHostImpl::FrameData frame;
2195 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 2195 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
2196 myHostImpl->drawLayers(frame); 2196 myHostImpl->drawLayers(frame);
2197 myHostImpl->didDrawAllLayers(frame); 2197 myHostImpl->didDrawAllLayers(frame);
2198 } 2198 }
2199 Mock::VerifyAndClearExpectations(&mockContext); 2199 Mock::VerifyAndClearExpectations(&mockContext);
2200 } 2200 }
2201 2201
2202 class PartialSwapContext : public FakeWebGraphicsContext3D { 2202 class PartialSwapContext : public FakeWebGraphicsContext3D {
2203 public: 2203 public:
2204 WebString getString(WGC3Denum name) 2204 WebString getString(WGC3Denum name)
2205 { 2205 {
2206 if (name == GraphicsContext3D::EXTENSIONS) 2206 if (name == GraphicsContext3D::EXTENSIONS)
2207 return WebString("GL_CHROMIUM_post_sub_buffer"); 2207 return WebString("GL_CHROMIUM_post_sub_buffer");
2208 return WebString(); 2208 return WebString();
2209 } 2209 }
2210 2210
2211 WebString getRequestableExtensionsCHROMIUM() 2211 WebString getRequestableExtensionsCHROMIUM()
2212 { 2212 {
2213 return WebString("GL_CHROMIUM_post_sub_buffer"); 2213 return WebString("GL_CHROMIUM_post_sub_buffer");
2214 } 2214 }
2215 2215
2216 // Unlimited texture size. 2216 // Unlimited texture size.
2217 virtual void getIntegerv(WGC3Denum pname, WGC3Dint* value) 2217 virtual void getIntegerv(WGC3Denum pname, WGC3Dint* value)
2218 { 2218 {
2219 if (pname == cc::GraphicsContext3D::MAX_TEXTURE_SIZE) 2219 if (pname == cc::GraphicsContext3D::MAX_TEXTURE_SIZE)
2220 *value = 8192; 2220 *value = 8192;
2221 } 2221 }
2222 }; 2222 };
2223 2223
2224 static scoped_ptr<CCLayerTreeHostImpl> setupLayersForOpacity(bool partialSwap, C CLayerTreeHostImplClient* client) 2224 static scoped_ptr<LayerTreeHostImpl> setupLayersForOpacity(bool partialSwap, Lay erTreeHostImplClient* client)
2225 { 2225 {
2226 CCSettings::setPartialSwapEnabled(partialSwap); 2226 Settings::setPartialSwapEnabled(partialSwap);
2227 2227
2228 scoped_ptr<CCGraphicsContext> context = FakeWebCompositorOutputSurface::crea te(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<CCGr aphicsContext>(); 2228 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create (scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi csContext>();
2229 2229
2230 CCLayerTreeSettings settings; 2230 LayerTreeSettings settings;
2231 scoped_ptr<CCLayerTreeHostImpl> myHostImpl = CCLayerTreeHostImpl::create(set tings, client); 2231 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting s, client);
2232 myHostImpl->initializeRenderer(context.Pass()); 2232 myHostImpl->initializeRenderer(context.Pass());
2233 myHostImpl->setViewportSize(IntSize(100, 100), IntSize(100, 100)); 2233 myHostImpl->setViewportSize(IntSize(100, 100), IntSize(100, 100));
2234 2234
2235 /* 2235 /*
2236 Layers are created as follows: 2236 Layers are created as follows:
2237 2237
2238 +--------------------+ 2238 +--------------------+
2239 | 1 | 2239 | 1 |
2240 | +-----------+ | 2240 | +-----------+ |
2241 | | 2 | | 2241 | | 2 | |
2242 | | +-------------------+ 2242 | | +-------------------+
2243 | | | 3 | 2243 | | | 3 |
2244 | | +-------------------+ 2244 | | +-------------------+
2245 | | | | 2245 | | | |
2246 | +-----------+ | 2246 | +-----------+ |
2247 | | 2247 | |
2248 | | 2248 | |
2249 +--------------------+ 2249 +--------------------+
2250 2250
2251 Layers 1, 2 have render surfaces 2251 Layers 1, 2 have render surfaces
2252 */ 2252 */
2253 scoped_ptr<CCLayerImpl> root = CCLayerImpl::create(1); 2253 scoped_ptr<LayerImpl> root = LayerImpl::create(1);
2254 scoped_ptr<CCLayerImpl> child = CCLayerImpl::create(2); 2254 scoped_ptr<LayerImpl> child = LayerImpl::create(2);
2255 scoped_ptr<CCLayerImpl> grandChild = FakeLayerWithQuads::create(3); 2255 scoped_ptr<LayerImpl> grandChild = FakeLayerWithQuads::create(3);
2256 2256
2257 IntRect rootRect(0, 0, 100, 100); 2257 IntRect rootRect(0, 0, 100, 100);
2258 IntRect childRect(10, 10, 50, 50); 2258 IntRect childRect(10, 10, 50, 50);
2259 IntRect grandChildRect(5, 5, 150, 150); 2259 IntRect grandChildRect(5, 5, 150, 150);
2260 2260
2261 root->createRenderSurface(); 2261 root->createRenderSurface();
2262 root->setAnchorPoint(FloatPoint(0, 0)); 2262 root->setAnchorPoint(FloatPoint(0, 0));
2263 root->setPosition(FloatPoint(rootRect.x(), rootRect.y())); 2263 root->setPosition(FloatPoint(rootRect.x(), rootRect.y()));
2264 root->setBounds(IntSize(rootRect.width(), rootRect.height())); 2264 root->setBounds(IntSize(rootRect.width(), rootRect.height()));
2265 root->setContentBounds(root->bounds()); 2265 root->setContentBounds(root->bounds());
(...skipping 16 matching lines...) Expand all
2282 grandChild->setVisibleContentRect(grandChildRect); 2282 grandChild->setVisibleContentRect(grandChildRect);
2283 grandChild->setDrawsContent(true); 2283 grandChild->setDrawsContent(true);
2284 2284
2285 child->addChild(grandChild.Pass()); 2285 child->addChild(grandChild.Pass());
2286 root->addChild(child.Pass()); 2286 root->addChild(child.Pass());
2287 2287
2288 myHostImpl->setRootLayer(root.Pass()); 2288 myHostImpl->setRootLayer(root.Pass());
2289 return myHostImpl.Pass(); 2289 return myHostImpl.Pass();
2290 } 2290 }
2291 2291
2292 TEST_P(CCLayerTreeHostImplTest, contributingLayerEmptyScissorPartialSwap) 2292 TEST_P(LayerTreeHostImplTest, contributingLayerEmptyScissorPartialSwap)
2293 { 2293 {
2294 scoped_ptr<CCLayerTreeHostImpl> myHostImpl = setupLayersForOpacity(true, thi s); 2294 scoped_ptr<LayerTreeHostImpl> myHostImpl = setupLayersForOpacity(true, this) ;
2295 2295
2296 { 2296 {
2297 CCLayerTreeHostImpl::FrameData frame; 2297 LayerTreeHostImpl::FrameData frame;
2298 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 2298 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
2299 2299
2300 // Just for consistency, the most interesting stuff already happened 2300 // Just for consistency, the most interesting stuff already happened
2301 myHostImpl->drawLayers(frame); 2301 myHostImpl->drawLayers(frame);
2302 myHostImpl->didDrawAllLayers(frame); 2302 myHostImpl->didDrawAllLayers(frame);
2303 2303
2304 // Verify all quads have been computed 2304 // Verify all quads have been computed
2305 ASSERT_EQ(2U, frame.renderPasses.size()); 2305 ASSERT_EQ(2U, frame.renderPasses.size());
2306 ASSERT_EQ(1U, frame.renderPasses[0]->quadList().size()); 2306 ASSERT_EQ(1U, frame.renderPasses[0]->quadList().size());
2307 ASSERT_EQ(1U, frame.renderPasses[1]->quadList().size()); 2307 ASSERT_EQ(1U, frame.renderPasses[1]->quadList().size());
2308 EXPECT_EQ(CCDrawQuad::SolidColor, frame.renderPasses[0]->quadList()[0]-> material()); 2308 EXPECT_EQ(DrawQuad::SolidColor, frame.renderPasses[0]->quadList()[0]->ma terial());
2309 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]-> material()); 2309 EXPECT_EQ(DrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->ma terial());
2310 } 2310 }
2311 } 2311 }
2312 2312
2313 TEST_P(CCLayerTreeHostImplTest, contributingLayerEmptyScissorNoPartialSwap) 2313 TEST_P(LayerTreeHostImplTest, contributingLayerEmptyScissorNoPartialSwap)
2314 { 2314 {
2315 scoped_ptr<CCLayerTreeHostImpl> myHostImpl = setupLayersForOpacity(false, th is); 2315 scoped_ptr<LayerTreeHostImpl> myHostImpl = setupLayersForOpacity(false, this );
2316 2316
2317 { 2317 {
2318 CCLayerTreeHostImpl::FrameData frame; 2318 LayerTreeHostImpl::FrameData frame;
2319 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 2319 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
2320 2320
2321 // Just for consistency, the most interesting stuff already happened 2321 // Just for consistency, the most interesting stuff already happened
2322 myHostImpl->drawLayers(frame); 2322 myHostImpl->drawLayers(frame);
2323 myHostImpl->didDrawAllLayers(frame); 2323 myHostImpl->didDrawAllLayers(frame);
2324 2324
2325 // Verify all quads have been computed 2325 // Verify all quads have been computed
2326 ASSERT_EQ(2U, frame.renderPasses.size()); 2326 ASSERT_EQ(2U, frame.renderPasses.size());
2327 ASSERT_EQ(1U, frame.renderPasses[0]->quadList().size()); 2327 ASSERT_EQ(1U, frame.renderPasses[0]->quadList().size());
2328 ASSERT_EQ(1U, frame.renderPasses[1]->quadList().size()); 2328 ASSERT_EQ(1U, frame.renderPasses[1]->quadList().size());
2329 EXPECT_EQ(CCDrawQuad::SolidColor, frame.renderPasses[0]->quadList()[0]-> material()); 2329 EXPECT_EQ(DrawQuad::SolidColor, frame.renderPasses[0]->quadList()[0]->ma terial());
2330 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]-> material()); 2330 EXPECT_EQ(DrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->ma terial());
2331 } 2331 }
2332 } 2332 }
2333 2333
2334 // Make sure that context lost notifications are propagated through the tree. 2334 // Make sure that context lost notifications are propagated through the tree.
2335 class ContextLostNotificationCheckLayer : public CCLayerImpl { 2335 class ContextLostNotificationCheckLayer : public LayerImpl {
2336 public: 2336 public:
2337 static scoped_ptr<CCLayerImpl> create(int id) { return scoped_ptr<CCLayerImp l>(new ContextLostNotificationCheckLayer(id)); } 2337 static scoped_ptr<LayerImpl> create(int id) { return scoped_ptr<LayerImpl>(n ew ContextLostNotificationCheckLayer(id)); }
2338 2338
2339 virtual void didLoseContext() OVERRIDE 2339 virtual void didLoseContext() OVERRIDE
2340 { 2340 {
2341 m_didLoseContextCalled = true; 2341 m_didLoseContextCalled = true;
2342 } 2342 }
2343 2343
2344 bool didLoseContextCalled() const { return m_didLoseContextCalled; } 2344 bool didLoseContextCalled() const { return m_didLoseContextCalled; }
2345 2345
2346 private: 2346 private:
2347 explicit ContextLostNotificationCheckLayer(int id) 2347 explicit ContextLostNotificationCheckLayer(int id)
2348 : CCLayerImpl(id) 2348 : LayerImpl(id)
2349 , m_didLoseContextCalled(false) 2349 , m_didLoseContextCalled(false)
2350 { 2350 {
2351 } 2351 }
2352 2352
2353 bool m_didLoseContextCalled; 2353 bool m_didLoseContextCalled;
2354 }; 2354 };
2355 2355
2356 TEST_P(CCLayerTreeHostImplTest, contextLostAndRestoredNotificationSentToAllLayer s) 2356 TEST_P(LayerTreeHostImplTest, contextLostAndRestoredNotificationSentToAllLayers)
2357 { 2357 {
2358 m_hostImpl->setRootLayer(ContextLostNotificationCheckLayer::create(1)); 2358 m_hostImpl->setRootLayer(ContextLostNotificationCheckLayer::create(1));
2359 ContextLostNotificationCheckLayer* root = static_cast<ContextLostNotificatio nCheckLayer*>(m_hostImpl->rootLayer()); 2359 ContextLostNotificationCheckLayer* root = static_cast<ContextLostNotificatio nCheckLayer*>(m_hostImpl->rootLayer());
2360 2360
2361 root->addChild(ContextLostNotificationCheckLayer::create(1)); 2361 root->addChild(ContextLostNotificationCheckLayer::create(1));
2362 ContextLostNotificationCheckLayer* layer1 = static_cast<ContextLostNotificat ionCheckLayer*>(root->children()[0]); 2362 ContextLostNotificationCheckLayer* layer1 = static_cast<ContextLostNotificat ionCheckLayer*>(root->children()[0]);
2363 2363
2364 layer1->addChild(ContextLostNotificationCheckLayer::create(2)); 2364 layer1->addChild(ContextLostNotificationCheckLayer::create(2));
2365 ContextLostNotificationCheckLayer* layer2 = static_cast<ContextLostNotificat ionCheckLayer*>(layer1->children()[0]); 2365 ContextLostNotificationCheckLayer* layer2 = static_cast<ContextLostNotificat ionCheckLayer*>(layer1->children()[0]);
2366 2366
2367 EXPECT_FALSE(root->didLoseContextCalled()); 2367 EXPECT_FALSE(root->didLoseContextCalled());
2368 EXPECT_FALSE(layer1->didLoseContextCalled()); 2368 EXPECT_FALSE(layer1->didLoseContextCalled());
2369 EXPECT_FALSE(layer2->didLoseContextCalled()); 2369 EXPECT_FALSE(layer2->didLoseContextCalled());
2370 2370
2371 m_hostImpl->initializeRenderer(createContext()); 2371 m_hostImpl->initializeRenderer(createContext());
2372 2372
2373 EXPECT_TRUE(root->didLoseContextCalled()); 2373 EXPECT_TRUE(root->didLoseContextCalled());
2374 EXPECT_TRUE(layer1->didLoseContextCalled()); 2374 EXPECT_TRUE(layer1->didLoseContextCalled());
2375 EXPECT_TRUE(layer2->didLoseContextCalled()); 2375 EXPECT_TRUE(layer2->didLoseContextCalled());
2376 } 2376 }
2377 2377
2378 TEST_P(CCLayerTreeHostImplTest, finishAllRenderingAfterContextLost) 2378 TEST_P(LayerTreeHostImplTest, finishAllRenderingAfterContextLost)
2379 { 2379 {
2380 CCLayerTreeSettings settings; 2380 LayerTreeSettings settings;
2381 m_hostImpl = CCLayerTreeHostImpl::create(settings, this); 2381 m_hostImpl = LayerTreeHostImpl::create(settings, this);
2382 2382
2383 // The context initialization will fail, but we should still be able to call finishAllRendering() without any ill effects. 2383 // The context initialization will fail, but we should still be able to call finishAllRendering() without any ill effects.
2384 m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurface::create(scoped _ptr<WebKit::WebGraphicsContext3D>(new FakeWebGraphicsContext3DMakeCurrentFails) ).PassAs<CCGraphicsContext>()); 2384 m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurface::create(scoped _ptr<WebKit::WebGraphicsContext3D>(new FakeWebGraphicsContext3DMakeCurrentFails) ).PassAs<GraphicsContext>());
2385 m_hostImpl->finishAllRendering(); 2385 m_hostImpl->finishAllRendering();
2386 } 2386 }
2387 2387
2388 class FakeWebGraphicsContext3DMakeCurrentFailsEventually : public FakeWebGraphic sContext3D { 2388 class FakeWebGraphicsContext3DMakeCurrentFailsEventually : public FakeWebGraphic sContext3D {
2389 public: 2389 public:
2390 explicit FakeWebGraphicsContext3DMakeCurrentFailsEventually(unsigned succeed Count) : m_succeedCount(succeedCount) { } 2390 explicit FakeWebGraphicsContext3DMakeCurrentFailsEventually(unsigned succeed Count) : m_succeedCount(succeedCount) { }
2391 virtual bool makeContextCurrent() { 2391 virtual bool makeContextCurrent() {
2392 if (!m_succeedCount) 2392 if (!m_succeedCount)
2393 return false; 2393 return false;
2394 --m_succeedCount; 2394 --m_succeedCount;
2395 return true; 2395 return true;
2396 } 2396 }
2397 2397
2398 private: 2398 private:
2399 unsigned m_succeedCount; 2399 unsigned m_succeedCount;
2400 }; 2400 };
2401 2401
2402 TEST_P(CCLayerTreeHostImplTest, contextLostDuringInitialize) 2402 TEST_P(LayerTreeHostImplTest, contextLostDuringInitialize)
2403 { 2403 {
2404 CCLayerTreeSettings settings; 2404 LayerTreeSettings settings;
2405 m_hostImpl = CCLayerTreeHostImpl::create(settings, this); 2405 m_hostImpl = LayerTreeHostImpl::create(settings, this);
2406 2406
2407 // Initialize into a known successful state. 2407 // Initialize into a known successful state.
2408 EXPECT_TRUE(m_hostImpl->initializeRenderer(createContext())); 2408 EXPECT_TRUE(m_hostImpl->initializeRenderer(createContext()));
2409 EXPECT_TRUE(m_hostImpl->context()); 2409 EXPECT_TRUE(m_hostImpl->context());
2410 EXPECT_TRUE(m_hostImpl->renderer()); 2410 EXPECT_TRUE(m_hostImpl->renderer());
2411 EXPECT_TRUE(m_hostImpl->resourceProvider()); 2411 EXPECT_TRUE(m_hostImpl->resourceProvider());
2412 2412
2413 // We will make the context get lost after a numer of makeContextCurrent 2413 // We will make the context get lost after a numer of makeContextCurrent
2414 // calls. The exact number of calls to make it succeed is dependent on the 2414 // calls. The exact number of calls to make it succeed is dependent on the
2415 // implementation and doesn't really matter (i.e. can be changed to make the 2415 // implementation and doesn't really matter (i.e. can be changed to make the
2416 // tests pass after some refactoring). 2416 // tests pass after some refactoring).
2417 const unsigned kMakeCurrentSuccessesNeededForSuccessfulInitialization = 3; 2417 const unsigned kMakeCurrentSuccessesNeededForSuccessfulInitialization = 3;
2418 2418
2419 for (unsigned i = 0; i < kMakeCurrentSuccessesNeededForSuccessfulInitializat ion; ++i) { 2419 for (unsigned i = 0; i < kMakeCurrentSuccessesNeededForSuccessfulInitializat ion; ++i) {
2420 // The context will get lost during initialization, we shouldn't crash. We 2420 // The context will get lost during initialization, we shouldn't crash. We
2421 // should also be in a consistent state. 2421 // should also be in a consistent state.
2422 EXPECT_FALSE(m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurfa ce::create(scoped_ptr<WebKit::WebGraphicsContext3D>(new FakeWebGraphicsContext3D MakeCurrentFailsEventually(i))).PassAs<CCGraphicsContext>())); 2422 EXPECT_FALSE(m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurfa ce::create(scoped_ptr<WebKit::WebGraphicsContext3D>(new FakeWebGraphicsContext3D MakeCurrentFailsEventually(i))).PassAs<GraphicsContext>()));
2423 EXPECT_EQ(0, m_hostImpl->context()); 2423 EXPECT_EQ(0, m_hostImpl->context());
2424 EXPECT_EQ(0, m_hostImpl->renderer()); 2424 EXPECT_EQ(0, m_hostImpl->renderer());
2425 EXPECT_EQ(0, m_hostImpl->resourceProvider()); 2425 EXPECT_EQ(0, m_hostImpl->resourceProvider());
2426 EXPECT_TRUE(m_hostImpl->initializeRenderer(createContext())); 2426 EXPECT_TRUE(m_hostImpl->initializeRenderer(createContext()));
2427 } 2427 }
2428 2428
2429 EXPECT_TRUE(m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurface::c reate(scoped_ptr<WebKit::WebGraphicsContext3D>(new FakeWebGraphicsContext3DMakeC urrentFailsEventually(kMakeCurrentSuccessesNeededForSuccessfulInitialization))). PassAs<CCGraphicsContext>())); 2429 EXPECT_TRUE(m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurface::c reate(scoped_ptr<WebKit::WebGraphicsContext3D>(new FakeWebGraphicsContext3DMakeC urrentFailsEventually(kMakeCurrentSuccessesNeededForSuccessfulInitialization))). PassAs<GraphicsContext>()));
2430 EXPECT_TRUE(m_hostImpl->context()); 2430 EXPECT_TRUE(m_hostImpl->context());
2431 EXPECT_TRUE(m_hostImpl->renderer()); 2431 EXPECT_TRUE(m_hostImpl->renderer());
2432 EXPECT_TRUE(m_hostImpl->resourceProvider()); 2432 EXPECT_TRUE(m_hostImpl->resourceProvider());
2433 } 2433 }
2434 2434
2435 // Fake WebGraphicsContext3D that will cause a failure if trying to use a 2435 // Fake WebGraphicsContext3D that will cause a failure if trying to use a
2436 // resource that wasn't created by it (resources created by 2436 // resource that wasn't created by it (resources created by
2437 // FakeWebGraphicsContext3D have an id of 1). 2437 // FakeWebGraphicsContext3D have an id of 1).
2438 class StrictWebGraphicsContext3D : public FakeWebGraphicsContext3D { 2438 class StrictWebGraphicsContext3D : public FakeWebGraphicsContext3D {
2439 public: 2439 public:
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
2600 virtual WebRect trackRect(WebScrollbar*) OVERRIDE { return WebRect(0, 0, 10, 10); } 2600 virtual WebRect trackRect(WebScrollbar*) OVERRIDE { return WebRect(0, 0, 10, 10); }
2601 virtual WebRect thumbRect(WebScrollbar*) OVERRIDE { return WebRect(0, 5, 5, 2); } 2601 virtual WebRect thumbRect(WebScrollbar*) OVERRIDE { return WebRect(0, 5, 5, 2); }
2602 virtual void splitTrack(WebScrollbar*, const WebRect& track, WebRect& startT rack, WebRect& thumb, WebRect& endTrack) OVERRIDE 2602 virtual void splitTrack(WebScrollbar*, const WebRect& track, WebRect& startT rack, WebRect& thumb, WebRect& endTrack) OVERRIDE
2603 { 2603 {
2604 thumb = WebRect(0, 5, 5, 2); 2604 thumb = WebRect(0, 5, 5, 2);
2605 startTrack = WebRect(0, 5, 0, 5); 2605 startTrack = WebRect(0, 5, 0, 5);
2606 endTrack = WebRect(0, 0, 0, 5); 2606 endTrack = WebRect(0, 0, 0, 5);
2607 } 2607 }
2608 }; 2608 };
2609 2609
2610 class FakeScrollbarLayerImpl : public CCScrollbarLayerImpl { 2610 class FakeScrollbarLayerImpl : public ScrollbarLayerImpl {
2611 public: 2611 public:
2612 static scoped_ptr<FakeScrollbarLayerImpl> create(int id) 2612 static scoped_ptr<FakeScrollbarLayerImpl> create(int id)
2613 { 2613 {
2614 return make_scoped_ptr(new FakeScrollbarLayerImpl(id)); 2614 return make_scoped_ptr(new FakeScrollbarLayerImpl(id));
2615 } 2615 }
2616 2616
2617 void createResources(CCResourceProvider* provider) 2617 void createResources(ResourceProvider* provider)
2618 { 2618 {
2619 ASSERT(provider); 2619 ASSERT(provider);
2620 int pool = 0; 2620 int pool = 0;
2621 IntSize size(10, 10); 2621 IntSize size(10, 10);
2622 GC3Denum format = GraphicsContext3D::RGBA; 2622 GC3Denum format = GraphicsContext3D::RGBA;
2623 CCResourceProvider::TextureUsageHint hint = CCResourceProvider::TextureU sageAny; 2623 ResourceProvider::TextureUsageHint hint = ResourceProvider::TextureUsage Any;
2624 setScrollbarGeometry(CCScrollbarGeometryFixedThumb::create(FakeWebScroll barThemeGeometryNonEmpty::create())); 2624 setScrollbarGeometry(ScrollbarGeometryFixedThumb::create(FakeWebScrollba rThemeGeometryNonEmpty::create()));
2625 2625
2626 setBackTrackResourceId(provider->createResource(pool, size, format, hint )); 2626 setBackTrackResourceId(provider->createResource(pool, size, format, hint ));
2627 setForeTrackResourceId(provider->createResource(pool, size, format, hint )); 2627 setForeTrackResourceId(provider->createResource(pool, size, format, hint ));
2628 setThumbResourceId(provider->createResource(pool, size, format, hint)); 2628 setThumbResourceId(provider->createResource(pool, size, format, hint));
2629 } 2629 }
2630 2630
2631 protected: 2631 protected:
2632 explicit FakeScrollbarLayerImpl(int id) 2632 explicit FakeScrollbarLayerImpl(int id)
2633 : CCScrollbarLayerImpl(id) 2633 : ScrollbarLayerImpl(id)
2634 { 2634 {
2635 } 2635 }
2636 }; 2636 };
2637 2637
2638 static inline scoped_ptr<CCRenderPass> createRenderPassWithResource(CCResourcePr ovider* provider) 2638 static inline scoped_ptr<RenderPass> createRenderPassWithResource(ResourceProvid er* provider)
2639 { 2639 {
2640 CCResourceProvider::ResourceId resourceId = provider->createResource(0, IntS ize(1, 1), GraphicsContext3D::RGBA, CCResourceProvider::TextureUsageAny); 2640 ResourceProvider::ResourceId resourceId = provider->createResource(0, IntSiz e(1, 1), GraphicsContext3D::RGBA, ResourceProvider::TextureUsageAny);
2641 2641
2642 scoped_ptr<CCRenderPass> pass = CCRenderPass::create(CCRenderPass::Id(1, 1), IntRect(0, 0, 1, 1), WebTransformationMatrix()); 2642 scoped_ptr<RenderPass> pass = RenderPass::create(RenderPass::Id(1, 1), IntRe ct(0, 0, 1, 1), WebTransformationMatrix());
2643 scoped_ptr<CCSharedQuadState> sharedState = CCSharedQuadState::create(WebTra nsformationMatrix(), IntRect(0, 0, 1, 1), IntRect(0, 0, 1, 1), 1, false); 2643 scoped_ptr<SharedQuadState> sharedState = SharedQuadState::create(WebTransfo rmationMatrix(), IntRect(0, 0, 1, 1), IntRect(0, 0, 1, 1), 1, false);
2644 scoped_ptr<CCTextureDrawQuad> quad = CCTextureDrawQuad::create(sharedState.g et(), IntRect(0, 0, 1, 1), resourceId, false, FloatRect(0, 0, 1, 1), false); 2644 scoped_ptr<TextureDrawQuad> quad = TextureDrawQuad::create(sharedState.get() , IntRect(0, 0, 1, 1), resourceId, false, FloatRect(0, 0, 1, 1), false);
2645 2645
2646 static_cast<CCTestRenderPass*>(pass.get())->appendSharedQuadState(sharedStat e.Pass()); 2646 static_cast<TestRenderPass*>(pass.get())->appendSharedQuadState(sharedState. Pass());
2647 static_cast<CCTestRenderPass*>(pass.get())->appendQuad(quad.PassAs<CCDrawQua d>()); 2647 static_cast<TestRenderPass*>(pass.get())->appendQuad(quad.PassAs<DrawQuad>() );
2648 2648
2649 return pass.Pass(); 2649 return pass.Pass();
2650 } 2650 }
2651 2651
2652 TEST_P(CCLayerTreeHostImplTest, dontUseOldResourcesAfterLostContext) 2652 TEST_P(LayerTreeHostImplTest, dontUseOldResourcesAfterLostContext)
2653 { 2653 {
2654 int layerId = 1; 2654 int layerId = 1;
2655 2655
2656 scoped_ptr<CCLayerImpl> rootLayer(CCLayerImpl::create(layerId++)); 2656 scoped_ptr<LayerImpl> rootLayer(LayerImpl::create(layerId++));
2657 rootLayer->setBounds(IntSize(10, 10)); 2657 rootLayer->setBounds(IntSize(10, 10));
2658 rootLayer->setAnchorPoint(FloatPoint(0, 0)); 2658 rootLayer->setAnchorPoint(FloatPoint(0, 0));
2659 2659
2660 scoped_ptr<CCTiledLayerImpl> tileLayer = CCTiledLayerImpl::create(layerId++) ; 2660 scoped_ptr<TiledLayerImpl> tileLayer = TiledLayerImpl::create(layerId++);
2661 tileLayer->setBounds(IntSize(10, 10)); 2661 tileLayer->setBounds(IntSize(10, 10));
2662 tileLayer->setAnchorPoint(FloatPoint(0, 0)); 2662 tileLayer->setAnchorPoint(FloatPoint(0, 0));
2663 tileLayer->setContentBounds(IntSize(10, 10)); 2663 tileLayer->setContentBounds(IntSize(10, 10));
2664 tileLayer->setDrawsContent(true); 2664 tileLayer->setDrawsContent(true);
2665 tileLayer->setSkipsDraw(false); 2665 tileLayer->setSkipsDraw(false);
2666 scoped_ptr<CCLayerTilingData> tilingData(CCLayerTilingData::create(IntSize(1 0, 10), CCLayerTilingData::NoBorderTexels)); 2666 scoped_ptr<LayerTilingData> tilingData(LayerTilingData::create(IntSize(10, 1 0), LayerTilingData::NoBorderTexels));
2667 tilingData->setBounds(IntSize(10, 10)); 2667 tilingData->setBounds(IntSize(10, 10));
2668 tileLayer->setTilingData(*tilingData); 2668 tileLayer->setTilingData(*tilingData);
2669 tileLayer->pushTileProperties(0, 0, 1, IntRect(0, 0, 10, 10)); 2669 tileLayer->pushTileProperties(0, 0, 1, IntRect(0, 0, 10, 10));
2670 rootLayer->addChild(tileLayer.PassAs<CCLayerImpl>()); 2670 rootLayer->addChild(tileLayer.PassAs<LayerImpl>());
2671 2671
2672 scoped_ptr<CCTextureLayerImpl> textureLayer = CCTextureLayerImpl::create(lay erId++); 2672 scoped_ptr<TextureLayerImpl> textureLayer = TextureLayerImpl::create(layerId ++);
2673 textureLayer->setBounds(IntSize(10, 10)); 2673 textureLayer->setBounds(IntSize(10, 10));
2674 textureLayer->setAnchorPoint(FloatPoint(0, 0)); 2674 textureLayer->setAnchorPoint(FloatPoint(0, 0));
2675 textureLayer->setContentBounds(IntSize(10, 10)); 2675 textureLayer->setContentBounds(IntSize(10, 10));
2676 textureLayer->setDrawsContent(true); 2676 textureLayer->setDrawsContent(true);
2677 textureLayer->setTextureId(1); 2677 textureLayer->setTextureId(1);
2678 rootLayer->addChild(textureLayer.PassAs<CCLayerImpl>()); 2678 rootLayer->addChild(textureLayer.PassAs<LayerImpl>());
2679 2679
2680 scoped_ptr<CCTiledLayerImpl> maskLayer = CCTiledLayerImpl::create(layerId++) ; 2680 scoped_ptr<TiledLayerImpl> maskLayer = TiledLayerImpl::create(layerId++);
2681 maskLayer->setBounds(IntSize(10, 10)); 2681 maskLayer->setBounds(IntSize(10, 10));
2682 maskLayer->setAnchorPoint(FloatPoint(0, 0)); 2682 maskLayer->setAnchorPoint(FloatPoint(0, 0));
2683 maskLayer->setContentBounds(IntSize(10, 10)); 2683 maskLayer->setContentBounds(IntSize(10, 10));
2684 maskLayer->setDrawsContent(true); 2684 maskLayer->setDrawsContent(true);
2685 maskLayer->setSkipsDraw(false); 2685 maskLayer->setSkipsDraw(false);
2686 maskLayer->setTilingData(*tilingData); 2686 maskLayer->setTilingData(*tilingData);
2687 maskLayer->pushTileProperties(0, 0, 1, IntRect(0, 0, 10, 10)); 2687 maskLayer->pushTileProperties(0, 0, 1, IntRect(0, 0, 10, 10));
2688 2688
2689 scoped_ptr<CCTextureLayerImpl> textureLayerWithMask = CCTextureLayerImpl::cr eate(layerId++); 2689 scoped_ptr<TextureLayerImpl> textureLayerWithMask = TextureLayerImpl::create (layerId++);
2690 textureLayerWithMask->setBounds(IntSize(10, 10)); 2690 textureLayerWithMask->setBounds(IntSize(10, 10));
2691 textureLayerWithMask->setAnchorPoint(FloatPoint(0, 0)); 2691 textureLayerWithMask->setAnchorPoint(FloatPoint(0, 0));
2692 textureLayerWithMask->setContentBounds(IntSize(10, 10)); 2692 textureLayerWithMask->setContentBounds(IntSize(10, 10));
2693 textureLayerWithMask->setDrawsContent(true); 2693 textureLayerWithMask->setDrawsContent(true);
2694 textureLayerWithMask->setTextureId(1); 2694 textureLayerWithMask->setTextureId(1);
2695 textureLayerWithMask->setMaskLayer(maskLayer.PassAs<CCLayerImpl>()); 2695 textureLayerWithMask->setMaskLayer(maskLayer.PassAs<LayerImpl>());
2696 rootLayer->addChild(textureLayerWithMask.PassAs<CCLayerImpl>()); 2696 rootLayer->addChild(textureLayerWithMask.PassAs<LayerImpl>());
2697 2697
2698 FakeVideoFrame videoFrame; 2698 FakeVideoFrame videoFrame;
2699 FakeVideoFrameProvider provider; 2699 FakeVideoFrameProvider provider;
2700 provider.setFrame(&videoFrame); 2700 provider.setFrame(&videoFrame);
2701 scoped_ptr<CCVideoLayerImpl> videoLayer = CCVideoLayerImpl::create(layerId++ , &provider); 2701 scoped_ptr<VideoLayerImpl> videoLayer = VideoLayerImpl::create(layerId++, &p rovider);
2702 videoLayer->setBounds(IntSize(10, 10)); 2702 videoLayer->setBounds(IntSize(10, 10));
2703 videoLayer->setAnchorPoint(FloatPoint(0, 0)); 2703 videoLayer->setAnchorPoint(FloatPoint(0, 0));
2704 videoLayer->setContentBounds(IntSize(10, 10)); 2704 videoLayer->setContentBounds(IntSize(10, 10));
2705 videoLayer->setDrawsContent(true); 2705 videoLayer->setDrawsContent(true);
2706 videoLayer->setLayerTreeHostImpl(m_hostImpl.get()); 2706 videoLayer->setLayerTreeHostImpl(m_hostImpl.get());
2707 rootLayer->addChild(videoLayer.PassAs<CCLayerImpl>()); 2707 rootLayer->addChild(videoLayer.PassAs<LayerImpl>());
2708 2708
2709 FakeVideoFrame hwVideoFrame; 2709 FakeVideoFrame hwVideoFrame;
2710 FakeVideoFrameProvider hwProvider; 2710 FakeVideoFrameProvider hwProvider;
2711 hwProvider.setFrame(&hwVideoFrame); 2711 hwProvider.setFrame(&hwVideoFrame);
2712 scoped_ptr<CCVideoLayerImpl> hwVideoLayer = CCVideoLayerImpl::create(layerId ++, &hwProvider); 2712 scoped_ptr<VideoLayerImpl> hwVideoLayer = VideoLayerImpl::create(layerId++, &hwProvider);
2713 hwVideoLayer->setBounds(IntSize(10, 10)); 2713 hwVideoLayer->setBounds(IntSize(10, 10));
2714 hwVideoLayer->setAnchorPoint(FloatPoint(0, 0)); 2714 hwVideoLayer->setAnchorPoint(FloatPoint(0, 0));
2715 hwVideoLayer->setContentBounds(IntSize(10, 10)); 2715 hwVideoLayer->setContentBounds(IntSize(10, 10));
2716 hwVideoLayer->setDrawsContent(true); 2716 hwVideoLayer->setDrawsContent(true);
2717 hwVideoLayer->setLayerTreeHostImpl(m_hostImpl.get()); 2717 hwVideoLayer->setLayerTreeHostImpl(m_hostImpl.get());
2718 rootLayer->addChild(hwVideoLayer.PassAs<CCLayerImpl>()); 2718 rootLayer->addChild(hwVideoLayer.PassAs<LayerImpl>());
2719 2719
2720 scoped_ptr<CCIOSurfaceLayerImpl> ioSurfaceLayer = CCIOSurfaceLayerImpl::crea te(layerId++); 2720 scoped_ptr<IOSurfaceLayerImpl> ioSurfaceLayer = IOSurfaceLayerImpl::create(l ayerId++);
2721 ioSurfaceLayer->setBounds(IntSize(10, 10)); 2721 ioSurfaceLayer->setBounds(IntSize(10, 10));
2722 ioSurfaceLayer->setAnchorPoint(FloatPoint(0, 0)); 2722 ioSurfaceLayer->setAnchorPoint(FloatPoint(0, 0));
2723 ioSurfaceLayer->setContentBounds(IntSize(10, 10)); 2723 ioSurfaceLayer->setContentBounds(IntSize(10, 10));
2724 ioSurfaceLayer->setDrawsContent(true); 2724 ioSurfaceLayer->setDrawsContent(true);
2725 ioSurfaceLayer->setIOSurfaceProperties(1, IntSize(10, 10)); 2725 ioSurfaceLayer->setIOSurfaceProperties(1, IntSize(10, 10));
2726 ioSurfaceLayer->setLayerTreeHostImpl(m_hostImpl.get()); 2726 ioSurfaceLayer->setLayerTreeHostImpl(m_hostImpl.get());
2727 rootLayer->addChild(ioSurfaceLayer.PassAs<CCLayerImpl>()); 2727 rootLayer->addChild(ioSurfaceLayer.PassAs<LayerImpl>());
2728 2728
2729 scoped_ptr<CCHeadsUpDisplayLayerImpl> hudLayer = CCHeadsUpDisplayLayerImpl:: create(layerId++); 2729 scoped_ptr<HeadsUpDisplayLayerImpl> hudLayer = HeadsUpDisplayLayerImpl::crea te(layerId++);
2730 hudLayer->setBounds(IntSize(10, 10)); 2730 hudLayer->setBounds(IntSize(10, 10));
2731 hudLayer->setAnchorPoint(FloatPoint(0, 0)); 2731 hudLayer->setAnchorPoint(FloatPoint(0, 0));
2732 hudLayer->setContentBounds(IntSize(10, 10)); 2732 hudLayer->setContentBounds(IntSize(10, 10));
2733 hudLayer->setDrawsContent(true); 2733 hudLayer->setDrawsContent(true);
2734 hudLayer->setLayerTreeHostImpl(m_hostImpl.get()); 2734 hudLayer->setLayerTreeHostImpl(m_hostImpl.get());
2735 rootLayer->addChild(hudLayer.PassAs<CCLayerImpl>()); 2735 rootLayer->addChild(hudLayer.PassAs<LayerImpl>());
2736 2736
2737 scoped_ptr<FakeScrollbarLayerImpl> scrollbarLayer(FakeScrollbarLayerImpl::cr eate(layerId++)); 2737 scoped_ptr<FakeScrollbarLayerImpl> scrollbarLayer(FakeScrollbarLayerImpl::cr eate(layerId++));
2738 scrollbarLayer->setBounds(IntSize(10, 10)); 2738 scrollbarLayer->setBounds(IntSize(10, 10));
2739 scrollbarLayer->setContentBounds(IntSize(10, 10)); 2739 scrollbarLayer->setContentBounds(IntSize(10, 10));
2740 scrollbarLayer->setDrawsContent(true); 2740 scrollbarLayer->setDrawsContent(true);
2741 scrollbarLayer->setLayerTreeHostImpl(m_hostImpl.get()); 2741 scrollbarLayer->setLayerTreeHostImpl(m_hostImpl.get());
2742 scrollbarLayer->createResources(m_hostImpl->resourceProvider()); 2742 scrollbarLayer->createResources(m_hostImpl->resourceProvider());
2743 rootLayer->addChild(scrollbarLayer.PassAs<CCLayerImpl>()); 2743 rootLayer->addChild(scrollbarLayer.PassAs<LayerImpl>());
2744 2744
2745 scoped_ptr<CCDelegatedRendererLayerImpl> delegatedRendererLayer(CCDelegatedR endererLayerImpl::create(layerId++)); 2745 scoped_ptr<DelegatedRendererLayerImpl> delegatedRendererLayer(DelegatedRende rerLayerImpl::create(layerId++));
2746 delegatedRendererLayer->setBounds(IntSize(10, 10)); 2746 delegatedRendererLayer->setBounds(IntSize(10, 10));
2747 delegatedRendererLayer->setContentBounds(IntSize(10, 10)); 2747 delegatedRendererLayer->setContentBounds(IntSize(10, 10));
2748 delegatedRendererLayer->setDrawsContent(true); 2748 delegatedRendererLayer->setDrawsContent(true);
2749 delegatedRendererLayer->setLayerTreeHostImpl(m_hostImpl.get()); 2749 delegatedRendererLayer->setLayerTreeHostImpl(m_hostImpl.get());
2750 ScopedPtrVector<CCRenderPass> passList; 2750 ScopedPtrVector<RenderPass> passList;
2751 passList.append(createRenderPassWithResource(m_hostImpl->resourceProvider()) ); 2751 passList.append(createRenderPassWithResource(m_hostImpl->resourceProvider()) );
2752 delegatedRendererLayer->setRenderPasses(passList); 2752 delegatedRendererLayer->setRenderPasses(passList);
2753 EXPECT_TRUE(passList.isEmpty()); 2753 EXPECT_TRUE(passList.isEmpty());
2754 rootLayer->addChild(delegatedRendererLayer.PassAs<CCLayerImpl>()); 2754 rootLayer->addChild(delegatedRendererLayer.PassAs<LayerImpl>());
2755 2755
2756 // Use a context that supports IOSurfaces 2756 // Use a context that supports IOSurfaces
2757 m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurface::create(scoped _ptr<WebKit::WebGraphicsContext3D>(new FakeWebGraphicsContext3DWithIOSurface)).P assAs<CCGraphicsContext>()); 2757 m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurface::create(scoped _ptr<WebKit::WebGraphicsContext3D>(new FakeWebGraphicsContext3DWithIOSurface)).P assAs<GraphicsContext>());
2758 2758
2759 hwVideoFrame.setTextureId(m_hostImpl->resourceProvider()->graphicsContext3D( )->createTexture()); 2759 hwVideoFrame.setTextureId(m_hostImpl->resourceProvider()->graphicsContext3D( )->createTexture());
2760 2760
2761 m_hostImpl->setRootLayer(rootLayer.Pass()); 2761 m_hostImpl->setRootLayer(rootLayer.Pass());
2762 2762
2763 CCLayerTreeHostImpl::FrameData frame; 2763 LayerTreeHostImpl::FrameData frame;
2764 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); 2764 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame));
2765 m_hostImpl->drawLayers(frame); 2765 m_hostImpl->drawLayers(frame);
2766 m_hostImpl->didDrawAllLayers(frame); 2766 m_hostImpl->didDrawAllLayers(frame);
2767 m_hostImpl->swapBuffers(); 2767 m_hostImpl->swapBuffers();
2768 2768
2769 unsigned numResources = m_hostImpl->resourceProvider()->numResources(); 2769 unsigned numResources = m_hostImpl->resourceProvider()->numResources();
2770 2770
2771 // Lose the context, replacing it with a StrictWebGraphicsContext3DWithIOSur face, 2771 // Lose the context, replacing it with a StrictWebGraphicsContext3DWithIOSur face,
2772 // that will warn if any resource from the previous context gets used. 2772 // that will warn if any resource from the previous context gets used.
2773 m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurface::create(scoped _ptr<WebKit::WebGraphicsContext3D>(new StrictWebGraphicsContext3DWithIOSurface)) .PassAs<CCGraphicsContext>()); 2773 m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurface::create(scoped _ptr<WebKit::WebGraphicsContext3D>(new StrictWebGraphicsContext3DWithIOSurface)) .PassAs<GraphicsContext>());
2774 2774
2775 // Create dummy resources so that looking up an old resource will get an 2775 // Create dummy resources so that looking up an old resource will get an
2776 // invalid texture id mapping. 2776 // invalid texture id mapping.
2777 for (unsigned i = 0; i < numResources; ++i) 2777 for (unsigned i = 0; i < numResources; ++i)
2778 m_hostImpl->resourceProvider()->createResourceFromExternalTexture(1); 2778 m_hostImpl->resourceProvider()->createResourceFromExternalTexture(1);
2779 2779
2780 // The WebVideoFrameProvider is expected to recreate its textures after a 2780 // The WebVideoFrameProvider is expected to recreate its textures after a
2781 // lost context (or not serve a frame). 2781 // lost context (or not serve a frame).
2782 hwProvider.setFrame(0); 2782 hwProvider.setFrame(0);
2783 2783
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
2829 return WebString(); 2829 return WebString();
2830 } 2830 }
2831 2831
2832 unsigned numTextures() const { return m_numTextures; } 2832 unsigned numTextures() const { return m_numTextures; }
2833 2833
2834 private: 2834 private:
2835 base::hash_map<WebGLId, bool> m_textures; 2835 base::hash_map<WebGLId, bool> m_textures;
2836 unsigned m_numTextures; 2836 unsigned m_numTextures;
2837 }; 2837 };
2838 2838
2839 TEST_P(CCLayerTreeHostImplTest, layersFreeTextures) 2839 TEST_P(LayerTreeHostImplTest, layersFreeTextures)
2840 { 2840 {
2841 scoped_ptr<CCLayerImpl> rootLayer(CCLayerImpl::create(1)); 2841 scoped_ptr<LayerImpl> rootLayer(LayerImpl::create(1));
2842 rootLayer->setBounds(IntSize(10, 10)); 2842 rootLayer->setBounds(IntSize(10, 10));
2843 rootLayer->setAnchorPoint(FloatPoint(0, 0)); 2843 rootLayer->setAnchorPoint(FloatPoint(0, 0));
2844 2844
2845 scoped_ptr<CCTiledLayerImpl> tileLayer = CCTiledLayerImpl::create(2); 2845 scoped_ptr<TiledLayerImpl> tileLayer = TiledLayerImpl::create(2);
2846 tileLayer->setBounds(IntSize(10, 10)); 2846 tileLayer->setBounds(IntSize(10, 10));
2847 tileLayer->setAnchorPoint(FloatPoint(0, 0)); 2847 tileLayer->setAnchorPoint(FloatPoint(0, 0));
2848 tileLayer->setContentBounds(IntSize(10, 10)); 2848 tileLayer->setContentBounds(IntSize(10, 10));
2849 tileLayer->setDrawsContent(true); 2849 tileLayer->setDrawsContent(true);
2850 tileLayer->setSkipsDraw(false); 2850 tileLayer->setSkipsDraw(false);
2851 scoped_ptr<CCLayerTilingData> tilingData(CCLayerTilingData::create(IntSize(1 0, 10), CCLayerTilingData::NoBorderTexels)); 2851 scoped_ptr<LayerTilingData> tilingData(LayerTilingData::create(IntSize(10, 1 0), LayerTilingData::NoBorderTexels));
2852 tilingData->setBounds(IntSize(10, 10)); 2852 tilingData->setBounds(IntSize(10, 10));
2853 tileLayer->setTilingData(*tilingData); 2853 tileLayer->setTilingData(*tilingData);
2854 tileLayer->pushTileProperties(0, 0, 1, IntRect(0, 0, 10, 10)); 2854 tileLayer->pushTileProperties(0, 0, 1, IntRect(0, 0, 10, 10));
2855 rootLayer->addChild(tileLayer.PassAs<CCLayerImpl>()); 2855 rootLayer->addChild(tileLayer.PassAs<LayerImpl>());
2856 2856
2857 scoped_ptr<CCTextureLayerImpl> textureLayer = CCTextureLayerImpl::create(3); 2857 scoped_ptr<TextureLayerImpl> textureLayer = TextureLayerImpl::create(3);
2858 textureLayer->setBounds(IntSize(10, 10)); 2858 textureLayer->setBounds(IntSize(10, 10));
2859 textureLayer->setAnchorPoint(FloatPoint(0, 0)); 2859 textureLayer->setAnchorPoint(FloatPoint(0, 0));
2860 textureLayer->setContentBounds(IntSize(10, 10)); 2860 textureLayer->setContentBounds(IntSize(10, 10));
2861 textureLayer->setDrawsContent(true); 2861 textureLayer->setDrawsContent(true);
2862 textureLayer->setTextureId(1); 2862 textureLayer->setTextureId(1);
2863 rootLayer->addChild(textureLayer.PassAs<CCLayerImpl>()); 2863 rootLayer->addChild(textureLayer.PassAs<LayerImpl>());
2864 2864
2865 FakeVideoFrameProvider provider; 2865 FakeVideoFrameProvider provider;
2866 scoped_ptr<CCVideoLayerImpl> videoLayer = CCVideoLayerImpl::create(4, &provi der); 2866 scoped_ptr<VideoLayerImpl> videoLayer = VideoLayerImpl::create(4, &provider) ;
2867 videoLayer->setBounds(IntSize(10, 10)); 2867 videoLayer->setBounds(IntSize(10, 10));
2868 videoLayer->setAnchorPoint(FloatPoint(0, 0)); 2868 videoLayer->setAnchorPoint(FloatPoint(0, 0));
2869 videoLayer->setContentBounds(IntSize(10, 10)); 2869 videoLayer->setContentBounds(IntSize(10, 10));
2870 videoLayer->setDrawsContent(true); 2870 videoLayer->setDrawsContent(true);
2871 videoLayer->setLayerTreeHostImpl(m_hostImpl.get()); 2871 videoLayer->setLayerTreeHostImpl(m_hostImpl.get());
2872 rootLayer->addChild(videoLayer.PassAs<CCLayerImpl>()); 2872 rootLayer->addChild(videoLayer.PassAs<LayerImpl>());
2873 2873
2874 scoped_ptr<CCIOSurfaceLayerImpl> ioSurfaceLayer = CCIOSurfaceLayerImpl::crea te(5); 2874 scoped_ptr<IOSurfaceLayerImpl> ioSurfaceLayer = IOSurfaceLayerImpl::create(5 );
2875 ioSurfaceLayer->setBounds(IntSize(10, 10)); 2875 ioSurfaceLayer->setBounds(IntSize(10, 10));
2876 ioSurfaceLayer->setAnchorPoint(FloatPoint(0, 0)); 2876 ioSurfaceLayer->setAnchorPoint(FloatPoint(0, 0));
2877 ioSurfaceLayer->setContentBounds(IntSize(10, 10)); 2877 ioSurfaceLayer->setContentBounds(IntSize(10, 10));
2878 ioSurfaceLayer->setDrawsContent(true); 2878 ioSurfaceLayer->setDrawsContent(true);
2879 ioSurfaceLayer->setIOSurfaceProperties(1, IntSize(10, 10)); 2879 ioSurfaceLayer->setIOSurfaceProperties(1, IntSize(10, 10));
2880 ioSurfaceLayer->setLayerTreeHostImpl(m_hostImpl.get()); 2880 ioSurfaceLayer->setLayerTreeHostImpl(m_hostImpl.get());
2881 rootLayer->addChild(ioSurfaceLayer.PassAs<CCLayerImpl>()); 2881 rootLayer->addChild(ioSurfaceLayer.PassAs<LayerImpl>());
2882 2882
2883 // Lose the context, replacing it with a TrackingWebGraphicsContext3D (which the CCLayerTreeHostImpl takes ownership of). 2883 // Lose the context, replacing it with a TrackingWebGraphicsContext3D (which the LayerTreeHostImpl takes ownership of).
2884 scoped_ptr<CCGraphicsContext> ccContext(FakeWebCompositorOutputSurface::crea te(scoped_ptr<WebKit::WebGraphicsContext3D>(new TrackingWebGraphicsContext3D))); 2884 scoped_ptr<GraphicsContext> outputSurface(FakeWebCompositorOutputSurface::cr eate(scoped_ptr<WebKit::WebGraphicsContext3D>(new TrackingWebGraphicsContext3D)) );
2885 TrackingWebGraphicsContext3D* trackingWebGraphicsContext = static_cast<Track ingWebGraphicsContext3D*>(ccContext->context3D()); 2885 TrackingWebGraphicsContext3D* trackingWebGraphicsContext = static_cast<Track ingWebGraphicsContext3D*>(outputSurface->context3D());
2886 m_hostImpl->initializeRenderer(ccContext.Pass()); 2886 m_hostImpl->initializeRenderer(outputSurface.Pass());
2887 2887
2888 m_hostImpl->setRootLayer(rootLayer.Pass()); 2888 m_hostImpl->setRootLayer(rootLayer.Pass());
2889 2889
2890 CCLayerTreeHostImpl::FrameData frame; 2890 LayerTreeHostImpl::FrameData frame;
2891 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); 2891 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame));
2892 m_hostImpl->drawLayers(frame); 2892 m_hostImpl->drawLayers(frame);
2893 m_hostImpl->didDrawAllLayers(frame); 2893 m_hostImpl->didDrawAllLayers(frame);
2894 m_hostImpl->swapBuffers(); 2894 m_hostImpl->swapBuffers();
2895 2895
2896 EXPECT_GT(trackingWebGraphicsContext->numTextures(), 0u); 2896 EXPECT_GT(trackingWebGraphicsContext->numTextures(), 0u);
2897 2897
2898 // Kill the layer tree. 2898 // Kill the layer tree.
2899 m_hostImpl->setRootLayer(CCLayerImpl::create(100)); 2899 m_hostImpl->setRootLayer(LayerImpl::create(100));
2900 // There should be no textures left in use after. 2900 // There should be no textures left in use after.
2901 EXPECT_EQ(0u, trackingWebGraphicsContext->numTextures()); 2901 EXPECT_EQ(0u, trackingWebGraphicsContext->numTextures());
2902 } 2902 }
2903 2903
2904 class MockDrawQuadsToFillScreenContext : public FakeWebGraphicsContext3D { 2904 class MockDrawQuadsToFillScreenContext : public FakeWebGraphicsContext3D {
2905 public: 2905 public:
2906 MOCK_METHOD1(useProgram, void(WebGLId program)); 2906 MOCK_METHOD1(useProgram, void(WebGLId program));
2907 MOCK_METHOD4(drawElements, void(WGC3Denum mode, WGC3Dsizei count, WGC3Denum type, WGC3Dintptr offset)); 2907 MOCK_METHOD4(drawElements, void(WGC3Denum mode, WGC3Dsizei count, WGC3Denum type, WGC3Dintptr offset));
2908 }; 2908 };
2909 2909
2910 TEST_P(CCLayerTreeHostImplTest, hasTransparentBackground) 2910 TEST_P(LayerTreeHostImplTest, hasTransparentBackground)
2911 { 2911 {
2912 scoped_ptr<CCGraphicsContext> context = FakeWebCompositorOutputSurface::crea te(scoped_ptr<WebKit::WebGraphicsContext3D>(new MockDrawQuadsToFillScreenContext )).PassAs<CCGraphicsContext>(); 2912 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create (scoped_ptr<WebKit::WebGraphicsContext3D>(new MockDrawQuadsToFillScreenContext)) .PassAs<GraphicsContext>();
2913 MockDrawQuadsToFillScreenContext* mockContext = static_cast<MockDrawQuadsToF illScreenContext*>(context->context3D()); 2913 MockDrawQuadsToFillScreenContext* mockContext = static_cast<MockDrawQuadsToF illScreenContext*>(context->context3D());
2914 2914
2915 // Run test case 2915 // Run test case
2916 scoped_ptr<CCLayerTreeHostImpl> myHostImpl = createLayerTreeHost(false, cont ext.Pass(), CCLayerImpl::create(1)); 2916 scoped_ptr<LayerTreeHostImpl> myHostImpl = createLayerTreeHost(false, contex t.Pass(), LayerImpl::create(1));
2917 myHostImpl->setBackgroundColor(SK_ColorWHITE); 2917 myHostImpl->setBackgroundColor(SK_ColorWHITE);
2918 2918
2919 // Verify one quad is drawn when transparent background set is not set. 2919 // Verify one quad is drawn when transparent background set is not set.
2920 myHostImpl->setHasTransparentBackground(false); 2920 myHostImpl->setHasTransparentBackground(false);
2921 EXPECT_CALL(*mockContext, useProgram(_)) 2921 EXPECT_CALL(*mockContext, useProgram(_))
2922 .Times(1); 2922 .Times(1);
2923 EXPECT_CALL(*mockContext, drawElements(_, _, _, _)) 2923 EXPECT_CALL(*mockContext, drawElements(_, _, _, _))
2924 .Times(1); 2924 .Times(1);
2925 CCLayerTreeHostImpl::FrameData frame; 2925 LayerTreeHostImpl::FrameData frame;
2926 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 2926 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
2927 myHostImpl->drawLayers(frame); 2927 myHostImpl->drawLayers(frame);
2928 myHostImpl->didDrawAllLayers(frame); 2928 myHostImpl->didDrawAllLayers(frame);
2929 Mock::VerifyAndClearExpectations(&mockContext); 2929 Mock::VerifyAndClearExpectations(&mockContext);
2930 2930
2931 // Verify no quads are drawn when transparent background is set. 2931 // Verify no quads are drawn when transparent background is set.
2932 myHostImpl->setHasTransparentBackground(true); 2932 myHostImpl->setHasTransparentBackground(true);
2933 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 2933 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
2934 myHostImpl->drawLayers(frame); 2934 myHostImpl->drawLayers(frame);
2935 myHostImpl->didDrawAllLayers(frame); 2935 myHostImpl->didDrawAllLayers(frame);
2936 Mock::VerifyAndClearExpectations(&mockContext); 2936 Mock::VerifyAndClearExpectations(&mockContext);
2937 } 2937 }
2938 2938
2939 static void addDrawingLayerTo(CCLayerImpl* parent, int id, const IntRect& layerR ect, CCLayerImpl** result) 2939 static void addDrawingLayerTo(LayerImpl* parent, int id, const IntRect& layerRec t, LayerImpl** result)
2940 { 2940 {
2941 scoped_ptr<CCLayerImpl> layer = FakeLayerWithQuads::create(id); 2941 scoped_ptr<LayerImpl> layer = FakeLayerWithQuads::create(id);
2942 CCLayerImpl* layerPtr = layer.get(); 2942 LayerImpl* layerPtr = layer.get();
2943 layerPtr->setAnchorPoint(FloatPoint(0, 0)); 2943 layerPtr->setAnchorPoint(FloatPoint(0, 0));
2944 layerPtr->setPosition(FloatPoint(layerRect.location())); 2944 layerPtr->setPosition(FloatPoint(layerRect.location()));
2945 layerPtr->setBounds(layerRect.size()); 2945 layerPtr->setBounds(layerRect.size());
2946 layerPtr->setContentBounds(layerRect.size()); 2946 layerPtr->setContentBounds(layerRect.size());
2947 layerPtr->setDrawsContent(true); // only children draw content 2947 layerPtr->setDrawsContent(true); // only children draw content
2948 layerPtr->setContentsOpaque(true); 2948 layerPtr->setContentsOpaque(true);
2949 parent->addChild(layer.Pass()); 2949 parent->addChild(layer.Pass());
2950 if (result) 2950 if (result)
2951 *result = layerPtr; 2951 *result = layerPtr;
2952 } 2952 }
2953 2953
2954 static void setupLayersForTextureCaching(CCLayerTreeHostImpl* layerTreeHostImpl, CCLayerImpl*& rootPtr, CCLayerImpl*& intermediateLayerPtr, CCLayerImpl*& surfac eLayerPtr, CCLayerImpl*& childPtr, const IntSize& rootSize) 2954 static void setupLayersForTextureCaching(LayerTreeHostImpl* layerTreeHostImpl, L ayerImpl*& rootPtr, LayerImpl*& intermediateLayerPtr, LayerImpl*& surfaceLayerPt r, LayerImpl*& childPtr, const IntSize& rootSize)
2955 { 2955 {
2956 scoped_ptr<CCGraphicsContext> context = FakeWebCompositorOutputSurface::crea te(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<CCGr aphicsContext>(); 2956 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create (scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi csContext>();
2957 2957
2958 layerTreeHostImpl->initializeRenderer(context.Pass()); 2958 layerTreeHostImpl->initializeRenderer(context.Pass());
2959 layerTreeHostImpl->setViewportSize(rootSize, rootSize); 2959 layerTreeHostImpl->setViewportSize(rootSize, rootSize);
2960 2960
2961 scoped_ptr<CCLayerImpl> root = CCLayerImpl::create(1); 2961 scoped_ptr<LayerImpl> root = LayerImpl::create(1);
2962 rootPtr = root.get(); 2962 rootPtr = root.get();
2963 2963
2964 root->setAnchorPoint(FloatPoint(0, 0)); 2964 root->setAnchorPoint(FloatPoint(0, 0));
2965 root->setPosition(FloatPoint(0, 0)); 2965 root->setPosition(FloatPoint(0, 0));
2966 root->setBounds(rootSize); 2966 root->setBounds(rootSize);
2967 root->setContentBounds(rootSize); 2967 root->setContentBounds(rootSize);
2968 root->setDrawsContent(true); 2968 root->setDrawsContent(true);
2969 layerTreeHostImpl->setRootLayer(root.Pass()); 2969 layerTreeHostImpl->setRootLayer(root.Pass());
2970 2970
2971 addDrawingLayerTo(rootPtr, 2, IntRect(10, 10, rootSize.width(), rootSize.hei ght()), &intermediateLayerPtr); 2971 addDrawingLayerTo(rootPtr, 2, IntRect(10, 10, rootSize.width(), rootSize.hei ght()), &intermediateLayerPtr);
2972 intermediateLayerPtr->setDrawsContent(false); // only children draw content 2972 intermediateLayerPtr->setDrawsContent(false); // only children draw content
2973 2973
2974 // Surface layer is the layer that changes its opacity 2974 // Surface layer is the layer that changes its opacity
2975 // It will contain other layers that draw content. 2975 // It will contain other layers that draw content.
2976 addDrawingLayerTo(intermediateLayerPtr, 3, IntRect(10, 10, rootSize.width(), rootSize.height()), &surfaceLayerPtr); 2976 addDrawingLayerTo(intermediateLayerPtr, 3, IntRect(10, 10, rootSize.width(), rootSize.height()), &surfaceLayerPtr);
2977 surfaceLayerPtr->setDrawsContent(false); // only children draw content 2977 surfaceLayerPtr->setDrawsContent(false); // only children draw content
2978 surfaceLayerPtr->setOpacity(0.5f); // This will cause it to have a surface 2978 surfaceLayerPtr->setOpacity(0.5f); // This will cause it to have a surface
2979 2979
2980 // Child of the surface layer will produce some quads 2980 // Child of the surface layer will produce some quads
2981 addDrawingLayerTo(surfaceLayerPtr, 4, IntRect(5, 5, rootSize.width() - 25, r ootSize.height() - 25), &childPtr); 2981 addDrawingLayerTo(surfaceLayerPtr, 4, IntRect(5, 5, rootSize.width() - 25, r ootSize.height() - 25), &childPtr);
2982 } 2982 }
2983 2983
2984 class CCRendererGLWithReleaseTextures : public CCRendererGL { 2984 class GLRendererWithReleaseTextures : public GLRenderer {
2985 public: 2985 public:
2986 using CCRendererGL::releaseRenderPassTextures; 2986 using GLRenderer::releaseRenderPassTextures;
2987 }; 2987 };
2988 2988
2989 TEST_P(CCLayerTreeHostImplTest, textureCachingWithClipping) 2989 TEST_P(LayerTreeHostImplTest, textureCachingWithClipping)
2990 { 2990 {
2991 CCSettings::setPartialSwapEnabled(true); 2991 Settings::setPartialSwapEnabled(true);
2992 2992
2993 CCLayerTreeSettings settings; 2993 LayerTreeSettings settings;
2994 settings.minimumOcclusionTrackingSize = IntSize(); 2994 settings.minimumOcclusionTrackingSize = IntSize();
2995 scoped_ptr<CCLayerTreeHostImpl> myHostImpl = CCLayerTreeHostImpl::create(set tings, this); 2995 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting s, this);
2996 2996
2997 CCLayerImpl* rootPtr; 2997 LayerImpl* rootPtr;
2998 CCLayerImpl* surfaceLayerPtr; 2998 LayerImpl* surfaceLayerPtr;
2999 2999
3000 scoped_ptr<CCGraphicsContext> context = FakeWebCompositorOutputSurface::crea te(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<CCGr aphicsContext>(); 3000 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create (scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi csContext>();
3001 3001
3002 IntSize rootSize(100, 100); 3002 IntSize rootSize(100, 100);
3003 3003
3004 myHostImpl->initializeRenderer(context.Pass()); 3004 myHostImpl->initializeRenderer(context.Pass());
3005 myHostImpl->setViewportSize(IntSize(rootSize.width(), rootSize.height()), In tSize(rootSize.width(), rootSize.height())); 3005 myHostImpl->setViewportSize(IntSize(rootSize.width(), rootSize.height()), In tSize(rootSize.width(), rootSize.height()));
3006 3006
3007 scoped_ptr<CCLayerImpl> root = CCLayerImpl::create(1); 3007 scoped_ptr<LayerImpl> root = LayerImpl::create(1);
3008 rootPtr = root.get(); 3008 rootPtr = root.get();
3009 3009
3010 root->setAnchorPoint(FloatPoint(0, 0)); 3010 root->setAnchorPoint(FloatPoint(0, 0));
3011 root->setPosition(FloatPoint(0, 0)); 3011 root->setPosition(FloatPoint(0, 0));
3012 root->setBounds(rootSize); 3012 root->setBounds(rootSize);
3013 root->setContentBounds(rootSize); 3013 root->setContentBounds(rootSize);
3014 root->setDrawsContent(true); 3014 root->setDrawsContent(true);
3015 root->setMasksToBounds(true); 3015 root->setMasksToBounds(true);
3016 myHostImpl->setRootLayer(root.Pass()); 3016 myHostImpl->setRootLayer(root.Pass());
3017 3017
3018 addDrawingLayerTo(rootPtr, 3, IntRect(0, 0, rootSize.width(), rootSize.heigh t()), &surfaceLayerPtr); 3018 addDrawingLayerTo(rootPtr, 3, IntRect(0, 0, rootSize.width(), rootSize.heigh t()), &surfaceLayerPtr);
3019 surfaceLayerPtr->setDrawsContent(false); 3019 surfaceLayerPtr->setDrawsContent(false);
3020 3020
3021 // Surface layer is the layer that changes its opacity 3021 // Surface layer is the layer that changes its opacity
3022 // It will contain other layers that draw content. 3022 // It will contain other layers that draw content.
3023 surfaceLayerPtr->setOpacity(0.5f); // This will cause it to have a surface 3023 surfaceLayerPtr->setOpacity(0.5f); // This will cause it to have a surface
3024 3024
3025 addDrawingLayerTo(surfaceLayerPtr, 4, IntRect(0, 0, 100, 3), 0); 3025 addDrawingLayerTo(surfaceLayerPtr, 4, IntRect(0, 0, 100, 3), 0);
3026 addDrawingLayerTo(surfaceLayerPtr, 5, IntRect(0, 97, 100, 3), 0); 3026 addDrawingLayerTo(surfaceLayerPtr, 5, IntRect(0, 97, 100, 3), 0);
3027 3027
3028 // Rotation will put part of the child ouside the bounds of the root layer. 3028 // Rotation will put part of the child ouside the bounds of the root layer.
3029 // Nevertheless, the child layers should be drawn. 3029 // Nevertheless, the child layers should be drawn.
3030 WebTransformationMatrix transform = surfaceLayerPtr->transform(); 3030 WebTransformationMatrix transform = surfaceLayerPtr->transform();
3031 transform.translate(50, 50); 3031 transform.translate(50, 50);
3032 transform.rotate(35); 3032 transform.rotate(35);
3033 transform.translate(-50, -50); 3033 transform.translate(-50, -50);
3034 surfaceLayerPtr->setTransform(transform); 3034 surfaceLayerPtr->setTransform(transform);
3035 3035
3036 { 3036 {
3037 CCLayerTreeHostImpl::FrameData frame; 3037 LayerTreeHostImpl::FrameData frame;
3038 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3038 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3039 3039
3040 // Must receive two render passes, each with one quad 3040 // Must receive two render passes, each with one quad
3041 ASSERT_EQ(2U, frame.renderPasses.size()); 3041 ASSERT_EQ(2U, frame.renderPasses.size());
3042 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size()); 3042 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size());
3043 ASSERT_EQ(1U, frame.renderPasses[1]->quadList().size()); 3043 ASSERT_EQ(1U, frame.renderPasses[1]->quadList().size());
3044 3044
3045 // Verify that the child layers are being clipped. 3045 // Verify that the child layers are being clipped.
3046 IntRect quadVisibleRect = frame.renderPasses[0]->quadList()[0]->quadVisi bleRect(); 3046 IntRect quadVisibleRect = frame.renderPasses[0]->quadList()[0]->quadVisi bleRect();
3047 EXPECT_LT(quadVisibleRect.width(), 100); 3047 EXPECT_LT(quadVisibleRect.width(), 100);
3048 3048
3049 quadVisibleRect = frame.renderPasses[0]->quadList()[1]->quadVisibleRect( ); 3049 quadVisibleRect = frame.renderPasses[0]->quadList()[1]->quadVisibleRect( );
3050 EXPECT_LT(quadVisibleRect.width(), 100); 3050 EXPECT_LT(quadVisibleRect.width(), 100);
3051 3051
3052 // Verify that the render surface texture is *not* clipped. 3052 // Verify that the render surface texture is *not* clipped.
3053 EXPECT_RECT_EQ(IntRect(0, 0, 100, 100), frame.renderPasses[0]->outputRec t()); 3053 EXPECT_RECT_EQ(IntRect(0, 0, 100, 100), frame.renderPasses[0]->outputRec t());
3054 3054
3055 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]-> material()); 3055 EXPECT_EQ(DrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->ma terial());
3056 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re nderPasses[1]->quadList()[0]); 3056 RenderPassDrawQuad* quad = static_cast<RenderPassDrawQuad*>(frame.render Passes[1]->quadList()[0]);
3057 EXPECT_FALSE(quad->contentsChangedSinceLastFrame().isEmpty()); 3057 EXPECT_FALSE(quad->contentsChangedSinceLastFrame().isEmpty());
3058 3058
3059 myHostImpl->drawLayers(frame); 3059 myHostImpl->drawLayers(frame);
3060 myHostImpl->didDrawAllLayers(frame); 3060 myHostImpl->didDrawAllLayers(frame);
3061 } 3061 }
3062 3062
3063 transform = surfaceLayerPtr->transform(); 3063 transform = surfaceLayerPtr->transform();
3064 transform.translate(50, 50); 3064 transform.translate(50, 50);
3065 transform.rotate(-35); 3065 transform.rotate(-35);
3066 transform.translate(-50, -50); 3066 transform.translate(-50, -50);
3067 surfaceLayerPtr->setTransform(transform); 3067 surfaceLayerPtr->setTransform(transform);
3068 3068
3069 // The surface is now aligned again, and the clipped parts are exposed. 3069 // The surface is now aligned again, and the clipped parts are exposed.
3070 // Since the layers were clipped, even though the render surface size 3070 // Since the layers were clipped, even though the render surface size
3071 // was not changed, the texture should not be saved. 3071 // was not changed, the texture should not be saved.
3072 { 3072 {
3073 CCLayerTreeHostImpl::FrameData frame; 3073 LayerTreeHostImpl::FrameData frame;
3074 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3074 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3075 3075
3076 // Must receive two render passes, each with one quad 3076 // Must receive two render passes, each with one quad
3077 ASSERT_EQ(2U, frame.renderPasses.size()); 3077 ASSERT_EQ(2U, frame.renderPasses.size());
3078 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size()); 3078 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size());
3079 ASSERT_EQ(1U, frame.renderPasses[1]->quadList().size()); 3079 ASSERT_EQ(1U, frame.renderPasses[1]->quadList().size());
3080 3080
3081 myHostImpl->drawLayers(frame); 3081 myHostImpl->drawLayers(frame);
3082 myHostImpl->didDrawAllLayers(frame); 3082 myHostImpl->didDrawAllLayers(frame);
3083 } 3083 }
3084 } 3084 }
3085 3085
3086 TEST_P(CCLayerTreeHostImplTest, textureCachingWithOcclusion) 3086 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusion)
3087 { 3087 {
3088 CCSettings::setPartialSwapEnabled(false); 3088 Settings::setPartialSwapEnabled(false);
3089 3089
3090 CCLayerTreeSettings settings; 3090 LayerTreeSettings settings;
3091 settings.minimumOcclusionTrackingSize = IntSize(); 3091 settings.minimumOcclusionTrackingSize = IntSize();
3092 scoped_ptr<CCLayerTreeHostImpl> myHostImpl = CCLayerTreeHostImpl::create(set tings, this); 3092 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting s, this);
3093 3093
3094 // Layers are structure as follows: 3094 // Layers are structure as follows:
3095 // 3095 //
3096 // R +-- S1 +- L10 (owning) 3096 // R +-- S1 +- L10 (owning)
3097 // | +- L11 3097 // | +- L11
3098 // | +- L12 3098 // | +- L12
3099 // | 3099 // |
3100 // +-- S2 +- L20 (owning) 3100 // +-- S2 +- L20 (owning)
3101 // +- L21 3101 // +- L21
3102 // 3102 //
3103 // Occlusion: 3103 // Occlusion:
3104 // L12 occludes L11 (internal) 3104 // L12 occludes L11 (internal)
3105 // L20 occludes L10 (external) 3105 // L20 occludes L10 (external)
3106 // L21 occludes L20 (internal) 3106 // L21 occludes L20 (internal)
3107 3107
3108 CCLayerImpl* rootPtr; 3108 LayerImpl* rootPtr;
3109 CCLayerImpl* layerS1Ptr; 3109 LayerImpl* layerS1Ptr;
3110 CCLayerImpl* layerS2Ptr; 3110 LayerImpl* layerS2Ptr;
3111 3111
3112 scoped_ptr<CCGraphicsContext> context = FakeWebCompositorOutputSurface::crea te(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<CCGr aphicsContext>(); 3112 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create (scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi csContext>();
3113 3113
3114 IntSize rootSize(1000, 1000); 3114 IntSize rootSize(1000, 1000);
3115 3115
3116 myHostImpl->initializeRenderer(context.Pass()); 3116 myHostImpl->initializeRenderer(context.Pass());
3117 myHostImpl->setViewportSize(IntSize(rootSize.width(), rootSize.height()), In tSize(rootSize.width(), rootSize.height())); 3117 myHostImpl->setViewportSize(IntSize(rootSize.width(), rootSize.height()), In tSize(rootSize.width(), rootSize.height()));
3118 3118
3119 scoped_ptr<CCLayerImpl> root = CCLayerImpl::create(1); 3119 scoped_ptr<LayerImpl> root = LayerImpl::create(1);
3120 rootPtr = root.get(); 3120 rootPtr = root.get();
3121 3121
3122 root->setAnchorPoint(FloatPoint(0, 0)); 3122 root->setAnchorPoint(FloatPoint(0, 0));
3123 root->setPosition(FloatPoint(0, 0)); 3123 root->setPosition(FloatPoint(0, 0));
3124 root->setBounds(rootSize); 3124 root->setBounds(rootSize);
3125 root->setContentBounds(rootSize); 3125 root->setContentBounds(rootSize);
3126 root->setDrawsContent(true); 3126 root->setDrawsContent(true);
3127 root->setMasksToBounds(true); 3127 root->setMasksToBounds(true);
3128 myHostImpl->setRootLayer(root.Pass()); 3128 myHostImpl->setRootLayer(root.Pass());
3129 3129
3130 addDrawingLayerTo(rootPtr, 2, IntRect(300, 300, 300, 300), &layerS1Ptr); 3130 addDrawingLayerTo(rootPtr, 2, IntRect(300, 300, 300, 300), &layerS1Ptr);
3131 layerS1Ptr->setForceRenderSurface(true); 3131 layerS1Ptr->setForceRenderSurface(true);
3132 3132
3133 addDrawingLayerTo(layerS1Ptr, 3, IntRect(10, 10, 10, 10), 0); // L11 3133 addDrawingLayerTo(layerS1Ptr, 3, IntRect(10, 10, 10, 10), 0); // L11
3134 addDrawingLayerTo(layerS1Ptr, 4, IntRect(0, 0, 30, 30), 0); // L12 3134 addDrawingLayerTo(layerS1Ptr, 4, IntRect(0, 0, 30, 30), 0); // L12
3135 3135
3136 addDrawingLayerTo(rootPtr, 5, IntRect(550, 250, 300, 400), &layerS2Ptr); 3136 addDrawingLayerTo(rootPtr, 5, IntRect(550, 250, 300, 400), &layerS2Ptr);
3137 layerS2Ptr->setForceRenderSurface(true); 3137 layerS2Ptr->setForceRenderSurface(true);
3138 3138
3139 addDrawingLayerTo(layerS2Ptr, 6, IntRect(20, 20, 5, 5), 0); // L21 3139 addDrawingLayerTo(layerS2Ptr, 6, IntRect(20, 20, 5, 5), 0); // L21
3140 3140
3141 // Initial draw - must receive all quads 3141 // Initial draw - must receive all quads
3142 { 3142 {
3143 CCLayerTreeHostImpl::FrameData frame; 3143 LayerTreeHostImpl::FrameData frame;
3144 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3144 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3145 3145
3146 // Must receive 3 render passes. 3146 // Must receive 3 render passes.
3147 // For Root, there are 2 quads; for S1, there are 2 quads (1 is occluded ); for S2, there is 2 quads. 3147 // For Root, there are 2 quads; for S1, there are 2 quads (1 is occluded ); for S2, there is 2 quads.
3148 ASSERT_EQ(3U, frame.renderPasses.size()); 3148 ASSERT_EQ(3U, frame.renderPasses.size());
3149 3149
3150 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size()); 3150 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size());
3151 EXPECT_EQ(2U, frame.renderPasses[1]->quadList().size()); 3151 EXPECT_EQ(2U, frame.renderPasses[1]->quadList().size());
3152 EXPECT_EQ(2U, frame.renderPasses[2]->quadList().size()); 3152 EXPECT_EQ(2U, frame.renderPasses[2]->quadList().size());
3153 3153
3154 myHostImpl->drawLayers(frame); 3154 myHostImpl->drawLayers(frame);
3155 myHostImpl->didDrawAllLayers(frame); 3155 myHostImpl->didDrawAllLayers(frame);
3156 } 3156 }
3157 3157
3158 // "Unocclude" surface S1 and repeat draw. 3158 // "Unocclude" surface S1 and repeat draw.
3159 // Must remove S2's render pass since it's cached; 3159 // Must remove S2's render pass since it's cached;
3160 // Must keep S1 quads because texture contained external occlusion. 3160 // Must keep S1 quads because texture contained external occlusion.
3161 WebTransformationMatrix transform = layerS2Ptr->transform(); 3161 WebTransformationMatrix transform = layerS2Ptr->transform();
3162 transform.translate(150, 150); 3162 transform.translate(150, 150);
3163 layerS2Ptr->setTransform(transform); 3163 layerS2Ptr->setTransform(transform);
3164 { 3164 {
3165 CCLayerTreeHostImpl::FrameData frame; 3165 LayerTreeHostImpl::FrameData frame;
3166 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3166 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3167 3167
3168 // Must receive 2 render passes. 3168 // Must receive 2 render passes.
3169 // For Root, there are 2 quads 3169 // For Root, there are 2 quads
3170 // For S1, the number of quads depends on what got unoccluded, so not as serted beyond being positive. 3170 // For S1, the number of quads depends on what got unoccluded, so not as serted beyond being positive.
3171 // For S2, there is no render pass 3171 // For S2, there is no render pass
3172 ASSERT_EQ(2U, frame.renderPasses.size()); 3172 ASSERT_EQ(2U, frame.renderPasses.size());
3173 3173
3174 EXPECT_GT(frame.renderPasses[0]->quadList().size(), 0U); 3174 EXPECT_GT(frame.renderPasses[0]->quadList().size(), 0U);
3175 EXPECT_EQ(2U, frame.renderPasses[1]->quadList().size()); 3175 EXPECT_EQ(2U, frame.renderPasses[1]->quadList().size());
3176 3176
3177 myHostImpl->drawLayers(frame); 3177 myHostImpl->drawLayers(frame);
3178 myHostImpl->didDrawAllLayers(frame); 3178 myHostImpl->didDrawAllLayers(frame);
3179 } 3179 }
3180 3180
3181 // "Re-occlude" surface S1 and repeat draw. 3181 // "Re-occlude" surface S1 and repeat draw.
3182 // Must remove S1's render pass since it is now available in full. 3182 // Must remove S1's render pass since it is now available in full.
3183 // S2 has no change so must also be removed. 3183 // S2 has no change so must also be removed.
3184 transform = layerS2Ptr->transform(); 3184 transform = layerS2Ptr->transform();
3185 transform.translate(-15, -15); 3185 transform.translate(-15, -15);
3186 layerS2Ptr->setTransform(transform); 3186 layerS2Ptr->setTransform(transform);
3187 { 3187 {
3188 CCLayerTreeHostImpl::FrameData frame; 3188 LayerTreeHostImpl::FrameData frame;
3189 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3189 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3190 3190
3191 // Must receive 1 render pass - for the root. 3191 // Must receive 1 render pass - for the root.
3192 ASSERT_EQ(1U, frame.renderPasses.size()); 3192 ASSERT_EQ(1U, frame.renderPasses.size());
3193 3193
3194 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size()); 3194 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size());
3195 3195
3196 myHostImpl->drawLayers(frame); 3196 myHostImpl->drawLayers(frame);
3197 myHostImpl->didDrawAllLayers(frame); 3197 myHostImpl->didDrawAllLayers(frame);
3198 } 3198 }
3199 3199
3200 } 3200 }
3201 3201
3202 TEST_P(CCLayerTreeHostImplTest, textureCachingWithOcclusionEarlyOut) 3202 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionEarlyOut)
3203 { 3203 {
3204 CCSettings::setPartialSwapEnabled(false); 3204 Settings::setPartialSwapEnabled(false);
3205 3205
3206 CCLayerTreeSettings settings; 3206 LayerTreeSettings settings;
3207 settings.minimumOcclusionTrackingSize = IntSize(); 3207 settings.minimumOcclusionTrackingSize = IntSize();
3208 scoped_ptr<CCLayerTreeHostImpl> myHostImpl = CCLayerTreeHostImpl::create(set tings, this); 3208 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting s, this);
3209 3209
3210 // Layers are structure as follows: 3210 // Layers are structure as follows:
3211 // 3211 //
3212 // R +-- S1 +- L10 (owning, non drawing) 3212 // R +-- S1 +- L10 (owning, non drawing)
3213 // | +- L11 (corner, unoccluded) 3213 // | +- L11 (corner, unoccluded)
3214 // | +- L12 (corner, unoccluded) 3214 // | +- L12 (corner, unoccluded)
3215 // | +- L13 (corner, unoccluded) 3215 // | +- L13 (corner, unoccluded)
3216 // | +- L14 (corner, entirely occluded) 3216 // | +- L14 (corner, entirely occluded)
3217 // | 3217 // |
3218 // +-- S2 +- L20 (owning, drawing) 3218 // +-- S2 +- L20 (owning, drawing)
3219 // 3219 //
3220 3220
3221 CCLayerImpl* rootPtr; 3221 LayerImpl* rootPtr;
3222 CCLayerImpl* layerS1Ptr; 3222 LayerImpl* layerS1Ptr;
3223 CCLayerImpl* layerS2Ptr; 3223 LayerImpl* layerS2Ptr;
3224 3224
3225 scoped_ptr<CCGraphicsContext> context = FakeWebCompositorOutputSurface::crea te(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<CCGr aphicsContext>(); 3225 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create (scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi csContext>();
3226 3226
3227 IntSize rootSize(1000, 1000); 3227 IntSize rootSize(1000, 1000);
3228 3228
3229 myHostImpl->initializeRenderer(context.Pass()); 3229 myHostImpl->initializeRenderer(context.Pass());
3230 myHostImpl->setViewportSize(IntSize(rootSize.width(), rootSize.height()), In tSize(rootSize.width(), rootSize.height())); 3230 myHostImpl->setViewportSize(IntSize(rootSize.width(), rootSize.height()), In tSize(rootSize.width(), rootSize.height()));
3231 3231
3232 scoped_ptr<CCLayerImpl> root = CCLayerImpl::create(1); 3232 scoped_ptr<LayerImpl> root = LayerImpl::create(1);
3233 rootPtr = root.get(); 3233 rootPtr = root.get();
3234 3234
3235 root->setAnchorPoint(FloatPoint(0, 0)); 3235 root->setAnchorPoint(FloatPoint(0, 0));
3236 root->setPosition(FloatPoint(0, 0)); 3236 root->setPosition(FloatPoint(0, 0));
3237 root->setBounds(rootSize); 3237 root->setBounds(rootSize);
3238 root->setContentBounds(rootSize); 3238 root->setContentBounds(rootSize);
3239 root->setDrawsContent(true); 3239 root->setDrawsContent(true);
3240 root->setMasksToBounds(true); 3240 root->setMasksToBounds(true);
3241 myHostImpl->setRootLayer(root.Pass()); 3241 myHostImpl->setRootLayer(root.Pass());
3242 3242
3243 addDrawingLayerTo(rootPtr, 2, IntRect(0, 0, 800, 800), &layerS1Ptr); 3243 addDrawingLayerTo(rootPtr, 2, IntRect(0, 0, 800, 800), &layerS1Ptr);
3244 layerS1Ptr->setForceRenderSurface(true); 3244 layerS1Ptr->setForceRenderSurface(true);
3245 layerS1Ptr->setDrawsContent(false); 3245 layerS1Ptr->setDrawsContent(false);
3246 3246
3247 addDrawingLayerTo(layerS1Ptr, 3, IntRect(0, 0, 300, 300), 0); // L11 3247 addDrawingLayerTo(layerS1Ptr, 3, IntRect(0, 0, 300, 300), 0); // L11
3248 addDrawingLayerTo(layerS1Ptr, 4, IntRect(0, 500, 300, 300), 0); // L12 3248 addDrawingLayerTo(layerS1Ptr, 4, IntRect(0, 500, 300, 300), 0); // L12
3249 addDrawingLayerTo(layerS1Ptr, 5, IntRect(500, 0, 300, 300), 0); // L13 3249 addDrawingLayerTo(layerS1Ptr, 5, IntRect(500, 0, 300, 300), 0); // L13
3250 addDrawingLayerTo(layerS1Ptr, 6, IntRect(500, 500, 300, 300), 0); // L14 3250 addDrawingLayerTo(layerS1Ptr, 6, IntRect(500, 500, 300, 300), 0); // L14
3251 addDrawingLayerTo(layerS1Ptr, 9, IntRect(500, 500, 300, 300), 0); // L14 3251 addDrawingLayerTo(layerS1Ptr, 9, IntRect(500, 500, 300, 300), 0); // L14
3252 3252
3253 addDrawingLayerTo(rootPtr, 7, IntRect(450, 450, 450, 450), &layerS2Ptr); 3253 addDrawingLayerTo(rootPtr, 7, IntRect(450, 450, 450, 450), &layerS2Ptr);
3254 layerS2Ptr->setForceRenderSurface(true); 3254 layerS2Ptr->setForceRenderSurface(true);
3255 3255
3256 // Initial draw - must receive all quads 3256 // Initial draw - must receive all quads
3257 { 3257 {
3258 CCLayerTreeHostImpl::FrameData frame; 3258 LayerTreeHostImpl::FrameData frame;
3259 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3259 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3260 3260
3261 // Must receive 3 render passes. 3261 // Must receive 3 render passes.
3262 // For Root, there are 2 quads; for S1, there are 3 quads; for S2, there is 1 quad. 3262 // For Root, there are 2 quads; for S1, there are 3 quads; for S2, there is 1 quad.
3263 ASSERT_EQ(3U, frame.renderPasses.size()); 3263 ASSERT_EQ(3U, frame.renderPasses.size());
3264 3264
3265 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); 3265 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size());
3266 3266
3267 // L14 is culled, so only 3 quads. 3267 // L14 is culled, so only 3 quads.
3268 EXPECT_EQ(3U, frame.renderPasses[1]->quadList().size()); 3268 EXPECT_EQ(3U, frame.renderPasses[1]->quadList().size());
3269 EXPECT_EQ(2U, frame.renderPasses[2]->quadList().size()); 3269 EXPECT_EQ(2U, frame.renderPasses[2]->quadList().size());
3270 3270
3271 myHostImpl->drawLayers(frame); 3271 myHostImpl->drawLayers(frame);
3272 myHostImpl->didDrawAllLayers(frame); 3272 myHostImpl->didDrawAllLayers(frame);
3273 } 3273 }
3274 3274
3275 // "Unocclude" surface S1 and repeat draw. 3275 // "Unocclude" surface S1 and repeat draw.
3276 // Must remove S2's render pass since it's cached; 3276 // Must remove S2's render pass since it's cached;
3277 // Must keep S1 quads because texture contained external occlusion. 3277 // Must keep S1 quads because texture contained external occlusion.
3278 WebTransformationMatrix transform = layerS2Ptr->transform(); 3278 WebTransformationMatrix transform = layerS2Ptr->transform();
3279 transform.translate(100, 100); 3279 transform.translate(100, 100);
3280 layerS2Ptr->setTransform(transform); 3280 layerS2Ptr->setTransform(transform);
3281 { 3281 {
3282 CCLayerTreeHostImpl::FrameData frame; 3282 LayerTreeHostImpl::FrameData frame;
3283 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3283 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3284 3284
3285 // Must receive 2 render passes. 3285 // Must receive 2 render passes.
3286 // For Root, there are 2 quads 3286 // For Root, there are 2 quads
3287 // For S1, the number of quads depends on what got unoccluded, so not as serted beyond being positive. 3287 // For S1, the number of quads depends on what got unoccluded, so not as serted beyond being positive.
3288 // For S2, there is no render pass 3288 // For S2, there is no render pass
3289 ASSERT_EQ(2U, frame.renderPasses.size()); 3289 ASSERT_EQ(2U, frame.renderPasses.size());
3290 3290
3291 EXPECT_GT(frame.renderPasses[0]->quadList().size(), 0U); 3291 EXPECT_GT(frame.renderPasses[0]->quadList().size(), 0U);
3292 EXPECT_EQ(2U, frame.renderPasses[1]->quadList().size()); 3292 EXPECT_EQ(2U, frame.renderPasses[1]->quadList().size());
3293 3293
3294 myHostImpl->drawLayers(frame); 3294 myHostImpl->drawLayers(frame);
3295 myHostImpl->didDrawAllLayers(frame); 3295 myHostImpl->didDrawAllLayers(frame);
3296 } 3296 }
3297 3297
3298 // "Re-occlude" surface S1 and repeat draw. 3298 // "Re-occlude" surface S1 and repeat draw.
3299 // Must remove S1's render pass since it is now available in full. 3299 // Must remove S1's render pass since it is now available in full.
3300 // S2 has no change so must also be removed. 3300 // S2 has no change so must also be removed.
3301 transform = layerS2Ptr->transform(); 3301 transform = layerS2Ptr->transform();
3302 transform.translate(-15, -15); 3302 transform.translate(-15, -15);
3303 layerS2Ptr->setTransform(transform); 3303 layerS2Ptr->setTransform(transform);
3304 { 3304 {
3305 CCLayerTreeHostImpl::FrameData frame; 3305 LayerTreeHostImpl::FrameData frame;
3306 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3306 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3307 3307
3308 // Must receive 1 render pass - for the root. 3308 // Must receive 1 render pass - for the root.
3309 ASSERT_EQ(1U, frame.renderPasses.size()); 3309 ASSERT_EQ(1U, frame.renderPasses.size());
3310 3310
3311 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size()); 3311 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size());
3312 3312
3313 myHostImpl->drawLayers(frame); 3313 myHostImpl->drawLayers(frame);
3314 myHostImpl->didDrawAllLayers(frame); 3314 myHostImpl->didDrawAllLayers(frame);
3315 } 3315 }
3316 } 3316 }
3317 3317
3318 TEST_P(CCLayerTreeHostImplTest, textureCachingWithOcclusionExternalOverInternal) 3318 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionExternalOverInternal)
3319 { 3319 {
3320 CCSettings::setPartialSwapEnabled(false); 3320 Settings::setPartialSwapEnabled(false);
3321 3321
3322 CCLayerTreeSettings settings; 3322 LayerTreeSettings settings;
3323 settings.minimumOcclusionTrackingSize = IntSize(); 3323 settings.minimumOcclusionTrackingSize = IntSize();
3324 scoped_ptr<CCLayerTreeHostImpl> myHostImpl = CCLayerTreeHostImpl::create(set tings, this); 3324 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting s, this);
3325 3325
3326 // Layers are structured as follows: 3326 // Layers are structured as follows:
3327 // 3327 //
3328 // R +-- S1 +- L10 (owning, drawing) 3328 // R +-- S1 +- L10 (owning, drawing)
3329 // | +- L11 (corner, occluded by L12) 3329 // | +- L11 (corner, occluded by L12)
3330 // | +- L12 (opposite corner) 3330 // | +- L12 (opposite corner)
3331 // | 3331 // |
3332 // +-- S2 +- L20 (owning, drawing) 3332 // +-- S2 +- L20 (owning, drawing)
3333 // 3333 //
3334 3334
3335 CCLayerImpl* rootPtr; 3335 LayerImpl* rootPtr;
3336 CCLayerImpl* layerS1Ptr; 3336 LayerImpl* layerS1Ptr;
3337 CCLayerImpl* layerS2Ptr; 3337 LayerImpl* layerS2Ptr;
3338 3338
3339 scoped_ptr<CCGraphicsContext> context = FakeWebCompositorOutputSurface::crea te(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<CCGr aphicsContext>(); 3339 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create (scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi csContext>();
3340 3340
3341 IntSize rootSize(1000, 1000); 3341 IntSize rootSize(1000, 1000);
3342 3342
3343 myHostImpl->initializeRenderer(context.Pass()); 3343 myHostImpl->initializeRenderer(context.Pass());
3344 myHostImpl->setViewportSize(IntSize(rootSize.width(), rootSize.height()), In tSize(rootSize.width(), rootSize.height())); 3344 myHostImpl->setViewportSize(IntSize(rootSize.width(), rootSize.height()), In tSize(rootSize.width(), rootSize.height()));
3345 3345
3346 scoped_ptr<CCLayerImpl> root = CCLayerImpl::create(1); 3346 scoped_ptr<LayerImpl> root = LayerImpl::create(1);
3347 rootPtr = root.get(); 3347 rootPtr = root.get();
3348 3348
3349 root->setAnchorPoint(FloatPoint(0, 0)); 3349 root->setAnchorPoint(FloatPoint(0, 0));
3350 root->setPosition(FloatPoint(0, 0)); 3350 root->setPosition(FloatPoint(0, 0));
3351 root->setBounds(rootSize); 3351 root->setBounds(rootSize);
3352 root->setContentBounds(rootSize); 3352 root->setContentBounds(rootSize);
3353 root->setDrawsContent(true); 3353 root->setDrawsContent(true);
3354 root->setMasksToBounds(true); 3354 root->setMasksToBounds(true);
3355 myHostImpl->setRootLayer(root.Pass()); 3355 myHostImpl->setRootLayer(root.Pass());
3356 3356
3357 addDrawingLayerTo(rootPtr, 2, IntRect(0, 0, 400, 400), &layerS1Ptr); 3357 addDrawingLayerTo(rootPtr, 2, IntRect(0, 0, 400, 400), &layerS1Ptr);
3358 layerS1Ptr->setForceRenderSurface(true); 3358 layerS1Ptr->setForceRenderSurface(true);
3359 3359
3360 addDrawingLayerTo(layerS1Ptr, 3, IntRect(0, 0, 300, 300), 0); // L11 3360 addDrawingLayerTo(layerS1Ptr, 3, IntRect(0, 0, 300, 300), 0); // L11
3361 addDrawingLayerTo(layerS1Ptr, 4, IntRect(100, 0, 300, 300), 0); // L12 3361 addDrawingLayerTo(layerS1Ptr, 4, IntRect(100, 0, 300, 300), 0); // L12
3362 3362
3363 addDrawingLayerTo(rootPtr, 7, IntRect(200, 0, 300, 300), &layerS2Ptr); 3363 addDrawingLayerTo(rootPtr, 7, IntRect(200, 0, 300, 300), &layerS2Ptr);
3364 layerS2Ptr->setForceRenderSurface(true); 3364 layerS2Ptr->setForceRenderSurface(true);
3365 3365
3366 // Initial draw - must receive all quads 3366 // Initial draw - must receive all quads
3367 { 3367 {
3368 CCLayerTreeHostImpl::FrameData frame; 3368 LayerTreeHostImpl::FrameData frame;
3369 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3369 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3370 3370
3371 // Must receive 3 render passes. 3371 // Must receive 3 render passes.
3372 // For Root, there are 2 quads; for S1, there are 3 quads; for S2, there is 1 quad. 3372 // For Root, there are 2 quads; for S1, there are 3 quads; for S2, there is 1 quad.
3373 ASSERT_EQ(3U, frame.renderPasses.size()); 3373 ASSERT_EQ(3U, frame.renderPasses.size());
3374 3374
3375 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); 3375 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size());
3376 EXPECT_EQ(3U, frame.renderPasses[1]->quadList().size()); 3376 EXPECT_EQ(3U, frame.renderPasses[1]->quadList().size());
3377 EXPECT_EQ(2U, frame.renderPasses[2]->quadList().size()); 3377 EXPECT_EQ(2U, frame.renderPasses[2]->quadList().size());
3378 3378
3379 myHostImpl->drawLayers(frame); 3379 myHostImpl->drawLayers(frame);
3380 myHostImpl->didDrawAllLayers(frame); 3380 myHostImpl->didDrawAllLayers(frame);
3381 } 3381 }
3382 3382
3383 // "Unocclude" surface S1 and repeat draw. 3383 // "Unocclude" surface S1 and repeat draw.
3384 // Must remove S2's render pass since it's cached; 3384 // Must remove S2's render pass since it's cached;
3385 // Must keep S1 quads because texture contained external occlusion. 3385 // Must keep S1 quads because texture contained external occlusion.
3386 WebTransformationMatrix transform = layerS2Ptr->transform(); 3386 WebTransformationMatrix transform = layerS2Ptr->transform();
3387 transform.translate(300, 0); 3387 transform.translate(300, 0);
3388 layerS2Ptr->setTransform(transform); 3388 layerS2Ptr->setTransform(transform);
3389 { 3389 {
3390 CCLayerTreeHostImpl::FrameData frame; 3390 LayerTreeHostImpl::FrameData frame;
3391 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3391 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3392 3392
3393 // Must receive 2 render passes. 3393 // Must receive 2 render passes.
3394 // For Root, there are 2 quads 3394 // For Root, there are 2 quads
3395 // For S1, the number of quads depends on what got unoccluded, so not as serted beyond being positive. 3395 // For S1, the number of quads depends on what got unoccluded, so not as serted beyond being positive.
3396 // For S2, there is no render pass 3396 // For S2, there is no render pass
3397 ASSERT_EQ(2U, frame.renderPasses.size()); 3397 ASSERT_EQ(2U, frame.renderPasses.size());
3398 3398
3399 EXPECT_GT(frame.renderPasses[0]->quadList().size(), 0U); 3399 EXPECT_GT(frame.renderPasses[0]->quadList().size(), 0U);
3400 EXPECT_EQ(2U, frame.renderPasses[1]->quadList().size()); 3400 EXPECT_EQ(2U, frame.renderPasses[1]->quadList().size());
3401 3401
3402 myHostImpl->drawLayers(frame); 3402 myHostImpl->drawLayers(frame);
3403 myHostImpl->didDrawAllLayers(frame); 3403 myHostImpl->didDrawAllLayers(frame);
3404 } 3404 }
3405 } 3405 }
3406 3406
3407 TEST_P(CCLayerTreeHostImplTest, textureCachingWithOcclusionExternalNotAligned) 3407 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionExternalNotAligned)
3408 { 3408 {
3409 CCSettings::setPartialSwapEnabled(false); 3409 Settings::setPartialSwapEnabled(false);
3410 3410
3411 CCLayerTreeSettings settings; 3411 LayerTreeSettings settings;
3412 scoped_ptr<CCLayerTreeHostImpl> myHostImpl = CCLayerTreeHostImpl::create(set tings, this); 3412 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting s, this);
3413 3413
3414 // Layers are structured as follows: 3414 // Layers are structured as follows:
3415 // 3415 //
3416 // R +-- S1 +- L10 (rotated, drawing) 3416 // R +-- S1 +- L10 (rotated, drawing)
3417 // +- L11 (occupies half surface) 3417 // +- L11 (occupies half surface)
3418 3418
3419 CCLayerImpl* rootPtr; 3419 LayerImpl* rootPtr;
3420 CCLayerImpl* layerS1Ptr; 3420 LayerImpl* layerS1Ptr;
3421 3421
3422 scoped_ptr<CCGraphicsContext> context = FakeWebCompositorOutputSurface::crea te(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<CCGr aphicsContext>(); 3422 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create (scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi csContext>();
3423 3423
3424 IntSize rootSize(1000, 1000); 3424 IntSize rootSize(1000, 1000);
3425 3425
3426 myHostImpl->initializeRenderer(context.Pass()); 3426 myHostImpl->initializeRenderer(context.Pass());
3427 myHostImpl->setViewportSize(IntSize(rootSize.width(), rootSize.height()), In tSize(rootSize.width(), rootSize.height())); 3427 myHostImpl->setViewportSize(IntSize(rootSize.width(), rootSize.height()), In tSize(rootSize.width(), rootSize.height()));
3428 3428
3429 scoped_ptr<CCLayerImpl> root = CCLayerImpl::create(1); 3429 scoped_ptr<LayerImpl> root = LayerImpl::create(1);
3430 rootPtr = root.get(); 3430 rootPtr = root.get();
3431 3431
3432 root->setAnchorPoint(FloatPoint(0, 0)); 3432 root->setAnchorPoint(FloatPoint(0, 0));
3433 root->setPosition(FloatPoint(0, 0)); 3433 root->setPosition(FloatPoint(0, 0));
3434 root->setBounds(rootSize); 3434 root->setBounds(rootSize);
3435 root->setContentBounds(rootSize); 3435 root->setContentBounds(rootSize);
3436 root->setDrawsContent(true); 3436 root->setDrawsContent(true);
3437 root->setMasksToBounds(true); 3437 root->setMasksToBounds(true);
3438 myHostImpl->setRootLayer(root.Pass()); 3438 myHostImpl->setRootLayer(root.Pass());
3439 3439
3440 addDrawingLayerTo(rootPtr, 2, IntRect(0, 0, 400, 400), &layerS1Ptr); 3440 addDrawingLayerTo(rootPtr, 2, IntRect(0, 0, 400, 400), &layerS1Ptr);
3441 layerS1Ptr->setForceRenderSurface(true); 3441 layerS1Ptr->setForceRenderSurface(true);
3442 WebTransformationMatrix transform = layerS1Ptr->transform(); 3442 WebTransformationMatrix transform = layerS1Ptr->transform();
3443 transform.translate(200, 200); 3443 transform.translate(200, 200);
3444 transform.rotate(45); 3444 transform.rotate(45);
3445 transform.translate(-200, -200); 3445 transform.translate(-200, -200);
3446 layerS1Ptr->setTransform(transform); 3446 layerS1Ptr->setTransform(transform);
3447 3447
3448 addDrawingLayerTo(layerS1Ptr, 3, IntRect(200, 0, 200, 400), 0); // L11 3448 addDrawingLayerTo(layerS1Ptr, 3, IntRect(200, 0, 200, 400), 0); // L11
3449 3449
3450 // Initial draw - must receive all quads 3450 // Initial draw - must receive all quads
3451 { 3451 {
3452 CCLayerTreeHostImpl::FrameData frame; 3452 LayerTreeHostImpl::FrameData frame;
3453 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3453 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3454 3454
3455 // Must receive 2 render passes. 3455 // Must receive 2 render passes.
3456 ASSERT_EQ(2U, frame.renderPasses.size()); 3456 ASSERT_EQ(2U, frame.renderPasses.size());
3457 3457
3458 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size()); 3458 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size());
3459 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); 3459 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size());
3460 3460
3461 myHostImpl->drawLayers(frame); 3461 myHostImpl->drawLayers(frame);
3462 myHostImpl->didDrawAllLayers(frame); 3462 myHostImpl->didDrawAllLayers(frame);
3463 } 3463 }
3464 3464
3465 // Change opacity and draw. Verify we used cached texture. 3465 // Change opacity and draw. Verify we used cached texture.
3466 layerS1Ptr->setOpacity(0.2f); 3466 layerS1Ptr->setOpacity(0.2f);
3467 { 3467 {
3468 CCLayerTreeHostImpl::FrameData frame; 3468 LayerTreeHostImpl::FrameData frame;
3469 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3469 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3470 3470
3471 // One render pass must be gone due to cached texture. 3471 // One render pass must be gone due to cached texture.
3472 ASSERT_EQ(1U, frame.renderPasses.size()); 3472 ASSERT_EQ(1U, frame.renderPasses.size());
3473 3473
3474 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); 3474 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size());
3475 3475
3476 myHostImpl->drawLayers(frame); 3476 myHostImpl->drawLayers(frame);
3477 myHostImpl->didDrawAllLayers(frame); 3477 myHostImpl->didDrawAllLayers(frame);
3478 } 3478 }
3479 } 3479 }
3480 3480
3481 TEST_P(CCLayerTreeHostImplTest, textureCachingWithOcclusionPartialSwap) 3481 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionPartialSwap)
3482 { 3482 {
3483 CCSettings::setPartialSwapEnabled(true); 3483 Settings::setPartialSwapEnabled(true);
3484 3484
3485 CCLayerTreeSettings settings; 3485 LayerTreeSettings settings;
3486 settings.minimumOcclusionTrackingSize = IntSize(); 3486 settings.minimumOcclusionTrackingSize = IntSize();
3487 scoped_ptr<CCLayerTreeHostImpl> myHostImpl = CCLayerTreeHostImpl::create(set tings, this); 3487 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting s, this);
3488 3488
3489 // Layers are structure as follows: 3489 // Layers are structure as follows:
3490 // 3490 //
3491 // R +-- S1 +- L10 (owning) 3491 // R +-- S1 +- L10 (owning)
3492 // | +- L11 3492 // | +- L11
3493 // | +- L12 3493 // | +- L12
3494 // | 3494 // |
3495 // +-- S2 +- L20 (owning) 3495 // +-- S2 +- L20 (owning)
3496 // +- L21 3496 // +- L21
3497 // 3497 //
3498 // Occlusion: 3498 // Occlusion:
3499 // L12 occludes L11 (internal) 3499 // L12 occludes L11 (internal)
3500 // L20 occludes L10 (external) 3500 // L20 occludes L10 (external)
3501 // L21 occludes L20 (internal) 3501 // L21 occludes L20 (internal)
3502 3502
3503 CCLayerImpl* rootPtr; 3503 LayerImpl* rootPtr;
3504 CCLayerImpl* layerS1Ptr; 3504 LayerImpl* layerS1Ptr;
3505 CCLayerImpl* layerS2Ptr; 3505 LayerImpl* layerS2Ptr;
3506 3506
3507 scoped_ptr<CCGraphicsContext> context = FakeWebCompositorOutputSurface::crea te(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<CCGr aphicsContext>(); 3507 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create (scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi csContext>();
3508 3508
3509 IntSize rootSize(1000, 1000); 3509 IntSize rootSize(1000, 1000);
3510 3510
3511 myHostImpl->initializeRenderer(context.Pass()); 3511 myHostImpl->initializeRenderer(context.Pass());
3512 myHostImpl->setViewportSize(IntSize(rootSize.width(), rootSize.height()), In tSize(rootSize.width(), rootSize.height())); 3512 myHostImpl->setViewportSize(IntSize(rootSize.width(), rootSize.height()), In tSize(rootSize.width(), rootSize.height()));
3513 3513
3514 scoped_ptr<CCLayerImpl> root = CCLayerImpl::create(1); 3514 scoped_ptr<LayerImpl> root = LayerImpl::create(1);
3515 rootPtr = root.get(); 3515 rootPtr = root.get();
3516 3516
3517 root->setAnchorPoint(FloatPoint(0, 0)); 3517 root->setAnchorPoint(FloatPoint(0, 0));
3518 root->setPosition(FloatPoint(0, 0)); 3518 root->setPosition(FloatPoint(0, 0));
3519 root->setBounds(rootSize); 3519 root->setBounds(rootSize);
3520 root->setContentBounds(rootSize); 3520 root->setContentBounds(rootSize);
3521 root->setDrawsContent(true); 3521 root->setDrawsContent(true);
3522 root->setMasksToBounds(true); 3522 root->setMasksToBounds(true);
3523 myHostImpl->setRootLayer(root.Pass()); 3523 myHostImpl->setRootLayer(root.Pass());
3524 3524
3525 addDrawingLayerTo(rootPtr, 2, IntRect(300, 300, 300, 300), &layerS1Ptr); 3525 addDrawingLayerTo(rootPtr, 2, IntRect(300, 300, 300, 300), &layerS1Ptr);
3526 layerS1Ptr->setForceRenderSurface(true); 3526 layerS1Ptr->setForceRenderSurface(true);
3527 3527
3528 addDrawingLayerTo(layerS1Ptr, 3, IntRect(10, 10, 10, 10), 0); // L11 3528 addDrawingLayerTo(layerS1Ptr, 3, IntRect(10, 10, 10, 10), 0); // L11
3529 addDrawingLayerTo(layerS1Ptr, 4, IntRect(0, 0, 30, 30), 0); // L12 3529 addDrawingLayerTo(layerS1Ptr, 4, IntRect(0, 0, 30, 30), 0); // L12
3530 3530
3531 addDrawingLayerTo(rootPtr, 5, IntRect(550, 250, 300, 400), &layerS2Ptr); 3531 addDrawingLayerTo(rootPtr, 5, IntRect(550, 250, 300, 400), &layerS2Ptr);
3532 layerS2Ptr->setForceRenderSurface(true); 3532 layerS2Ptr->setForceRenderSurface(true);
3533 3533
3534 addDrawingLayerTo(layerS2Ptr, 6, IntRect(20, 20, 5, 5), 0); // L21 3534 addDrawingLayerTo(layerS2Ptr, 6, IntRect(20, 20, 5, 5), 0); // L21
3535 3535
3536 // Initial draw - must receive all quads 3536 // Initial draw - must receive all quads
3537 { 3537 {
3538 CCLayerTreeHostImpl::FrameData frame; 3538 LayerTreeHostImpl::FrameData frame;
3539 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3539 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3540 3540
3541 // Must receive 3 render passes. 3541 // Must receive 3 render passes.
3542 // For Root, there are 2 quads; for S1, there are 2 quads (one is occlud ed); for S2, there is 2 quads. 3542 // For Root, there are 2 quads; for S1, there are 2 quads (one is occlud ed); for S2, there is 2 quads.
3543 ASSERT_EQ(3U, frame.renderPasses.size()); 3543 ASSERT_EQ(3U, frame.renderPasses.size());
3544 3544
3545 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size()); 3545 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size());
3546 EXPECT_EQ(2U, frame.renderPasses[1]->quadList().size()); 3546 EXPECT_EQ(2U, frame.renderPasses[1]->quadList().size());
3547 EXPECT_EQ(2U, frame.renderPasses[2]->quadList().size()); 3547 EXPECT_EQ(2U, frame.renderPasses[2]->quadList().size());
3548 3548
3549 myHostImpl->drawLayers(frame); 3549 myHostImpl->drawLayers(frame);
3550 myHostImpl->didDrawAllLayers(frame); 3550 myHostImpl->didDrawAllLayers(frame);
3551 } 3551 }
3552 3552
3553 // "Unocclude" surface S1 and repeat draw. 3553 // "Unocclude" surface S1 and repeat draw.
3554 // Must remove S2's render pass since it's cached; 3554 // Must remove S2's render pass since it's cached;
3555 // Must keep S1 quads because texture contained external occlusion. 3555 // Must keep S1 quads because texture contained external occlusion.
3556 WebTransformationMatrix transform = layerS2Ptr->transform(); 3556 WebTransformationMatrix transform = layerS2Ptr->transform();
3557 transform.translate(150, 150); 3557 transform.translate(150, 150);
3558 layerS2Ptr->setTransform(transform); 3558 layerS2Ptr->setTransform(transform);
3559 { 3559 {
3560 CCLayerTreeHostImpl::FrameData frame; 3560 LayerTreeHostImpl::FrameData frame;
3561 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3561 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3562 3562
3563 // Must receive 2 render passes. 3563 // Must receive 2 render passes.
3564 // For Root, there are 2 quads. 3564 // For Root, there are 2 quads.
3565 // For S1, there are 2 quads. 3565 // For S1, there are 2 quads.
3566 // For S2, there is no render pass 3566 // For S2, there is no render pass
3567 ASSERT_EQ(2U, frame.renderPasses.size()); 3567 ASSERT_EQ(2U, frame.renderPasses.size());
3568 3568
3569 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size()); 3569 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size());
3570 EXPECT_EQ(2U, frame.renderPasses[1]->quadList().size()); 3570 EXPECT_EQ(2U, frame.renderPasses[1]->quadList().size());
3571 3571
3572 myHostImpl->drawLayers(frame); 3572 myHostImpl->drawLayers(frame);
3573 myHostImpl->didDrawAllLayers(frame); 3573 myHostImpl->didDrawAllLayers(frame);
3574 } 3574 }
3575 3575
3576 // "Re-occlude" surface S1 and repeat draw. 3576 // "Re-occlude" surface S1 and repeat draw.
3577 // Must remove S1's render pass since it is now available in full. 3577 // Must remove S1's render pass since it is now available in full.
3578 // S2 has no change so must also be removed. 3578 // S2 has no change so must also be removed.
3579 transform = layerS2Ptr->transform(); 3579 transform = layerS2Ptr->transform();
3580 transform.translate(-15, -15); 3580 transform.translate(-15, -15);
3581 layerS2Ptr->setTransform(transform); 3581 layerS2Ptr->setTransform(transform);
3582 { 3582 {
3583 CCLayerTreeHostImpl::FrameData frame; 3583 LayerTreeHostImpl::FrameData frame;
3584 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3584 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3585 3585
3586 // Root render pass only. 3586 // Root render pass only.
3587 ASSERT_EQ(1U, frame.renderPasses.size()); 3587 ASSERT_EQ(1U, frame.renderPasses.size());
3588 3588
3589 myHostImpl->drawLayers(frame); 3589 myHostImpl->drawLayers(frame);
3590 myHostImpl->didDrawAllLayers(frame); 3590 myHostImpl->didDrawAllLayers(frame);
3591 } 3591 }
3592 } 3592 }
3593 3593
3594 TEST_P(CCLayerTreeHostImplTest, textureCachingWithScissor) 3594 TEST_P(LayerTreeHostImplTest, textureCachingWithScissor)
3595 { 3595 {
3596 CCSettings::setPartialSwapEnabled(false); 3596 Settings::setPartialSwapEnabled(false);
3597 3597
3598 CCLayerTreeSettings settings; 3598 LayerTreeSettings settings;
3599 settings.minimumOcclusionTrackingSize = IntSize(); 3599 settings.minimumOcclusionTrackingSize = IntSize();
3600 scoped_ptr<CCLayerTreeHostImpl> myHostImpl = CCLayerTreeHostImpl::create(set tings, this); 3600 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting s, this);
3601 3601
3602 /* 3602 /*
3603 Layers are created as follows: 3603 Layers are created as follows:
3604 3604
3605 +--------------------+ 3605 +--------------------+
3606 | 1 | 3606 | 1 |
3607 | +-----------+ | 3607 | +-----------+ |
3608 | | 2 | | 3608 | | 2 | |
3609 | | +-------------------+ 3609 | | +-------------------+
3610 | | | 3 | 3610 | | | 3 |
3611 | | +-------------------+ 3611 | | +-------------------+
3612 | | | | 3612 | | | |
3613 | +-----------+ | 3613 | +-----------+ |
3614 | | 3614 | |
3615 | | 3615 | |
3616 +--------------------+ 3616 +--------------------+
3617 3617
3618 Layers 1, 2 have render surfaces 3618 Layers 1, 2 have render surfaces
3619 */ 3619 */
3620 scoped_ptr<CCLayerImpl> root = CCLayerImpl::create(1); 3620 scoped_ptr<LayerImpl> root = LayerImpl::create(1);
3621 scoped_ptr<CCTiledLayerImpl> child = CCTiledLayerImpl::create(2); 3621 scoped_ptr<TiledLayerImpl> child = TiledLayerImpl::create(2);
3622 scoped_ptr<CCLayerImpl> grandChild = CCLayerImpl::create(3); 3622 scoped_ptr<LayerImpl> grandChild = LayerImpl::create(3);
3623 3623
3624 IntRect rootRect(0, 0, 100, 100); 3624 IntRect rootRect(0, 0, 100, 100);
3625 IntRect childRect(10, 10, 50, 50); 3625 IntRect childRect(10, 10, 50, 50);
3626 IntRect grandChildRect(5, 5, 150, 150); 3626 IntRect grandChildRect(5, 5, 150, 150);
3627 3627
3628 scoped_ptr<CCGraphicsContext> context = FakeWebCompositorOutputSurface::crea te(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<CCGr aphicsContext>(); 3628 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create (scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi csContext>();
3629 myHostImpl->initializeRenderer(context.Pass()); 3629 myHostImpl->initializeRenderer(context.Pass());
3630 3630
3631 root->setAnchorPoint(FloatPoint(0, 0)); 3631 root->setAnchorPoint(FloatPoint(0, 0));
3632 root->setPosition(FloatPoint(rootRect.x(), rootRect.y())); 3632 root->setPosition(FloatPoint(rootRect.x(), rootRect.y()));
3633 root->setBounds(IntSize(rootRect.width(), rootRect.height())); 3633 root->setBounds(IntSize(rootRect.width(), rootRect.height()));
3634 root->setContentBounds(root->bounds()); 3634 root->setContentBounds(root->bounds());
3635 root->setDrawsContent(true); 3635 root->setDrawsContent(true);
3636 root->setMasksToBounds(true); 3636 root->setMasksToBounds(true);
3637 3637
3638 child->setAnchorPoint(FloatPoint(0, 0)); 3638 child->setAnchorPoint(FloatPoint(0, 0));
3639 child->setPosition(FloatPoint(childRect.x(), childRect.y())); 3639 child->setPosition(FloatPoint(childRect.x(), childRect.y()));
3640 child->setOpacity(0.5); 3640 child->setOpacity(0.5);
3641 child->setBounds(IntSize(childRect.width(), childRect.height())); 3641 child->setBounds(IntSize(childRect.width(), childRect.height()));
3642 child->setContentBounds(child->bounds()); 3642 child->setContentBounds(child->bounds());
3643 child->setDrawsContent(true); 3643 child->setDrawsContent(true);
3644 child->setSkipsDraw(false); 3644 child->setSkipsDraw(false);
3645 3645
3646 // child layer has 10x10 tiles. 3646 // child layer has 10x10 tiles.
3647 scoped_ptr<CCLayerTilingData> tiler = CCLayerTilingData::create(IntSize(10, 10), CCLayerTilingData::HasBorderTexels); 3647 scoped_ptr<LayerTilingData> tiler = LayerTilingData::create(IntSize(10, 10), LayerTilingData::HasBorderTexels);
3648 tiler->setBounds(child->contentBounds()); 3648 tiler->setBounds(child->contentBounds());
3649 child->setTilingData(*tiler.get()); 3649 child->setTilingData(*tiler.get());
3650 3650
3651 grandChild->setAnchorPoint(FloatPoint(0, 0)); 3651 grandChild->setAnchorPoint(FloatPoint(0, 0));
3652 grandChild->setPosition(IntPoint(grandChildRect.x(), grandChildRect.y())); 3652 grandChild->setPosition(IntPoint(grandChildRect.x(), grandChildRect.y()));
3653 grandChild->setBounds(IntSize(grandChildRect.width(), grandChildRect.height( ))); 3653 grandChild->setBounds(IntSize(grandChildRect.width(), grandChildRect.height( )));
3654 grandChild->setContentBounds(grandChild->bounds()); 3654 grandChild->setContentBounds(grandChild->bounds());
3655 grandChild->setDrawsContent(true); 3655 grandChild->setDrawsContent(true);
3656 3656
3657 CCTiledLayerImpl* childPtr = child.get(); 3657 TiledLayerImpl* childPtr = child.get();
3658 CCRenderPass::Id childPassId(childPtr->id(), 0); 3658 RenderPass::Id childPassId(childPtr->id(), 0);
3659 3659
3660 child->addChild(grandChild.Pass()); 3660 child->addChild(grandChild.Pass());
3661 root->addChild(child.PassAs<CCLayerImpl>()); 3661 root->addChild(child.PassAs<LayerImpl>());
3662 myHostImpl->setRootLayer(root.Pass()); 3662 myHostImpl->setRootLayer(root.Pass());
3663 myHostImpl->setViewportSize(rootRect.size(), rootRect.size()); 3663 myHostImpl->setViewportSize(rootRect.size(), rootRect.size());
3664 3664
3665 EXPECT_FALSE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(chil dPassId)); 3665 EXPECT_FALSE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(chil dPassId));
3666 3666
3667 { 3667 {
3668 CCLayerTreeHostImpl::FrameData frame; 3668 LayerTreeHostImpl::FrameData frame;
3669 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3669 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3670 myHostImpl->drawLayers(frame); 3670 myHostImpl->drawLayers(frame);
3671 myHostImpl->didDrawAllLayers(frame); 3671 myHostImpl->didDrawAllLayers(frame);
3672 } 3672 }
3673 3673
3674 // We should have cached textures for surface 2. 3674 // We should have cached textures for surface 2.
3675 EXPECT_TRUE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(child PassId)); 3675 EXPECT_TRUE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(child PassId));
3676 3676
3677 { 3677 {
3678 CCLayerTreeHostImpl::FrameData frame; 3678 LayerTreeHostImpl::FrameData frame;
3679 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3679 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3680 myHostImpl->drawLayers(frame); 3680 myHostImpl->drawLayers(frame);
3681 myHostImpl->didDrawAllLayers(frame); 3681 myHostImpl->didDrawAllLayers(frame);
3682 } 3682 }
3683 3683
3684 // We should still have cached textures for surface 2 after drawing with no damage. 3684 // We should still have cached textures for surface 2 after drawing with no damage.
3685 EXPECT_TRUE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(child PassId)); 3685 EXPECT_TRUE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(child PassId));
3686 3686
3687 // Damage a single tile of surface 2. 3687 // Damage a single tile of surface 2.
3688 childPtr->setUpdateRect(IntRect(10, 10, 10, 10)); 3688 childPtr->setUpdateRect(IntRect(10, 10, 10, 10));
3689 3689
3690 { 3690 {
3691 CCLayerTreeHostImpl::FrameData frame; 3691 LayerTreeHostImpl::FrameData frame;
3692 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3692 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3693 myHostImpl->drawLayers(frame); 3693 myHostImpl->drawLayers(frame);
3694 myHostImpl->didDrawAllLayers(frame); 3694 myHostImpl->didDrawAllLayers(frame);
3695 } 3695 }
3696 3696
3697 // We should have a cached texture for surface 2 again even though it was da maged. 3697 // We should have a cached texture for surface 2 again even though it was da maged.
3698 EXPECT_TRUE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(child PassId)); 3698 EXPECT_TRUE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(child PassId));
3699 } 3699 }
3700 3700
3701 TEST_P(CCLayerTreeHostImplTest, surfaceTextureCaching) 3701 TEST_P(LayerTreeHostImplTest, surfaceTextureCaching)
3702 { 3702 {
3703 CCSettings::setPartialSwapEnabled(true); 3703 Settings::setPartialSwapEnabled(true);
3704 3704
3705 CCLayerTreeSettings settings; 3705 LayerTreeSettings settings;
3706 settings.minimumOcclusionTrackingSize = IntSize(); 3706 settings.minimumOcclusionTrackingSize = IntSize();
3707 scoped_ptr<CCLayerTreeHostImpl> myHostImpl = CCLayerTreeHostImpl::create(set tings, this); 3707 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting s, this);
3708 3708
3709 CCLayerImpl* rootPtr; 3709 LayerImpl* rootPtr;
3710 CCLayerImpl* intermediateLayerPtr; 3710 LayerImpl* intermediateLayerPtr;
3711 CCLayerImpl* surfaceLayerPtr; 3711 LayerImpl* surfaceLayerPtr;
3712 CCLayerImpl* childPtr; 3712 LayerImpl* childPtr;
3713 3713
3714 setupLayersForTextureCaching(myHostImpl.get(), rootPtr, intermediateLayerPtr , surfaceLayerPtr, childPtr, IntSize(100, 100)); 3714 setupLayersForTextureCaching(myHostImpl.get(), rootPtr, intermediateLayerPtr , surfaceLayerPtr, childPtr, IntSize(100, 100));
3715 3715
3716 { 3716 {
3717 CCLayerTreeHostImpl::FrameData frame; 3717 LayerTreeHostImpl::FrameData frame;
3718 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3718 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3719 3719
3720 // Must receive two render passes, each with one quad 3720 // Must receive two render passes, each with one quad
3721 ASSERT_EQ(2U, frame.renderPasses.size()); 3721 ASSERT_EQ(2U, frame.renderPasses.size());
3722 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); 3722 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size());
3723 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); 3723 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size());
3724 3724
3725 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]-> material()); 3725 EXPECT_EQ(DrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->ma terial());
3726 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re nderPasses[1]->quadList()[0]); 3726 RenderPassDrawQuad* quad = static_cast<RenderPassDrawQuad*>(frame.render Passes[1]->quadList()[0]);
3727 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId ()); 3727 RenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId() );
3728 EXPECT_FALSE(targetPass->damageRect().isEmpty()); 3728 EXPECT_FALSE(targetPass->damageRect().isEmpty());
3729 3729
3730 myHostImpl->drawLayers(frame); 3730 myHostImpl->drawLayers(frame);
3731 myHostImpl->didDrawAllLayers(frame); 3731 myHostImpl->didDrawAllLayers(frame);
3732 } 3732 }
3733 3733
3734 // Draw without any change 3734 // Draw without any change
3735 { 3735 {
3736 CCLayerTreeHostImpl::FrameData frame; 3736 LayerTreeHostImpl::FrameData frame;
3737 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3737 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3738 3738
3739 // Must receive one render pass, as the other one should be culled 3739 // Must receive one render pass, as the other one should be culled
3740 ASSERT_EQ(1U, frame.renderPasses.size()); 3740 ASSERT_EQ(1U, frame.renderPasses.size());
3741 3741
3742 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); 3742 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size());
3743 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]-> material()); 3743 EXPECT_EQ(DrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->ma terial());
3744 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re nderPasses[0]->quadList()[0]); 3744 RenderPassDrawQuad* quad = static_cast<RenderPassDrawQuad*>(frame.render Passes[0]->quadList()[0]);
3745 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId ()); 3745 RenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId() );
3746 EXPECT_TRUE(targetPass->damageRect().isEmpty()); 3746 EXPECT_TRUE(targetPass->damageRect().isEmpty());
3747 3747
3748 myHostImpl->drawLayers(frame); 3748 myHostImpl->drawLayers(frame);
3749 myHostImpl->didDrawAllLayers(frame); 3749 myHostImpl->didDrawAllLayers(frame);
3750 } 3750 }
3751 3751
3752 // Change opacity and draw 3752 // Change opacity and draw
3753 surfaceLayerPtr->setOpacity(0.6f); 3753 surfaceLayerPtr->setOpacity(0.6f);
3754 { 3754 {
3755 CCLayerTreeHostImpl::FrameData frame; 3755 LayerTreeHostImpl::FrameData frame;
3756 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3756 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3757 3757
3758 // Must receive one render pass, as the other one should be culled 3758 // Must receive one render pass, as the other one should be culled
3759 ASSERT_EQ(1U, frame.renderPasses.size()); 3759 ASSERT_EQ(1U, frame.renderPasses.size());
3760 3760
3761 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); 3761 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size());
3762 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]-> material()); 3762 EXPECT_EQ(DrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->ma terial());
3763 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re nderPasses[0]->quadList()[0]); 3763 RenderPassDrawQuad* quad = static_cast<RenderPassDrawQuad*>(frame.render Passes[0]->quadList()[0]);
3764 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId ()); 3764 RenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId() );
3765 EXPECT_TRUE(targetPass->damageRect().isEmpty()); 3765 EXPECT_TRUE(targetPass->damageRect().isEmpty());
3766 3766
3767 myHostImpl->drawLayers(frame); 3767 myHostImpl->drawLayers(frame);
3768 myHostImpl->didDrawAllLayers(frame); 3768 myHostImpl->didDrawAllLayers(frame);
3769 } 3769 }
3770 3770
3771 // Change less benign property and draw - should have contents changed flag 3771 // Change less benign property and draw - should have contents changed flag
3772 surfaceLayerPtr->setStackingOrderChanged(true); 3772 surfaceLayerPtr->setStackingOrderChanged(true);
3773 { 3773 {
3774 CCLayerTreeHostImpl::FrameData frame; 3774 LayerTreeHostImpl::FrameData frame;
3775 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3775 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3776 3776
3777 // Must receive two render passes, each with one quad 3777 // Must receive two render passes, each with one quad
3778 ASSERT_EQ(2U, frame.renderPasses.size()); 3778 ASSERT_EQ(2U, frame.renderPasses.size());
3779 3779
3780 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); 3780 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size());
3781 EXPECT_EQ(CCDrawQuad::SolidColor, frame.renderPasses[0]->quadList()[0]-> material()); 3781 EXPECT_EQ(DrawQuad::SolidColor, frame.renderPasses[0]->quadList()[0]->ma terial());
3782 3782
3783 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]-> material()); 3783 EXPECT_EQ(DrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->ma terial());
3784 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re nderPasses[1]->quadList()[0]); 3784 RenderPassDrawQuad* quad = static_cast<RenderPassDrawQuad*>(frame.render Passes[1]->quadList()[0]);
3785 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId ()); 3785 RenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId() );
3786 EXPECT_FALSE(targetPass->damageRect().isEmpty()); 3786 EXPECT_FALSE(targetPass->damageRect().isEmpty());
3787 3787
3788 myHostImpl->drawLayers(frame); 3788 myHostImpl->drawLayers(frame);
3789 myHostImpl->didDrawAllLayers(frame); 3789 myHostImpl->didDrawAllLayers(frame);
3790 } 3790 }
3791 3791
3792 // Change opacity again, and evict the cached surface texture. 3792 // Change opacity again, and evict the cached surface texture.
3793 surfaceLayerPtr->setOpacity(0.5f); 3793 surfaceLayerPtr->setOpacity(0.5f);
3794 static_cast<CCRendererGLWithReleaseTextures*>(myHostImpl->renderer())->relea seRenderPassTextures(); 3794 static_cast<GLRendererWithReleaseTextures*>(myHostImpl->renderer())->release RenderPassTextures();
3795 3795
3796 // Change opacity and draw 3796 // Change opacity and draw
3797 surfaceLayerPtr->setOpacity(0.6f); 3797 surfaceLayerPtr->setOpacity(0.6f);
3798 { 3798 {
3799 CCLayerTreeHostImpl::FrameData frame; 3799 LayerTreeHostImpl::FrameData frame;
3800 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3800 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3801 3801
3802 // Must receive two render passes 3802 // Must receive two render passes
3803 ASSERT_EQ(2U, frame.renderPasses.size()); 3803 ASSERT_EQ(2U, frame.renderPasses.size());
3804 3804
3805 // Even though not enough properties changed, the entire thing must be 3805 // Even though not enough properties changed, the entire thing must be
3806 // redrawn as we don't have cached textures 3806 // redrawn as we don't have cached textures
3807 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); 3807 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size());
3808 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); 3808 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size());
3809 3809
3810 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]-> material()); 3810 EXPECT_EQ(DrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->ma terial());
3811 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re nderPasses[1]->quadList()[0]); 3811 RenderPassDrawQuad* quad = static_cast<RenderPassDrawQuad*>(frame.render Passes[1]->quadList()[0]);
3812 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId ()); 3812 RenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId() );
3813 EXPECT_TRUE(targetPass->damageRect().isEmpty()); 3813 EXPECT_TRUE(targetPass->damageRect().isEmpty());
3814 3814
3815 // Was our surface evicted? 3815 // Was our surface evicted?
3816 EXPECT_FALSE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId( targetPass->id())); 3816 EXPECT_FALSE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId( targetPass->id()));
3817 3817
3818 myHostImpl->drawLayers(frame); 3818 myHostImpl->drawLayers(frame);
3819 myHostImpl->didDrawAllLayers(frame); 3819 myHostImpl->didDrawAllLayers(frame);
3820 } 3820 }
3821 3821
3822 // Draw without any change, to make sure the state is clear 3822 // Draw without any change, to make sure the state is clear
3823 { 3823 {
3824 CCLayerTreeHostImpl::FrameData frame; 3824 LayerTreeHostImpl::FrameData frame;
3825 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3825 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3826 3826
3827 // Must receive one render pass, as the other one should be culled 3827 // Must receive one render pass, as the other one should be culled
3828 ASSERT_EQ(1U, frame.renderPasses.size()); 3828 ASSERT_EQ(1U, frame.renderPasses.size());
3829 3829
3830 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); 3830 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size());
3831 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]-> material()); 3831 EXPECT_EQ(DrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->ma terial());
3832 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re nderPasses[0]->quadList()[0]); 3832 RenderPassDrawQuad* quad = static_cast<RenderPassDrawQuad*>(frame.render Passes[0]->quadList()[0]);
3833 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId ()); 3833 RenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId() );
3834 EXPECT_TRUE(targetPass->damageRect().isEmpty()); 3834 EXPECT_TRUE(targetPass->damageRect().isEmpty());
3835 3835
3836 myHostImpl->drawLayers(frame); 3836 myHostImpl->drawLayers(frame);
3837 myHostImpl->didDrawAllLayers(frame); 3837 myHostImpl->didDrawAllLayers(frame);
3838 } 3838 }
3839 3839
3840 // Change opacity on the intermediate layer 3840 // Change opacity on the intermediate layer
3841 WebTransformationMatrix transform = intermediateLayerPtr->transform(); 3841 WebTransformationMatrix transform = intermediateLayerPtr->transform();
3842 transform.setM11(1.0001); 3842 transform.setM11(1.0001);
3843 intermediateLayerPtr->setTransform(transform); 3843 intermediateLayerPtr->setTransform(transform);
3844 { 3844 {
3845 CCLayerTreeHostImpl::FrameData frame; 3845 LayerTreeHostImpl::FrameData frame;
3846 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3846 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3847 3847
3848 // Must receive one render pass, as the other one should be culled. 3848 // Must receive one render pass, as the other one should be culled.
3849 ASSERT_EQ(1U, frame.renderPasses.size()); 3849 ASSERT_EQ(1U, frame.renderPasses.size());
3850 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); 3850 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size());
3851 3851
3852 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]-> material()); 3852 EXPECT_EQ(DrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->ma terial());
3853 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re nderPasses[0]->quadList()[0]); 3853 RenderPassDrawQuad* quad = static_cast<RenderPassDrawQuad*>(frame.render Passes[0]->quadList()[0]);
3854 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId ()); 3854 RenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId() );
3855 EXPECT_TRUE(targetPass->damageRect().isEmpty()); 3855 EXPECT_TRUE(targetPass->damageRect().isEmpty());
3856 3856
3857 myHostImpl->drawLayers(frame); 3857 myHostImpl->drawLayers(frame);
3858 myHostImpl->didDrawAllLayers(frame); 3858 myHostImpl->didDrawAllLayers(frame);
3859 } 3859 }
3860 } 3860 }
3861 3861
3862 TEST_P(CCLayerTreeHostImplTest, surfaceTextureCachingNoPartialSwap) 3862 TEST_P(LayerTreeHostImplTest, surfaceTextureCachingNoPartialSwap)
3863 { 3863 {
3864 CCSettings::setPartialSwapEnabled(false); 3864 Settings::setPartialSwapEnabled(false);
3865 3865
3866 CCLayerTreeSettings settings; 3866 LayerTreeSettings settings;
3867 settings.minimumOcclusionTrackingSize = IntSize(); 3867 settings.minimumOcclusionTrackingSize = IntSize();
3868 scoped_ptr<CCLayerTreeHostImpl> myHostImpl = CCLayerTreeHostImpl::create(set tings, this); 3868 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting s, this);
3869 3869
3870 CCLayerImpl* rootPtr; 3870 LayerImpl* rootPtr;
3871 CCLayerImpl* intermediateLayerPtr; 3871 LayerImpl* intermediateLayerPtr;
3872 CCLayerImpl* surfaceLayerPtr; 3872 LayerImpl* surfaceLayerPtr;
3873 CCLayerImpl* childPtr; 3873 LayerImpl* childPtr;
3874 3874
3875 setupLayersForTextureCaching(myHostImpl.get(), rootPtr, intermediateLayerPtr , surfaceLayerPtr, childPtr, IntSize(100, 100)); 3875 setupLayersForTextureCaching(myHostImpl.get(), rootPtr, intermediateLayerPtr , surfaceLayerPtr, childPtr, IntSize(100, 100));
3876 3876
3877 { 3877 {
3878 CCLayerTreeHostImpl::FrameData frame; 3878 LayerTreeHostImpl::FrameData frame;
3879 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3879 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3880 3880
3881 // Must receive two render passes, each with one quad 3881 // Must receive two render passes, each with one quad
3882 ASSERT_EQ(2U, frame.renderPasses.size()); 3882 ASSERT_EQ(2U, frame.renderPasses.size());
3883 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); 3883 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size());
3884 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); 3884 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size());
3885 3885
3886 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]-> material()); 3886 EXPECT_EQ(DrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->ma terial());
3887 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re nderPasses[1]->quadList()[0]); 3887 RenderPassDrawQuad* quad = static_cast<RenderPassDrawQuad*>(frame.render Passes[1]->quadList()[0]);
3888 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId ()); 3888 RenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId() );
3889 EXPECT_FALSE(targetPass->damageRect().isEmpty()); 3889 EXPECT_FALSE(targetPass->damageRect().isEmpty());
3890 3890
3891 EXPECT_FALSE(frame.renderPasses[0]->damageRect().isEmpty()); 3891 EXPECT_FALSE(frame.renderPasses[0]->damageRect().isEmpty());
3892 EXPECT_FALSE(frame.renderPasses[1]->damageRect().isEmpty()); 3892 EXPECT_FALSE(frame.renderPasses[1]->damageRect().isEmpty());
3893 3893
3894 EXPECT_FALSE(frame.renderPasses[0]->hasOcclusionFromOutsideTargetSurface ()); 3894 EXPECT_FALSE(frame.renderPasses[0]->hasOcclusionFromOutsideTargetSurface ());
3895 EXPECT_FALSE(frame.renderPasses[1]->hasOcclusionFromOutsideTargetSurface ()); 3895 EXPECT_FALSE(frame.renderPasses[1]->hasOcclusionFromOutsideTargetSurface ());
3896 3896
3897 myHostImpl->drawLayers(frame); 3897 myHostImpl->drawLayers(frame);
3898 myHostImpl->didDrawAllLayers(frame); 3898 myHostImpl->didDrawAllLayers(frame);
3899 } 3899 }
3900 3900
3901 // Draw without any change 3901 // Draw without any change
3902 { 3902 {
3903 CCLayerTreeHostImpl::FrameData frame; 3903 LayerTreeHostImpl::FrameData frame;
3904 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3904 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3905 3905
3906 // Even though there was no change, we set the damage to entire viewport . 3906 // Even though there was no change, we set the damage to entire viewport .
3907 // One of the passes should be culled as a result, since contents didn't change 3907 // One of the passes should be culled as a result, since contents didn't change
3908 // and we have cached texture. 3908 // and we have cached texture.
3909 ASSERT_EQ(1U, frame.renderPasses.size()); 3909 ASSERT_EQ(1U, frame.renderPasses.size());
3910 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); 3910 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size());
3911 3911
3912 EXPECT_TRUE(frame.renderPasses[0]->damageRect().isEmpty()); 3912 EXPECT_TRUE(frame.renderPasses[0]->damageRect().isEmpty());
3913 3913
3914 myHostImpl->drawLayers(frame); 3914 myHostImpl->drawLayers(frame);
3915 myHostImpl->didDrawAllLayers(frame); 3915 myHostImpl->didDrawAllLayers(frame);
3916 } 3916 }
3917 3917
3918 // Change opacity and draw 3918 // Change opacity and draw
3919 surfaceLayerPtr->setOpacity(0.6f); 3919 surfaceLayerPtr->setOpacity(0.6f);
3920 { 3920 {
3921 CCLayerTreeHostImpl::FrameData frame; 3921 LayerTreeHostImpl::FrameData frame;
3922 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3922 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3923 3923
3924 // Must receive one render pass, as the other one should be culled 3924 // Must receive one render pass, as the other one should be culled
3925 ASSERT_EQ(1U, frame.renderPasses.size()); 3925 ASSERT_EQ(1U, frame.renderPasses.size());
3926 3926
3927 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); 3927 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size());
3928 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]-> material()); 3928 EXPECT_EQ(DrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->ma terial());
3929 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re nderPasses[0]->quadList()[0]); 3929 RenderPassDrawQuad* quad = static_cast<RenderPassDrawQuad*>(frame.render Passes[0]->quadList()[0]);
3930 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId ()); 3930 RenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId() );
3931 EXPECT_TRUE(targetPass->damageRect().isEmpty()); 3931 EXPECT_TRUE(targetPass->damageRect().isEmpty());
3932 3932
3933 myHostImpl->drawLayers(frame); 3933 myHostImpl->drawLayers(frame);
3934 myHostImpl->didDrawAllLayers(frame); 3934 myHostImpl->didDrawAllLayers(frame);
3935 } 3935 }
3936 3936
3937 // Change less benign property and draw - should have contents changed flag 3937 // Change less benign property and draw - should have contents changed flag
3938 surfaceLayerPtr->setStackingOrderChanged(true); 3938 surfaceLayerPtr->setStackingOrderChanged(true);
3939 { 3939 {
3940 CCLayerTreeHostImpl::FrameData frame; 3940 LayerTreeHostImpl::FrameData frame;
3941 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3941 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3942 3942
3943 // Must receive two render passes, each with one quad 3943 // Must receive two render passes, each with one quad
3944 ASSERT_EQ(2U, frame.renderPasses.size()); 3944 ASSERT_EQ(2U, frame.renderPasses.size());
3945 3945
3946 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); 3946 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size());
3947 EXPECT_EQ(CCDrawQuad::SolidColor, frame.renderPasses[0]->quadList()[0]-> material()); 3947 EXPECT_EQ(DrawQuad::SolidColor, frame.renderPasses[0]->quadList()[0]->ma terial());
3948 3948
3949 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]-> material()); 3949 EXPECT_EQ(DrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->ma terial());
3950 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re nderPasses[1]->quadList()[0]); 3950 RenderPassDrawQuad* quad = static_cast<RenderPassDrawQuad*>(frame.render Passes[1]->quadList()[0]);
3951 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId ()); 3951 RenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId() );
3952 EXPECT_FALSE(targetPass->damageRect().isEmpty()); 3952 EXPECT_FALSE(targetPass->damageRect().isEmpty());
3953 3953
3954 myHostImpl->drawLayers(frame); 3954 myHostImpl->drawLayers(frame);
3955 myHostImpl->didDrawAllLayers(frame); 3955 myHostImpl->didDrawAllLayers(frame);
3956 } 3956 }
3957 3957
3958 // Change opacity again, and evict the cached surface texture. 3958 // Change opacity again, and evict the cached surface texture.
3959 surfaceLayerPtr->setOpacity(0.5f); 3959 surfaceLayerPtr->setOpacity(0.5f);
3960 static_cast<CCRendererGLWithReleaseTextures*>(myHostImpl->renderer())->relea seRenderPassTextures(); 3960 static_cast<GLRendererWithReleaseTextures*>(myHostImpl->renderer())->release RenderPassTextures();
3961 3961
3962 // Change opacity and draw 3962 // Change opacity and draw
3963 surfaceLayerPtr->setOpacity(0.6f); 3963 surfaceLayerPtr->setOpacity(0.6f);
3964 { 3964 {
3965 CCLayerTreeHostImpl::FrameData frame; 3965 LayerTreeHostImpl::FrameData frame;
3966 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3966 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3967 3967
3968 // Must receive two render passes 3968 // Must receive two render passes
3969 ASSERT_EQ(2U, frame.renderPasses.size()); 3969 ASSERT_EQ(2U, frame.renderPasses.size());
3970 3970
3971 // Even though not enough properties changed, the entire thing must be 3971 // Even though not enough properties changed, the entire thing must be
3972 // redrawn as we don't have cached textures 3972 // redrawn as we don't have cached textures
3973 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); 3973 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size());
3974 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); 3974 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size());
3975 3975
3976 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]-> material()); 3976 EXPECT_EQ(DrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->ma terial());
3977 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re nderPasses[1]->quadList()[0]); 3977 RenderPassDrawQuad* quad = static_cast<RenderPassDrawQuad*>(frame.render Passes[1]->quadList()[0]);
3978 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId ()); 3978 RenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId() );
3979 EXPECT_TRUE(targetPass->damageRect().isEmpty()); 3979 EXPECT_TRUE(targetPass->damageRect().isEmpty());
3980 3980
3981 // Was our surface evicted? 3981 // Was our surface evicted?
3982 EXPECT_FALSE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId( targetPass->id())); 3982 EXPECT_FALSE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId( targetPass->id()));
3983 3983
3984 myHostImpl->drawLayers(frame); 3984 myHostImpl->drawLayers(frame);
3985 myHostImpl->didDrawAllLayers(frame); 3985 myHostImpl->didDrawAllLayers(frame);
3986 } 3986 }
3987 3987
3988 // Draw without any change, to make sure the state is clear 3988 // Draw without any change, to make sure the state is clear
3989 { 3989 {
3990 CCLayerTreeHostImpl::FrameData frame; 3990 LayerTreeHostImpl::FrameData frame;
3991 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 3991 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3992 3992
3993 // Even though there was no change, we set the damage to entire viewport . 3993 // Even though there was no change, we set the damage to entire viewport .
3994 // One of the passes should be culled as a result, since contents didn't change 3994 // One of the passes should be culled as a result, since contents didn't change
3995 // and we have cached texture. 3995 // and we have cached texture.
3996 ASSERT_EQ(1U, frame.renderPasses.size()); 3996 ASSERT_EQ(1U, frame.renderPasses.size());
3997 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); 3997 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size());
3998 3998
3999 myHostImpl->drawLayers(frame); 3999 myHostImpl->drawLayers(frame);
4000 myHostImpl->didDrawAllLayers(frame); 4000 myHostImpl->didDrawAllLayers(frame);
4001 } 4001 }
4002 4002
4003 // Change opacity on the intermediate layer 4003 // Change opacity on the intermediate layer
4004 WebTransformationMatrix transform = intermediateLayerPtr->transform(); 4004 WebTransformationMatrix transform = intermediateLayerPtr->transform();
4005 transform.setM11(1.0001); 4005 transform.setM11(1.0001);
4006 intermediateLayerPtr->setTransform(transform); 4006 intermediateLayerPtr->setTransform(transform);
4007 { 4007 {
4008 CCLayerTreeHostImpl::FrameData frame; 4008 LayerTreeHostImpl::FrameData frame;
4009 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); 4009 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
4010 4010
4011 // Must receive one render pass, as the other one should be culled. 4011 // Must receive one render pass, as the other one should be culled.
4012 ASSERT_EQ(1U, frame.renderPasses.size()); 4012 ASSERT_EQ(1U, frame.renderPasses.size());
4013 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); 4013 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size());
4014 4014
4015 EXPECT_EQ(CCDrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]-> material()); 4015 EXPECT_EQ(DrawQuad::RenderPass, frame.renderPasses[0]->quadList()[0]->ma terial());
4016 CCRenderPassDrawQuad* quad = static_cast<CCRenderPassDrawQuad*>(frame.re nderPasses[0]->quadList()[0]); 4016 RenderPassDrawQuad* quad = static_cast<RenderPassDrawQuad*>(frame.render Passes[0]->quadList()[0]);
4017 CCRenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId ()); 4017 RenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId() );
4018 EXPECT_TRUE(targetPass->damageRect().isEmpty()); 4018 EXPECT_TRUE(targetPass->damageRect().isEmpty());
4019 4019
4020 myHostImpl->drawLayers(frame); 4020 myHostImpl->drawLayers(frame);
4021 myHostImpl->didDrawAllLayers(frame); 4021 myHostImpl->didDrawAllLayers(frame);
4022 } 4022 }
4023 } 4023 }
4024 4024
4025 TEST_P(CCLayerTreeHostImplTest, releaseContentsTextureShouldTriggerCommit) 4025 TEST_P(LayerTreeHostImplTest, releaseContentsTextureShouldTriggerCommit)
4026 { 4026 {
4027 setReduceMemoryResult(false); 4027 setReduceMemoryResult(false);
4028 4028
4029 // Even if changing the memory limit didn't result in anything being 4029 // Even if changing the memory limit didn't result in anything being
4030 // evicted, we need to re-commit because the new value may result in us 4030 // evicted, we need to re-commit because the new value may result in us
4031 // drawing something different than before. 4031 // drawing something different than before.
4032 setReduceMemoryResult(false); 4032 setReduceMemoryResult(false);
4033 m_hostImpl->setMemoryAllocationLimitBytes( 4033 m_hostImpl->setMemoryAllocationLimitBytes(
4034 m_hostImpl->memoryAllocationLimitBytes() - 1); 4034 m_hostImpl->memoryAllocationLimitBytes() - 1);
4035 EXPECT_TRUE(m_didRequestCommit); 4035 EXPECT_TRUE(m_didRequestCommit);
4036 m_didRequestCommit = false; 4036 m_didRequestCommit = false;
4037 4037
4038 // Especially if changing the memory limit caused evictions, we need 4038 // Especially if changing the memory limit caused evictions, we need
4039 // to re-commit. 4039 // to re-commit.
4040 setReduceMemoryResult(true); 4040 setReduceMemoryResult(true);
4041 m_hostImpl->setMemoryAllocationLimitBytes( 4041 m_hostImpl->setMemoryAllocationLimitBytes(
4042 m_hostImpl->memoryAllocationLimitBytes() - 1); 4042 m_hostImpl->memoryAllocationLimitBytes() - 1);
4043 EXPECT_TRUE(m_didRequestCommit); 4043 EXPECT_TRUE(m_didRequestCommit);
4044 m_didRequestCommit = false; 4044 m_didRequestCommit = false;
4045 4045
4046 // But if we set it to the same value that it was before, we shouldn't 4046 // But if we set it to the same value that it was before, we shouldn't
4047 // re-commit. 4047 // re-commit.
4048 m_hostImpl->setMemoryAllocationLimitBytes( 4048 m_hostImpl->setMemoryAllocationLimitBytes(
4049 m_hostImpl->memoryAllocationLimitBytes()); 4049 m_hostImpl->memoryAllocationLimitBytes());
4050 EXPECT_FALSE(m_didRequestCommit); 4050 EXPECT_FALSE(m_didRequestCommit);
4051 } 4051 }
4052 4052
4053 struct RenderPassRemovalTestData : public CCLayerTreeHostImpl::FrameData { 4053 struct RenderPassRemovalTestData : public LayerTreeHostImpl::FrameData {
4054 ScopedPtrHashMap<CCRenderPass::Id, CCRenderPass> renderPassCache; 4054 ScopedPtrHashMap<RenderPass::Id, RenderPass> renderPassCache;
4055 scoped_ptr<CCSharedQuadState> sharedQuadState; 4055 scoped_ptr<SharedQuadState> sharedQuadState;
4056 }; 4056 };
4057 4057
4058 class CCTestRenderer : public CCRendererGL, public CCRendererClient { 4058 class TestRenderer : public GLRenderer, public RendererClient {
4059 public: 4059 public:
4060 static scoped_ptr<CCTestRenderer> create(CCResourceProvider* resourceProvide r) 4060 static scoped_ptr<TestRenderer> create(ResourceProvider* resourceProvider)
4061 { 4061 {
4062 scoped_ptr<CCTestRenderer> renderer(new CCTestRenderer(resourceProvider) ); 4062 scoped_ptr<TestRenderer> renderer(new TestRenderer(resourceProvider));
4063 if (!renderer->initialize()) 4063 if (!renderer->initialize())
4064 return scoped_ptr<CCTestRenderer>(); 4064 return scoped_ptr<TestRenderer>();
4065 4065
4066 return renderer.Pass(); 4066 return renderer.Pass();
4067 } 4067 }
4068 4068
4069 void clearCachedTextures() { m_textures.clear(); } 4069 void clearCachedTextures() { m_textures.clear(); }
4070 void setHaveCachedResourcesForRenderPassId(CCRenderPass::Id id) { m_textures .insert(id); } 4070 void setHaveCachedResourcesForRenderPassId(RenderPass::Id id) { m_textures.i nsert(id); }
4071 4071
4072 virtual bool haveCachedResourcesForRenderPassId(CCRenderPass::Id id) const O VERRIDE { return m_textures.count(id); } 4072 virtual bool haveCachedResourcesForRenderPassId(RenderPass::Id id) const OVE RRIDE { return m_textures.count(id); }
4073 4073
4074 // CCRendererClient implementation. 4074 // RendererClient implementation.
4075 virtual const IntSize& deviceViewportSize() const OVERRIDE { return m_viewpo rtSize; } 4075 virtual const IntSize& deviceViewportSize() const OVERRIDE { return m_viewpo rtSize; }
4076 virtual const CCLayerTreeSettings& settings() const OVERRIDE { return m_sett ings; } 4076 virtual const LayerTreeSettings& settings() const OVERRIDE { return m_settin gs; }
4077 virtual void didLoseContext() OVERRIDE { } 4077 virtual void didLoseContext() OVERRIDE { }
4078 virtual void onSwapBuffersComplete() OVERRIDE { } 4078 virtual void onSwapBuffersComplete() OVERRIDE { }
4079 virtual void setFullRootLayerDamage() OVERRIDE { } 4079 virtual void setFullRootLayerDamage() OVERRIDE { }
4080 virtual void setMemoryAllocationLimitBytes(size_t) OVERRIDE { } 4080 virtual void setMemoryAllocationLimitBytes(size_t) OVERRIDE { }
4081 4081
4082 protected: 4082 protected:
4083 CCTestRenderer(CCResourceProvider* resourceProvider) : CCRendererGL(this, re sourceProvider) { } 4083 TestRenderer(ResourceProvider* resourceProvider) : GLRenderer(this, resource Provider) { }
4084 4084
4085 private: 4085 private:
4086 CCLayerTreeSettings m_settings; 4086 LayerTreeSettings m_settings;
4087 IntSize m_viewportSize; 4087 IntSize m_viewportSize;
4088 base::hash_set<CCRenderPass::Id> m_textures; 4088 base::hash_set<RenderPass::Id> m_textures;
4089 }; 4089 };
4090 4090
4091 static void configureRenderPassTestData(const char* testScript, RenderPassRemova lTestData& testData, CCTestRenderer* renderer) 4091 static void configureRenderPassTestData(const char* testScript, RenderPassRemova lTestData& testData, TestRenderer* renderer)
4092 { 4092 {
4093 renderer->clearCachedTextures(); 4093 renderer->clearCachedTextures();
4094 4094
4095 // One shared state for all quads - we don't need the correct details 4095 // One shared state for all quads - we don't need the correct details
4096 testData.sharedQuadState = CCSharedQuadState::create(WebTransformationMatrix (), IntRect(), IntRect(), 1.0, true); 4096 testData.sharedQuadState = SharedQuadState::create(WebTransformationMatrix() , IntRect(), IntRect(), 1.0, true);
4097 4097
4098 const char* currentChar = testScript; 4098 const char* currentChar = testScript;
4099 4099
4100 // Pre-create root pass 4100 // Pre-create root pass
4101 CCRenderPass::Id rootRenderPassId = CCRenderPass::Id(testScript[0], testScri pt[1]); 4101 RenderPass::Id rootRenderPassId = RenderPass::Id(testScript[0], testScript[1 ]);
4102 testData.renderPassCache.add(rootRenderPassId, CCRenderPass::create(rootRend erPassId, IntRect(), WebTransformationMatrix())); 4102 testData.renderPassCache.add(rootRenderPassId, RenderPass::create(rootRender PassId, IntRect(), WebTransformationMatrix()));
4103 while (*currentChar) { 4103 while (*currentChar) {
4104 int layerId = *currentChar; 4104 int layerId = *currentChar;
4105 currentChar++; 4105 currentChar++;
4106 ASSERT_TRUE(currentChar); 4106 ASSERT_TRUE(currentChar);
4107 int index = *currentChar; 4107 int index = *currentChar;
4108 currentChar++; 4108 currentChar++;
4109 4109
4110 CCRenderPass::Id renderPassId = CCRenderPass::Id(layerId, index); 4110 RenderPass::Id renderPassId = RenderPass::Id(layerId, index);
4111 4111
4112 bool isReplica = false; 4112 bool isReplica = false;
4113 if (!testData.renderPassCache.contains(renderPassId)) 4113 if (!testData.renderPassCache.contains(renderPassId))
4114 isReplica = true; 4114 isReplica = true;
4115 4115
4116 scoped_ptr<CCRenderPass> renderPass = testData.renderPassCache.take(rend erPassId); 4116 scoped_ptr<RenderPass> renderPass = testData.renderPassCache.take(render PassId);
4117 4117
4118 // Cycle through quad data and create all quads 4118 // Cycle through quad data and create all quads
4119 while (*currentChar && *currentChar != '\n') { 4119 while (*currentChar && *currentChar != '\n') {
4120 if (*currentChar == 's') { 4120 if (*currentChar == 's') {
4121 // Solid color draw quad 4121 // Solid color draw quad
4122 scoped_ptr<CCSolidColorDrawQuad> quad = CCSolidColorDrawQuad::cr eate(testData.sharedQuadState.get(), IntRect(0, 0, 10, 10), SK_ColorWHITE); 4122 scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::create (testData.sharedQuadState.get(), IntRect(0, 0, 10, 10), SK_ColorWHITE);
4123 4123
4124 static_cast<CCTestRenderPass*>(renderPass.get())->appendQuad(qua d.PassAs<CCDrawQuad>()); 4124 static_cast<TestRenderPass*>(renderPass.get())->appendQuad(quad. PassAs<DrawQuad>());
4125 currentChar++; 4125 currentChar++;
4126 } else if ((*currentChar >= 'A') && (*currentChar <= 'Z')) { 4126 } else if ((*currentChar >= 'A') && (*currentChar <= 'Z')) {
4127 // RenderPass draw quad 4127 // RenderPass draw quad
4128 int layerId = *currentChar; 4128 int layerId = *currentChar;
4129 currentChar++; 4129 currentChar++;
4130 ASSERT_TRUE(currentChar); 4130 ASSERT_TRUE(currentChar);
4131 int index = *currentChar; 4131 int index = *currentChar;
4132 currentChar++; 4132 currentChar++;
4133 CCRenderPass::Id newRenderPassId = CCRenderPass::Id(layerId, ind ex); 4133 RenderPass::Id newRenderPassId = RenderPass::Id(layerId, index);
4134 ASSERT_NE(rootRenderPassId, newRenderPassId); 4134 ASSERT_NE(rootRenderPassId, newRenderPassId);
4135 bool hasTexture = false; 4135 bool hasTexture = false;
4136 bool contentsChanged = true; 4136 bool contentsChanged = true;
4137 4137
4138 if (*currentChar == '[') { 4138 if (*currentChar == '[') {
4139 currentChar++; 4139 currentChar++;
4140 while (*currentChar && *currentChar != ']') { 4140 while (*currentChar && *currentChar != ']') {
4141 switch (*currentChar) { 4141 switch (*currentChar) {
4142 case 'c': 4142 case 'c':
4143 contentsChanged = false; 4143 contentsChanged = false;
4144 break; 4144 break;
4145 case 't': 4145 case 't':
4146 hasTexture = true; 4146 hasTexture = true;
4147 break; 4147 break;
4148 } 4148 }
4149 currentChar++; 4149 currentChar++;
4150 } 4150 }
4151 if (*currentChar == ']') 4151 if (*currentChar == ']')
4152 currentChar++; 4152 currentChar++;
4153 } 4153 }
4154 4154
4155 if (testData.renderPassCache.find(newRenderPassId) == testData.r enderPassCache.end()) { 4155 if (testData.renderPassCache.find(newRenderPassId) == testData.r enderPassCache.end()) {
4156 if (hasTexture) 4156 if (hasTexture)
4157 renderer->setHaveCachedResourcesForRenderPassId(newRende rPassId); 4157 renderer->setHaveCachedResourcesForRenderPassId(newRende rPassId);
4158 4158
4159 testData.renderPassCache.add(newRenderPassId, CCTestRenderPa ss::create(newRenderPassId, IntRect(), WebTransformationMatrix())); 4159 testData.renderPassCache.add(newRenderPassId, TestRenderPass ::create(newRenderPassId, IntRect(), WebTransformationMatrix()));
4160 } 4160 }
4161 4161
4162 IntRect quadRect = IntRect(0, 0, 1, 1); 4162 IntRect quadRect = IntRect(0, 0, 1, 1);
4163 IntRect contentsChangedRect = contentsChanged ? quadRect : IntRe ct(); 4163 IntRect contentsChangedRect = contentsChanged ? quadRect : IntRe ct();
4164 scoped_ptr<CCRenderPassDrawQuad> quad = CCRenderPassDrawQuad::cr eate(testData.sharedQuadState.get(), quadRect, newRenderPassId, isReplica, 1, co ntentsChangedRect, 1, 1, 0, 0); 4164 scoped_ptr<RenderPassDrawQuad> quad = RenderPassDrawQuad::create (testData.sharedQuadState.get(), quadRect, newRenderPassId, isReplica, 1, conten tsChangedRect, 1, 1, 0, 0);
4165 static_cast<CCTestRenderPass*>(renderPass.get())->appendQuad(qua d.PassAs<CCDrawQuad>()); 4165 static_cast<TestRenderPass*>(renderPass.get())->appendQuad(quad. PassAs<DrawQuad>());
4166 } 4166 }
4167 } 4167 }
4168 testData.renderPasses.insert(testData.renderPasses.begin(), renderPass.g et()); 4168 testData.renderPasses.insert(testData.renderPasses.begin(), renderPass.g et());
4169 testData.renderPassesById.add(renderPassId, renderPass.Pass()); 4169 testData.renderPassesById.add(renderPassId, renderPass.Pass());
4170 if (*currentChar) 4170 if (*currentChar)
4171 currentChar++; 4171 currentChar++;
4172 } 4172 }
4173 } 4173 }
4174 4174
4175 void dumpRenderPassTestData(const RenderPassRemovalTestData& testData, char* buf fer) 4175 void dumpRenderPassTestData(const RenderPassRemovalTestData& testData, char* buf fer)
4176 { 4176 {
4177 char* pos = buffer; 4177 char* pos = buffer;
4178 for (CCRenderPassList::const_reverse_iterator it = testData.renderPasses.rbe gin(); it != testData.renderPasses.rend(); ++it) { 4178 for (RenderPassList::const_reverse_iterator it = testData.renderPasses.rbegi n(); it != testData.renderPasses.rend(); ++it) {
4179 const CCRenderPass* currentPass = *it; 4179 const RenderPass* currentPass = *it;
4180 *pos = currentPass->id().layerId; 4180 *pos = currentPass->id().layerId;
4181 pos++; 4181 pos++;
4182 *pos = currentPass->id().index; 4182 *pos = currentPass->id().index;
4183 pos++; 4183 pos++;
4184 4184
4185 CCQuadList::const_iterator quadListIterator = currentPass->quadList().be gin(); 4185 QuadList::const_iterator quadListIterator = currentPass->quadList().begi n();
4186 while (quadListIterator != currentPass->quadList().end()) { 4186 while (quadListIterator != currentPass->quadList().end()) {
4187 CCDrawQuad* currentQuad = *quadListIterator; 4187 DrawQuad* currentQuad = *quadListIterator;
4188 switch (currentQuad->material()) { 4188 switch (currentQuad->material()) {
4189 case CCDrawQuad::SolidColor: 4189 case DrawQuad::SolidColor:
4190 *pos = 's'; 4190 *pos = 's';
4191 pos++; 4191 pos++;
4192 break; 4192 break;
4193 case CCDrawQuad::RenderPass: 4193 case DrawQuad::RenderPass:
4194 *pos = CCRenderPassDrawQuad::materialCast(currentQuad)->renderPa ssId().layerId; 4194 *pos = RenderPassDrawQuad::materialCast(currentQuad)->renderPass Id().layerId;
4195 pos++; 4195 pos++;
4196 *pos = CCRenderPassDrawQuad::materialCast(currentQuad)->renderPa ssId().index; 4196 *pos = RenderPassDrawQuad::materialCast(currentQuad)->renderPass Id().index;
4197 pos++; 4197 pos++;
4198 break; 4198 break;
4199 default: 4199 default:
4200 *pos = 'x'; 4200 *pos = 'x';
4201 pos++; 4201 pos++;
4202 break; 4202 break;
4203 } 4203 }
4204 4204
4205 quadListIterator++; 4205 quadListIterator++;
4206 } 4206 }
4207 *pos = '\n'; 4207 *pos = '\n';
4208 pos++; 4208 pos++;
4209 } 4209 }
4210 *pos = '\0'; 4210 *pos = '\0';
4211 } 4211 }
4212 4212
4213 // Each CCRenderPassList is represented by a string which describes the configur ation. 4213 // Each RenderPassList is represented by a string which describes the configurat ion.
4214 // The syntax of the string is as follows: 4214 // The syntax of the string is as follows:
4215 // 4215 //
4216 // RsssssX[c]ssYsssZ[t]ssW[ ct] 4216 // RsssssX[c]ssYsssZ[t]ssW[ ct]
4217 // Identifies the render pass---------------------------^ ^^^ ^ ^ ^ ^ ^ 4217 // Identifies the render pass---------------------------^ ^^^ ^ ^ ^ ^ ^
4218 // These are solid color quads-----------------------------+ | | | | | 4218 // These are solid color quads-----------------------------+ | | | | |
4219 // Identifies RenderPassDrawQuad's RenderPass-----------------+ | | | | 4219 // Identifies RenderPassDrawQuad's RenderPass-----------------+ | | | |
4220 // This quad's contents didn't change---------------------------+ | | | 4220 // This quad's contents didn't change---------------------------+ | | |
4221 // This quad's contents changed and it has no texture---------------+ | | 4221 // This quad's contents changed and it has no texture---------------+ | |
4222 // This quad has texture but its contents changed-------------------------+ | 4222 // This quad has texture but its contents changed-------------------------+ |
4223 // This quad's contents didn't change and it has texture - will be removed------ + 4223 // This quad's contents didn't change and it has texture - will be removed------ +
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
4351 } 4351 }
4352 }; 4352 };
4353 4353
4354 static void verifyRenderPassTestData(TestCase& testCase, RenderPassRemovalTestDa ta& testData) 4354 static void verifyRenderPassTestData(TestCase& testCase, RenderPassRemovalTestDa ta& testData)
4355 { 4355 {
4356 char actualResult[1024]; 4356 char actualResult[1024];
4357 dumpRenderPassTestData(testData, actualResult); 4357 dumpRenderPassTestData(testData, actualResult);
4358 EXPECT_STREQ(testCase.expectedResult, actualResult) << "In test case: " << t estCase.name; 4358 EXPECT_STREQ(testCase.expectedResult, actualResult) << "In test case: " << t estCase.name;
4359 } 4359 }
4360 4360
4361 TEST_P(CCLayerTreeHostImplTest, testRemoveRenderPasses) 4361 TEST_P(LayerTreeHostImplTest, testRemoveRenderPasses)
4362 { 4362 {
4363 scoped_ptr<CCGraphicsContext> context(createContext()); 4363 scoped_ptr<GraphicsContext> context(createContext());
4364 ASSERT_TRUE(context->context3D()); 4364 ASSERT_TRUE(context->context3D());
4365 scoped_ptr<CCResourceProvider> resourceProvider(CCResourceProvider::create(c ontext.get())); 4365 scoped_ptr<ResourceProvider> resourceProvider(ResourceProvider::create(conte xt.get()));
4366 4366
4367 scoped_ptr<CCTestRenderer> renderer(CCTestRenderer::create(resourceProvider. get())); 4367 scoped_ptr<TestRenderer> renderer(TestRenderer::create(resourceProvider.get( )));
4368 4368
4369 int testCaseIndex = 0; 4369 int testCaseIndex = 0;
4370 while (removeRenderPassesCases[testCaseIndex].name) { 4370 while (removeRenderPassesCases[testCaseIndex].name) {
4371 RenderPassRemovalTestData testData; 4371 RenderPassRemovalTestData testData;
4372 configureRenderPassTestData(removeRenderPassesCases[testCaseIndex].initS cript, testData, renderer.get()); 4372 configureRenderPassTestData(removeRenderPassesCases[testCaseIndex].initS cript, testData, renderer.get());
4373 CCLayerTreeHostImpl::removeRenderPasses(CCLayerTreeHostImpl::CullRenderP assesWithCachedTextures(*renderer), testData); 4373 LayerTreeHostImpl::removeRenderPasses(LayerTreeHostImpl::CullRenderPasse sWithCachedTextures(*renderer), testData);
4374 verifyRenderPassTestData(removeRenderPassesCases[testCaseIndex], testDat a); 4374 verifyRenderPassTestData(removeRenderPassesCases[testCaseIndex], testDat a);
4375 testCaseIndex++; 4375 testCaseIndex++;
4376 } 4376 }
4377 } 4377 }
4378 4378
4379 INSTANTIATE_TEST_CASE_P(CCLayerTreeHostImplTests, 4379 INSTANTIATE_TEST_CASE_P(LayerTreeHostImplTests,
4380 CCLayerTreeHostImplTest, 4380 LayerTreeHostImplTest,
4381 ::testing::Values(false, true)); 4381 ::testing::Values(false, true));
4382 4382
4383 } // namespace 4383 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698