OLD | NEW |
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 "cc/layer_tree_host_impl.h" | 7 #include "cc/layer_tree_host_impl.h" |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/hash_tables.h" | 10 #include "base/hash_tables.h" |
(...skipping 18 matching lines...) Expand all Loading... |
29 #include "cc/test/layer_test_common.h" | 29 #include "cc/test/layer_test_common.h" |
30 #include "cc/test/render_pass_test_common.h" | 30 #include "cc/test/render_pass_test_common.h" |
31 #include "cc/test/test_common.h" | 31 #include "cc/test/test_common.h" |
32 #include "cc/texture_draw_quad.h" | 32 #include "cc/texture_draw_quad.h" |
33 #include "cc/texture_layer_impl.h" | 33 #include "cc/texture_layer_impl.h" |
34 #include "cc/tile_draw_quad.h" | 34 #include "cc/tile_draw_quad.h" |
35 #include "cc/tiled_layer_impl.h" | 35 #include "cc/tiled_layer_impl.h" |
36 #include "cc/video_layer_impl.h" | 36 #include "cc/video_layer_impl.h" |
37 #include "testing/gmock/include/gmock/gmock.h" | 37 #include "testing/gmock/include/gmock/gmock.h" |
38 #include "testing/gtest/include/gtest/gtest.h" | 38 #include "testing/gtest/include/gtest/gtest.h" |
| 39 #include "ui/gfx/size_conversions.h" |
39 #include <public/WebVideoFrame.h> | 40 #include <public/WebVideoFrame.h> |
40 #include <public/WebVideoFrameProvider.h> | 41 #include <public/WebVideoFrameProvider.h> |
41 | 42 |
42 using namespace cc; | 43 using namespace cc; |
43 using namespace LayerTestCommon; | 44 using namespace LayerTestCommon; |
44 using namespace WebKit; | 45 using namespace WebKit; |
45 using namespace WebKitTests; | 46 using namespace WebKitTests; |
46 | 47 |
47 using ::testing::Mock; | 48 using ::testing::Mock; |
48 using ::testing::Return; | 49 using ::testing::Return; |
(...skipping 13 matching lines...) Expand all Loading... |
62 , m_didRequestCommit(false) | 63 , m_didRequestCommit(false) |
63 , m_didRequestRedraw(false) | 64 , m_didRequestRedraw(false) |
64 , m_reduceMemoryResult(true) | 65 , m_reduceMemoryResult(true) |
65 { | 66 { |
66 } | 67 } |
67 | 68 |
68 virtual void SetUp() | 69 virtual void SetUp() |
69 { | 70 { |
70 Settings::setPageScalePinchZoomEnabled(GetParam()); | 71 Settings::setPageScalePinchZoomEnabled(GetParam()); |
71 LayerTreeSettings settings; | 72 LayerTreeSettings settings; |
72 settings.minimumOcclusionTrackingSize = IntSize(); | 73 settings.minimumOcclusionTrackingSize = gfx::Size(); |
73 | 74 |
74 m_hostImpl = LayerTreeHostImpl::create(settings, this); | 75 m_hostImpl = LayerTreeHostImpl::create(settings, this); |
75 m_hostImpl->initializeRenderer(createContext()); | 76 m_hostImpl->initializeRenderer(createContext()); |
76 m_hostImpl->setViewportSize(IntSize(10, 10), IntSize(10, 10)); | 77 m_hostImpl->setViewportSize(gfx::Size(10, 10), gfx::Size(10, 10)); |
77 } | 78 } |
78 | 79 |
79 virtual void TearDown() | 80 virtual void TearDown() |
80 { | 81 { |
81 } | 82 } |
82 | 83 |
83 virtual void didLoseContextOnImplThread() OVERRIDE { } | 84 virtual void didLoseContextOnImplThread() OVERRIDE { } |
84 virtual void onSwapBuffersCompleteOnImplThread() OVERRIDE { } | 85 virtual void onSwapBuffersCompleteOnImplThread() OVERRIDE { } |
85 virtual void onVSyncParametersChanged(double, double) OVERRIDE { } | 86 virtual void onVSyncParametersChanged(double, double) OVERRIDE { } |
86 virtual void onCanDrawStateChanged(bool canDraw) OVERRIDE { m_onCanDrawState
ChangedCalled = true; } | 87 virtual void onCanDrawStateChanged(bool canDraw) OVERRIDE { m_onCanDrawState
ChangedCalled = true; } |
87 virtual void setNeedsRedrawOnImplThread() OVERRIDE { m_didRequestRedraw = tr
ue; } | 88 virtual void setNeedsRedrawOnImplThread() OVERRIDE { m_didRequestRedraw = tr
ue; } |
88 virtual void setNeedsCommitOnImplThread() OVERRIDE { m_didRequestCommit = tr
ue; } | 89 virtual void setNeedsCommitOnImplThread() OVERRIDE { m_didRequestCommit = tr
ue; } |
89 virtual void postAnimationEventsToMainThreadOnImplThread(scoped_ptr<Animatio
nEventsVector>, double wallClockTime) OVERRIDE { } | 90 virtual void postAnimationEventsToMainThreadOnImplThread(scoped_ptr<Animatio
nEventsVector>, double wallClockTime) OVERRIDE { } |
90 virtual bool reduceContentsTextureMemoryOnImplThread(size_t limitBytes, int
priorityCutoff) OVERRIDE { return m_reduceMemoryResult; } | 91 virtual bool reduceContentsTextureMemoryOnImplThread(size_t limitBytes, int
priorityCutoff) OVERRIDE { return m_reduceMemoryResult; } |
91 | 92 |
92 void setReduceMemoryResult(bool reduceMemoryResult) { m_reduceMemoryResult =
reduceMemoryResult; } | 93 void setReduceMemoryResult(bool reduceMemoryResult) { m_reduceMemoryResult =
reduceMemoryResult; } |
93 | 94 |
94 scoped_ptr<LayerTreeHostImpl> createLayerTreeHost(bool partialSwap, scoped_p
tr<GraphicsContext> graphicsContext, scoped_ptr<LayerImpl> root) | 95 scoped_ptr<LayerTreeHostImpl> createLayerTreeHost(bool partialSwap, scoped_p
tr<GraphicsContext> graphicsContext, scoped_ptr<LayerImpl> root) |
95 { | 96 { |
96 Settings::setPartialSwapEnabled(partialSwap); | 97 Settings::setPartialSwapEnabled(partialSwap); |
97 | 98 |
98 LayerTreeSettings settings; | 99 LayerTreeSettings settings; |
99 settings.minimumOcclusionTrackingSize = IntSize(); | 100 settings.minimumOcclusionTrackingSize = gfx::Size(); |
100 | 101 |
101 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(set
tings, this); | 102 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(set
tings, this); |
102 | 103 |
103 myHostImpl->initializeRenderer(graphicsContext.Pass()); | 104 myHostImpl->initializeRenderer(graphicsContext.Pass()); |
104 myHostImpl->setViewportSize(IntSize(10, 10), IntSize(10, 10)); | 105 myHostImpl->setViewportSize(gfx::Size(10, 10), gfx::Size(10, 10)); |
105 | 106 |
106 root->setAnchorPoint(FloatPoint(0, 0)); | 107 root->setAnchorPoint(gfx::PointF(0, 0)); |
107 root->setPosition(FloatPoint(0, 0)); | 108 root->setPosition(gfx::PointF(0, 0)); |
108 root->setBounds(IntSize(10, 10)); | 109 root->setBounds(gfx::Size(10, 10)); |
109 root->setContentBounds(IntSize(10, 10)); | 110 root->setContentBounds(gfx::Size(10, 10)); |
110 root->setVisibleContentRect(IntRect(0, 0, 10, 10)); | 111 root->setVisibleContentRect(gfx::Rect(0, 0, 10, 10)); |
111 root->setDrawsContent(true); | 112 root->setDrawsContent(true); |
112 myHostImpl->setRootLayer(root.Pass()); | 113 myHostImpl->setRootLayer(root.Pass()); |
113 return myHostImpl.Pass(); | 114 return myHostImpl.Pass(); |
114 } | 115 } |
115 | 116 |
116 static void expectClearedScrollDeltasRecursive(LayerImpl* layer) | 117 static void expectClearedScrollDeltasRecursive(LayerImpl* layer) |
117 { | 118 { |
118 ASSERT_EQ(layer->scrollDelta(), IntSize()); | 119 ASSERT_EQ(layer->scrollDelta(), IntSize()); |
119 for (size_t i = 0; i < layer->children().size(); ++i) | 120 for (size_t i = 0; i < layer->children().size(); ++i) |
120 expectClearedScrollDeltasRecursive(layer->children()[i]); | 121 expectClearedScrollDeltasRecursive(layer->children()[i]); |
121 } | 122 } |
122 | 123 |
123 static void expectContains(const ScrollAndScaleSet& scrollInfo, int id, cons
t IntSize& scrollDelta) | 124 static void expectContains(const ScrollAndScaleSet& scrollInfo, int id, cons
t IntSize& scrollDelta) |
124 { | 125 { |
125 int timesEncountered = 0; | 126 int timesEncountered = 0; |
126 | 127 |
127 for (size_t i = 0; i < scrollInfo.scrolls.size(); ++i) { | 128 for (size_t i = 0; i < scrollInfo.scrolls.size(); ++i) { |
128 if (scrollInfo.scrolls[i].layerId != id) | 129 if (scrollInfo.scrolls[i].layerId != id) |
129 continue; | 130 continue; |
130 EXPECT_EQ(scrollDelta.width(), scrollInfo.scrolls[i].scrollDelta.wid
th()); | 131 EXPECT_EQ(scrollDelta.width(), scrollInfo.scrolls[i].scrollDelta.wid
th()); |
131 EXPECT_EQ(scrollDelta.height(), scrollInfo.scrolls[i].scrollDelta.he
ight()); | 132 EXPECT_EQ(scrollDelta.height(), scrollInfo.scrolls[i].scrollDelta.he
ight()); |
132 timesEncountered++; | 133 timesEncountered++; |
133 } | 134 } |
134 | 135 |
135 ASSERT_EQ(timesEncountered, 1); | 136 ASSERT_EQ(timesEncountered, 1); |
136 } | 137 } |
137 | 138 |
138 void setupScrollAndContentsLayers(const IntSize& contentSize) | 139 void setupScrollAndContentsLayers(const gfx::Size& contentSize) |
139 { | 140 { |
140 scoped_ptr<LayerImpl> root = LayerImpl::create(1); | 141 scoped_ptr<LayerImpl> root = LayerImpl::create(1); |
141 root->setScrollable(true); | 142 root->setScrollable(true); |
142 root->setScrollPosition(IntPoint(0, 0)); | 143 root->setScrollPosition(IntPoint(0, 0)); |
143 root->setMaxScrollPosition(contentSize); | 144 root->setMaxScrollPosition(cc::IntSize(contentSize)); |
144 root->setBounds(contentSize); | 145 root->setBounds(contentSize); |
145 root->setContentBounds(contentSize); | 146 root->setContentBounds(contentSize); |
146 root->setPosition(FloatPoint(0, 0)); | 147 root->setPosition(gfx::PointF(0, 0)); |
147 root->setAnchorPoint(FloatPoint(0, 0)); | 148 root->setAnchorPoint(gfx::PointF(0, 0)); |
148 | 149 |
149 scoped_ptr<LayerImpl> contents = LayerImpl::create(2); | 150 scoped_ptr<LayerImpl> contents = LayerImpl::create(2); |
150 contents->setDrawsContent(true); | 151 contents->setDrawsContent(true); |
151 contents->setBounds(contentSize); | 152 contents->setBounds(contentSize); |
152 contents->setContentBounds(contentSize); | 153 contents->setContentBounds(contentSize); |
153 contents->setPosition(FloatPoint(0, 0)); | 154 contents->setPosition(gfx::PointF(0, 0)); |
154 contents->setAnchorPoint(FloatPoint(0, 0)); | 155 contents->setAnchorPoint(gfx::PointF(0, 0)); |
155 root->addChild(contents.Pass()); | 156 root->addChild(contents.Pass()); |
156 m_hostImpl->setRootLayer(root.Pass()); | 157 m_hostImpl->setRootLayer(root.Pass()); |
157 } | 158 } |
158 | 159 |
159 static scoped_ptr<LayerImpl> createScrollableLayer(int id, const IntSize& si
ze) | 160 static scoped_ptr<LayerImpl> createScrollableLayer(int id, const gfx::Size&
size) |
160 { | 161 { |
161 scoped_ptr<LayerImpl> layer = LayerImpl::create(id); | 162 scoped_ptr<LayerImpl> layer = LayerImpl::create(id); |
162 layer->setScrollable(true); | 163 layer->setScrollable(true); |
163 layer->setDrawsContent(true); | 164 layer->setDrawsContent(true); |
164 layer->setBounds(size); | 165 layer->setBounds(size); |
165 layer->setContentBounds(size); | 166 layer->setContentBounds(size); |
166 layer->setMaxScrollPosition(IntSize(size.width() * 2, size.height() * 2)
); | 167 layer->setMaxScrollPosition(IntSize(size.width() * 2, size.height() * 2)
); |
167 return layer.Pass(); | 168 return layer.Pass(); |
168 } | 169 } |
169 | 170 |
(...skipping 29 matching lines...) Expand all Loading... |
199 }; | 200 }; |
200 | 201 |
201 TEST_P(LayerTreeHostImplTest, notifyIfCanDrawChanged) | 202 TEST_P(LayerTreeHostImplTest, notifyIfCanDrawChanged) |
202 { | 203 { |
203 // Note: It is not possible to disable the renderer once it has been set, | 204 // 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 | 205 // so we do not need to test that disabling the renderer notifies us |
205 // that canDraw changed. | 206 // that canDraw changed. |
206 EXPECT_FALSE(m_hostImpl->canDraw()); | 207 EXPECT_FALSE(m_hostImpl->canDraw()); |
207 m_onCanDrawStateChangedCalled = false; | 208 m_onCanDrawStateChangedCalled = false; |
208 | 209 |
209 setupScrollAndContentsLayers(IntSize(100, 100)); | 210 setupScrollAndContentsLayers(gfx::Size(100, 100)); |
210 EXPECT_TRUE(m_hostImpl->canDraw()); | 211 EXPECT_TRUE(m_hostImpl->canDraw()); |
211 EXPECT_TRUE(m_onCanDrawStateChangedCalled); | 212 EXPECT_TRUE(m_onCanDrawStateChangedCalled); |
212 m_onCanDrawStateChangedCalled = false; | 213 m_onCanDrawStateChangedCalled = false; |
213 | 214 |
214 // Toggle the root layer to make sure it toggles canDraw | 215 // Toggle the root layer to make sure it toggles canDraw |
215 m_hostImpl->setRootLayer(scoped_ptr<LayerImpl>()); | 216 m_hostImpl->setRootLayer(scoped_ptr<LayerImpl>()); |
216 EXPECT_FALSE(m_hostImpl->canDraw()); | 217 EXPECT_FALSE(m_hostImpl->canDraw()); |
217 EXPECT_TRUE(m_onCanDrawStateChangedCalled); | 218 EXPECT_TRUE(m_onCanDrawStateChangedCalled); |
218 m_onCanDrawStateChangedCalled = false; | 219 m_onCanDrawStateChangedCalled = false; |
219 | 220 |
220 setupScrollAndContentsLayers(IntSize(100, 100)); | 221 setupScrollAndContentsLayers(gfx::Size(100, 100)); |
221 EXPECT_TRUE(m_hostImpl->canDraw()); | 222 EXPECT_TRUE(m_hostImpl->canDraw()); |
222 EXPECT_TRUE(m_onCanDrawStateChangedCalled); | 223 EXPECT_TRUE(m_onCanDrawStateChangedCalled); |
223 m_onCanDrawStateChangedCalled = false; | 224 m_onCanDrawStateChangedCalled = false; |
224 | 225 |
225 // Toggle the device viewport size to make sure it toggles canDraw. | 226 // Toggle the device viewport size to make sure it toggles canDraw. |
226 m_hostImpl->setViewportSize(IntSize(100, 100), IntSize(0, 0)); | 227 m_hostImpl->setViewportSize(gfx::Size(100, 100), gfx::Size(0, 0)); |
227 EXPECT_FALSE(m_hostImpl->canDraw()); | 228 EXPECT_FALSE(m_hostImpl->canDraw()); |
228 EXPECT_TRUE(m_onCanDrawStateChangedCalled); | 229 EXPECT_TRUE(m_onCanDrawStateChangedCalled); |
229 m_onCanDrawStateChangedCalled = false; | 230 m_onCanDrawStateChangedCalled = false; |
230 | 231 |
231 m_hostImpl->setViewportSize(IntSize(100, 100), IntSize(100, 100)); | 232 m_hostImpl->setViewportSize(gfx::Size(100, 100), gfx::Size(100, 100)); |
232 EXPECT_TRUE(m_hostImpl->canDraw()); | 233 EXPECT_TRUE(m_hostImpl->canDraw()); |
233 EXPECT_TRUE(m_onCanDrawStateChangedCalled); | 234 EXPECT_TRUE(m_onCanDrawStateChangedCalled); |
234 m_onCanDrawStateChangedCalled = false; | 235 m_onCanDrawStateChangedCalled = false; |
235 | 236 |
236 // Toggle contents textures purged without causing any evictions, | 237 // Toggle contents textures purged without causing any evictions, |
237 // and make sure that it does not change canDraw. | 238 // and make sure that it does not change canDraw. |
238 setReduceMemoryResult(false); | 239 setReduceMemoryResult(false); |
239 m_hostImpl->setManagedMemoryPolicy(ManagedMemoryPolicy( | 240 m_hostImpl->setManagedMemoryPolicy(ManagedMemoryPolicy( |
240 m_hostImpl->memoryAllocationLimitBytes() - 1)); | 241 m_hostImpl->memoryAllocationLimitBytes() - 1)); |
241 EXPECT_TRUE(m_hostImpl->canDraw()); | 242 EXPECT_TRUE(m_hostImpl->canDraw()); |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
318 EXPECT_EQ(root->sentScrollDelta(), scrollDelta + scrollDelta2); | 319 EXPECT_EQ(root->sentScrollDelta(), scrollDelta + scrollDelta2); |
319 expectContains(*scrollInfo, root->id(), scrollDelta + scrollDelta2); | 320 expectContains(*scrollInfo, root->id(), scrollDelta + scrollDelta2); |
320 | 321 |
321 root->scrollBy(IntSize()); | 322 root->scrollBy(IntSize()); |
322 scrollInfo = m_hostImpl->processScrollDeltas(); | 323 scrollInfo = m_hostImpl->processScrollDeltas(); |
323 EXPECT_EQ(root->sentScrollDelta(), scrollDelta + scrollDelta2); | 324 EXPECT_EQ(root->sentScrollDelta(), scrollDelta + scrollDelta2); |
324 } | 325 } |
325 | 326 |
326 TEST_P(LayerTreeHostImplTest, scrollRootCallsCommitAndRedraw) | 327 TEST_P(LayerTreeHostImplTest, scrollRootCallsCommitAndRedraw) |
327 { | 328 { |
328 setupScrollAndContentsLayers(IntSize(100, 100)); | 329 setupScrollAndContentsLayers(gfx::Size(100, 100)); |
329 m_hostImpl->setViewportSize(IntSize(50, 50), IntSize(50, 50)); | 330 m_hostImpl->setViewportSize(gfx::Size(50, 50), gfx::Size(50, 50)); |
330 initializeRendererAndDrawFrame(); | 331 initializeRendererAndDrawFrame(); |
331 | 332 |
332 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), InputHandlerClient::Wheel)
, InputHandlerClient::ScrollStarted); | 333 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), InputHandlerClient::Wheel)
, InputHandlerClient::ScrollStarted); |
333 m_hostImpl->scrollBy(IntPoint(), IntSize(0, 10)); | 334 m_hostImpl->scrollBy(IntPoint(), IntSize(0, 10)); |
334 m_hostImpl->scrollEnd(); | 335 m_hostImpl->scrollEnd(); |
335 EXPECT_TRUE(m_didRequestRedraw); | 336 EXPECT_TRUE(m_didRequestRedraw); |
336 EXPECT_TRUE(m_didRequestCommit); | 337 EXPECT_TRUE(m_didRequestCommit); |
337 } | 338 } |
338 | 339 |
339 TEST_P(LayerTreeHostImplTest, scrollWithoutRootLayer) | 340 TEST_P(LayerTreeHostImplTest, scrollWithoutRootLayer) |
340 { | 341 { |
341 // We should not crash when trying to scroll an empty layer tree. | 342 // We should not crash when trying to scroll an empty layer tree. |
342 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), InputHandlerClient::Wheel)
, InputHandlerClient::ScrollIgnored); | 343 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), InputHandlerClient::Wheel)
, InputHandlerClient::ScrollIgnored); |
343 } | 344 } |
344 | 345 |
345 TEST_P(LayerTreeHostImplTest, scrollWithoutRenderer) | 346 TEST_P(LayerTreeHostImplTest, scrollWithoutRenderer) |
346 { | 347 { |
347 LayerTreeSettings settings; | 348 LayerTreeSettings settings; |
348 m_hostImpl = LayerTreeHostImpl::create(settings, this); | 349 m_hostImpl = LayerTreeHostImpl::create(settings, this); |
349 | 350 |
350 // Initialization will fail here. | 351 // Initialization will fail here. |
351 m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurface::create(scoped
_ptr<WebKit::WebGraphicsContext3D>(new FakeWebGraphicsContext3DMakeCurrentFails)
).PassAs<GraphicsContext>()); | 352 m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurface::create(scoped
_ptr<WebKit::WebGraphicsContext3D>(new FakeWebGraphicsContext3DMakeCurrentFails)
).PassAs<GraphicsContext>()); |
352 m_hostImpl->setViewportSize(IntSize(10, 10), IntSize(10, 10)); | 353 m_hostImpl->setViewportSize(gfx::Size(10, 10), gfx::Size(10, 10)); |
353 | 354 |
354 setupScrollAndContentsLayers(IntSize(100, 100)); | 355 setupScrollAndContentsLayers(gfx::Size(100, 100)); |
355 | 356 |
356 // We should not crash when trying to scroll after the renderer initializati
on fails. | 357 // We should not crash when trying to scroll after the renderer initializati
on fails. |
357 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), InputHandlerClient::Wheel)
, InputHandlerClient::ScrollIgnored); | 358 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), InputHandlerClient::Wheel)
, InputHandlerClient::ScrollIgnored); |
358 } | 359 } |
359 | 360 |
360 TEST_P(LayerTreeHostImplTest, replaceTreeWhileScrolling) | 361 TEST_P(LayerTreeHostImplTest, replaceTreeWhileScrolling) |
361 { | 362 { |
362 const int scrollLayerId = 1; | 363 const int scrollLayerId = 1; |
363 | 364 |
364 setupScrollAndContentsLayers(IntSize(100, 100)); | 365 setupScrollAndContentsLayers(gfx::Size(100, 100)); |
365 m_hostImpl->setViewportSize(IntSize(50, 50), IntSize(50, 50)); | 366 m_hostImpl->setViewportSize(gfx::Size(50, 50), gfx::Size(50, 50)); |
366 initializeRendererAndDrawFrame(); | 367 initializeRendererAndDrawFrame(); |
367 | 368 |
368 // We should not crash if the tree is replaced while we are scrolling. | 369 // We should not crash if the tree is replaced while we are scrolling. |
369 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), InputHandlerClient::Wheel)
, InputHandlerClient::ScrollStarted); | 370 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), InputHandlerClient::Wheel)
, InputHandlerClient::ScrollStarted); |
370 m_hostImpl->detachLayerTree(); | 371 m_hostImpl->detachLayerTree(); |
371 | 372 |
372 setupScrollAndContentsLayers(IntSize(100, 100)); | 373 setupScrollAndContentsLayers(gfx::Size(100, 100)); |
373 | 374 |
374 // We should still be scrolling, because the scrolled layer also exists in t
he new tree. | 375 // We should still be scrolling, because the scrolled layer also exists in t
he new tree. |
375 IntSize scrollDelta(0, 10); | 376 IntSize scrollDelta(0, 10); |
376 m_hostImpl->scrollBy(IntPoint(), scrollDelta); | 377 m_hostImpl->scrollBy(IntPoint(), scrollDelta); |
377 m_hostImpl->scrollEnd(); | 378 m_hostImpl->scrollEnd(); |
378 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas()
; | 379 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas()
; |
379 expectContains(*scrollInfo, scrollLayerId, scrollDelta); | 380 expectContains(*scrollInfo, scrollLayerId, scrollDelta); |
380 } | 381 } |
381 | 382 |
382 TEST_P(LayerTreeHostImplTest, clearRootRenderSurfaceAndScroll) | 383 TEST_P(LayerTreeHostImplTest, clearRootRenderSurfaceAndScroll) |
383 { | 384 { |
384 setupScrollAndContentsLayers(IntSize(100, 100)); | 385 setupScrollAndContentsLayers(gfx::Size(100, 100)); |
385 m_hostImpl->setViewportSize(IntSize(50, 50), IntSize(50, 50)); | 386 m_hostImpl->setViewportSize(gfx::Size(50, 50), gfx::Size(50, 50)); |
386 initializeRendererAndDrawFrame(); | 387 initializeRendererAndDrawFrame(); |
387 | 388 |
388 // We should be able to scroll even if the root layer loses its render surfa
ce after the most | 389 // We should be able to scroll even if the root layer loses its render surfa
ce after the most |
389 // recent render. | 390 // recent render. |
390 m_hostImpl->rootLayer()->clearRenderSurface(); | 391 m_hostImpl->rootLayer()->clearRenderSurface(); |
391 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), InputHandlerClient::Wheel)
, InputHandlerClient::ScrollStarted); | 392 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), InputHandlerClient::Wheel)
, InputHandlerClient::ScrollStarted); |
392 } | 393 } |
393 | 394 |
394 TEST_P(LayerTreeHostImplTest, wheelEventHandlers) | 395 TEST_P(LayerTreeHostImplTest, wheelEventHandlers) |
395 { | 396 { |
396 setupScrollAndContentsLayers(IntSize(100, 100)); | 397 setupScrollAndContentsLayers(gfx::Size(100, 100)); |
397 m_hostImpl->setViewportSize(IntSize(50, 50), IntSize(50, 50)); | 398 m_hostImpl->setViewportSize(gfx::Size(50, 50), gfx::Size(50, 50)); |
398 initializeRendererAndDrawFrame(); | 399 initializeRendererAndDrawFrame(); |
399 LayerImpl* root = m_hostImpl->rootLayer(); | 400 LayerImpl* root = m_hostImpl->rootLayer(); |
400 | 401 |
401 root->setHaveWheelEventHandlers(true); | 402 root->setHaveWheelEventHandlers(true); |
402 | 403 |
403 // With registered event handlers, wheel scrolls have to go to the main thre
ad. | 404 // With registered event handlers, wheel scrolls have to go to the main thre
ad. |
404 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), InputHandlerClient::Wheel)
, InputHandlerClient::ScrollOnMainThread); | 405 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), InputHandlerClient::Wheel)
, InputHandlerClient::ScrollOnMainThread); |
405 | 406 |
406 // But gesture scrolls can still be handled. | 407 // But gesture scrolls can still be handled. |
407 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), InputHandlerClient::Gestur
e), InputHandlerClient::ScrollStarted); | 408 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), InputHandlerClient::Gestur
e), InputHandlerClient::ScrollStarted); |
408 } | 409 } |
409 | 410 |
410 TEST_P(LayerTreeHostImplTest, shouldScrollOnMainThread) | 411 TEST_P(LayerTreeHostImplTest, shouldScrollOnMainThread) |
411 { | 412 { |
412 setupScrollAndContentsLayers(IntSize(100, 100)); | 413 setupScrollAndContentsLayers(gfx::Size(100, 100)); |
413 m_hostImpl->setViewportSize(IntSize(50, 50), IntSize(50, 50)); | 414 m_hostImpl->setViewportSize(gfx::Size(50, 50), gfx::Size(50, 50)); |
414 initializeRendererAndDrawFrame(); | 415 initializeRendererAndDrawFrame(); |
415 LayerImpl* root = m_hostImpl->rootLayer(); | 416 LayerImpl* root = m_hostImpl->rootLayer(); |
416 | 417 |
417 root->setShouldScrollOnMainThread(true); | 418 root->setShouldScrollOnMainThread(true); |
418 | 419 |
419 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), InputHandlerClient::Wheel)
, InputHandlerClient::ScrollOnMainThread); | 420 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), InputHandlerClient::Wheel)
, InputHandlerClient::ScrollOnMainThread); |
420 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), InputHandlerClient::Gestur
e), InputHandlerClient::ScrollOnMainThread); | 421 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), InputHandlerClient::Gestur
e), InputHandlerClient::ScrollOnMainThread); |
421 } | 422 } |
422 | 423 |
423 TEST_P(LayerTreeHostImplTest, nonFastScrollableRegionBasic) | 424 TEST_P(LayerTreeHostImplTest, nonFastScrollableRegionBasic) |
424 { | 425 { |
425 setupScrollAndContentsLayers(IntSize(200, 200)); | 426 setupScrollAndContentsLayers(gfx::Size(200, 200)); |
426 m_hostImpl->setViewportSize(IntSize(100, 100), IntSize(100, 100)); | 427 m_hostImpl->setViewportSize(gfx::Size(100, 100), gfx::Size(100, 100)); |
427 initializeRendererAndDrawFrame(); | 428 initializeRendererAndDrawFrame(); |
428 LayerImpl* root = m_hostImpl->rootLayer(); | 429 LayerImpl* root = m_hostImpl->rootLayer(); |
429 | 430 |
430 root->setNonFastScrollableRegion(IntRect(0, 0, 50, 50)); | 431 root->setNonFastScrollableRegion(IntRect(0, 0, 50, 50)); |
431 | 432 |
432 // All scroll types inside the non-fast scrollable region should fail. | 433 // All scroll types inside the non-fast scrollable region should fail. |
433 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(25, 25), InputHandlerClient::Whee
l), InputHandlerClient::ScrollOnMainThread); | 434 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(25, 25), InputHandlerClient::Whee
l), InputHandlerClient::ScrollOnMainThread); |
434 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(25, 25), InputHandlerClient::Gest
ure), InputHandlerClient::ScrollOnMainThread); | 435 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(25, 25), InputHandlerClient::Gest
ure), InputHandlerClient::ScrollOnMainThread); |
435 | 436 |
436 // All scroll types outside this region should succeed. | 437 // All scroll types outside this region should succeed. |
437 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(75, 75), InputHandlerClient::Whee
l), InputHandlerClient::ScrollStarted); | 438 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(75, 75), InputHandlerClient::Whee
l), InputHandlerClient::ScrollStarted); |
438 m_hostImpl->scrollBy(IntPoint(), IntSize(0, 10)); | 439 m_hostImpl->scrollBy(IntPoint(), IntSize(0, 10)); |
439 m_hostImpl->scrollEnd(); | 440 m_hostImpl->scrollEnd(); |
440 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(75, 75), InputHandlerClient::Gest
ure), InputHandlerClient::ScrollStarted); | 441 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(75, 75), InputHandlerClient::Gest
ure), InputHandlerClient::ScrollStarted); |
441 m_hostImpl->scrollBy(IntPoint(), IntSize(0, 10)); | 442 m_hostImpl->scrollBy(IntPoint(), IntSize(0, 10)); |
442 m_hostImpl->scrollEnd(); | 443 m_hostImpl->scrollEnd(); |
443 } | 444 } |
444 | 445 |
445 TEST_P(LayerTreeHostImplTest, nonFastScrollableRegionWithOffset) | 446 TEST_P(LayerTreeHostImplTest, nonFastScrollableRegionWithOffset) |
446 { | 447 { |
447 setupScrollAndContentsLayers(IntSize(200, 200)); | 448 setupScrollAndContentsLayers(gfx::Size(200, 200)); |
448 m_hostImpl->setViewportSize(IntSize(100, 100), IntSize(100, 100)); | 449 m_hostImpl->setViewportSize(gfx::Size(100, 100), gfx::Size(100, 100)); |
449 LayerImpl* root = m_hostImpl->rootLayer(); | 450 LayerImpl* root = m_hostImpl->rootLayer(); |
450 | 451 |
451 root->setNonFastScrollableRegion(IntRect(0, 0, 50, 50)); | 452 root->setNonFastScrollableRegion(IntRect(0, 0, 50, 50)); |
452 root->setPosition(FloatPoint(-25, 0)); | 453 root->setPosition(gfx::PointF(-25, 0)); |
453 initializeRendererAndDrawFrame(); | 454 initializeRendererAndDrawFrame(); |
454 | 455 |
455 // This point would fall into the non-fast scrollable region except that we'
ve moved the layer down by 25 pixels. | 456 // 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), InputHandlerClient::Whee
l), InputHandlerClient::ScrollStarted); | 457 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(40, 10), InputHandlerClient::Whee
l), InputHandlerClient::ScrollStarted); |
457 m_hostImpl->scrollBy(IntPoint(), IntSize(0, 1)); | 458 m_hostImpl->scrollBy(IntPoint(), IntSize(0, 1)); |
458 m_hostImpl->scrollEnd(); | 459 m_hostImpl->scrollEnd(); |
459 | 460 |
460 // This point is still inside the non-fast region. | 461 // This point is still inside the non-fast region. |
461 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(10, 10), InputHandlerClient::Whee
l), InputHandlerClient::ScrollOnMainThread); | 462 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(10, 10), InputHandlerClient::Whee
l), InputHandlerClient::ScrollOnMainThread); |
462 } | 463 } |
463 | 464 |
464 TEST_P(LayerTreeHostImplTest, maxScrollPositionChangedByDeviceScaleFactor) | 465 TEST_P(LayerTreeHostImplTest, maxScrollPositionChangedByDeviceScaleFactor) |
465 { | 466 { |
466 setupScrollAndContentsLayers(IntSize(100, 100)); | 467 setupScrollAndContentsLayers(gfx::Size(100, 100)); |
467 | 468 |
468 float deviceScaleFactor = 2; | 469 float deviceScaleFactor = 2; |
469 IntSize layoutViewport(25, 25); | 470 gfx::Size layoutViewport(25, 25); |
470 IntSize deviceViewport(layoutViewport); | 471 gfx::Size deviceViewport(gfx::ToFlooredSize(layoutViewport.Scale(deviceScale
Factor))); |
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(LayerTreeHostImplTest, 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 (!Settings::pageScalePinchZoomEnabled()) | 485 if (!Settings::pageScalePinchZoomEnabled()) |
486 return; | 486 return; |
487 | 487 |
488 setupScrollAndContentsLayers(IntSize(100, 100)); | 488 setupScrollAndContentsLayers(gfx::Size(100, 100)); |
489 m_hostImpl->setViewportSize(IntSize(50, 50), IntSize(50, 50)); | 489 m_hostImpl->setViewportSize(gfx::Size(50, 50), gfx::Size(50, 50)); |
490 initializeRendererAndDrawFrame(); | 490 initializeRendererAndDrawFrame(); |
491 | 491 |
492 LayerImpl* scrollLayer = m_hostImpl->rootScrollLayer(); | 492 LayerImpl* scrollLayer = m_hostImpl->rootScrollLayer(); |
493 DCHECK(scrollLayer); | 493 DCHECK(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 { |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDelt
as(); | 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(LayerTreeHostImplTest, pinchGesture) | 539 TEST_P(LayerTreeHostImplTest, pinchGesture) |
540 { | 540 { |
541 setupScrollAndContentsLayers(IntSize(100, 100)); | 541 setupScrollAndContentsLayers(gfx::Size(100, 100)); |
542 m_hostImpl->setViewportSize(IntSize(50, 50), IntSize(50, 50)); | 542 m_hostImpl->setViewportSize(gfx::Size(50, 50), gfx::Size(50, 50)); |
543 initializeRendererAndDrawFrame(); | 543 initializeRendererAndDrawFrame(); |
544 | 544 |
545 LayerImpl* scrollLayer = m_hostImpl->rootScrollLayer(); | 545 LayerImpl* scrollLayer = m_hostImpl->rootScrollLayer(); |
546 DCHECK(scrollLayer); | 546 DCHECK(scrollLayer); |
547 | 547 |
548 const float minPageScale = Settings::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 |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
618 m_hostImpl->pinchGestureEnd(); | 618 m_hostImpl->pinchGestureEnd(); |
619 | 619 |
620 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDelt
as(); | 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(LayerTreeHostImplTest, pageScaleAnimation) | 626 TEST_P(LayerTreeHostImplTest, pageScaleAnimation) |
627 { | 627 { |
628 setupScrollAndContentsLayers(IntSize(100, 100)); | 628 setupScrollAndContentsLayers(gfx::Size(100, 100)); |
629 m_hostImpl->setViewportSize(IntSize(50, 50), IntSize(50, 50)); | 629 m_hostImpl->setViewportSize(gfx::Size(50, 50), gfx::Size(50, 50)); |
630 initializeRendererAndDrawFrame(); | 630 initializeRendererAndDrawFrame(); |
631 | 631 |
632 LayerImpl* scrollLayer = m_hostImpl->rootScrollLayer(); | 632 LayerImpl* scrollLayer = m_hostImpl->rootScrollLayer(); |
633 DCHECK(scrollLayer); | 633 DCHECK(scrollLayer); |
634 | 634 |
635 const float minPageScale = Settings::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; |
(...skipping 30 matching lines...) Expand all Loading... |
670 | 670 |
671 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDelt
as(); | 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(LayerTreeHostImplTest, inhibitScrollAndPageScaleUpdatesWhilePinchZooming) | 678 TEST_P(LayerTreeHostImplTest, inhibitScrollAndPageScaleUpdatesWhilePinchZooming) |
679 { | 679 { |
680 setupScrollAndContentsLayers(IntSize(100, 100)); | 680 setupScrollAndContentsLayers(gfx::Size(100, 100)); |
681 m_hostImpl->setViewportSize(IntSize(50, 50), IntSize(50, 50)); | 681 m_hostImpl->setViewportSize(gfx::Size(50, 50), gfx::Size(50, 50)); |
682 initializeRendererAndDrawFrame(); | 682 initializeRendererAndDrawFrame(); |
683 | 683 |
684 LayerImpl* scrollLayer = m_hostImpl->rootScrollLayer(); | 684 LayerImpl* scrollLayer = m_hostImpl->rootScrollLayer(); |
685 DCHECK(scrollLayer); | 685 DCHECK(scrollLayer); |
686 | 686 |
687 const float minPageScale = Settings::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 { |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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(LayerTreeHostImplTest, inhibitScrollAndPageScaleUpdatesWhileAnimatingPage
Scale) | 747 TEST_P(LayerTreeHostImplTest, inhibitScrollAndPageScaleUpdatesWhileAnimatingPage
Scale) |
748 { | 748 { |
749 setupScrollAndContentsLayers(IntSize(100, 100)); | 749 setupScrollAndContentsLayers(gfx::Size(100, 100)); |
750 m_hostImpl->setViewportSize(IntSize(50, 50), IntSize(50, 50)); | 750 m_hostImpl->setViewportSize(gfx::Size(50, 50), gfx::Size(50, 50)); |
751 initializeRendererAndDrawFrame(); | 751 initializeRendererAndDrawFrame(); |
752 | 752 |
753 LayerImpl* scrollLayer = m_hostImpl->rootScrollLayer(); | 753 LayerImpl* scrollLayer = m_hostImpl->rootScrollLayer(); |
754 DCHECK(scrollLayer); | 754 DCHECK(scrollLayer); |
755 | 755 |
756 const float minPageScale = Settings::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; |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 : TiledLayerImpl(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(gfx::PointF(0, 0)); |
825 setBounds(IntSize(10, 10)); | 825 setBounds(gfx::Size(10, 10)); |
826 setContentBounds(IntSize(10, 10)); | 826 setContentBounds(gfx::Size(10, 10)); |
827 setDrawsContent(true); | 827 setDrawsContent(true); |
828 setSkipsDraw(false); | 828 setSkipsDraw(false); |
829 setVisibleContentRect(IntRect(0, 0, 10, 10)); | 829 setVisibleContentRect(gfx::Rect(0, 0, 10, 10)); |
830 | 830 |
831 scoped_ptr<LayerTilingData> tiler = LayerTilingData::create(IntSize(100,
100), LayerTilingData::HasBorderTexels); | 831 scoped_ptr<LayerTilingData> tiler = LayerTilingData::create(gfx::Size(10
0, 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(LayerTreeHostImplTest, 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(gfx::PointF(100, 100)); |
853 layer->setBounds(IntSize(10, 10)); | 853 layer->setBounds(gfx::Size(10, 10)); |
854 layer->setContentBounds(IntSize(10, 10)); | 854 layer->setContentBounds(gfx::Size(10, 10)); |
855 | 855 |
856 LayerTreeHostImpl::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(gfx::PointF(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(LayerTreeHostImplTest, willDrawNotCalledOnOccludedLayer) | 886 TEST_P(LayerTreeHostImplTest, willDrawNotCalledOnOccludedLayer) |
887 { | 887 { |
888 IntSize bigSize(1000, 1000); | 888 gfx::Size 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]); |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
953 public: | 953 public: |
954 static scoped_ptr<LayerImpl> create(int id, bool tileMissing, bool skipsDraw
, bool animating, ResourceProvider* resourceProvider) | 954 static scoped_ptr<LayerImpl> create(int id, bool tileMissing, bool skipsDraw
, bool animating, ResourceProvider* resourceProvider) |
955 { | 955 { |
956 return scoped_ptr<LayerImpl>(new MissingTextureAnimatingLayer(id, tileMi
ssing, 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, ResourceProvider* 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<LayerTilingData> tilingData = LayerTilingData::create(IntSize
(10, 10), LayerTilingData::NoBorderTexels); | 963 scoped_ptr<LayerTilingData> tilingData = LayerTilingData::create(gfx::Si
ze(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 ResourceProvider::ResourceId resource = resourceProvider->createReso
urce(Renderer::ContentPool, IntSize(), GL_RGBA, ResourceProvider::TextureUsageAn
y); | 968 ResourceProvider::ResourceId resource = resourceProvider->createReso
urce(Renderer::ContentPool, gfx::Size(), GL_RGBA, ResourceProvider::TextureUsage
Any); |
969 pushTileProperties(0, 0, resource, IntRect(), false); | 969 pushTileProperties(0, 0, resource, gfx::Rect(), false); |
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(LayerTreeHostImplTest, 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)); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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), InputHandlerClient::Wheel)
, InputHandlerClient::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(LayerTreeHostImplTest, 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 gfx::Size surfaceSize(10, 10); |
1035 | 1035 |
1036 scoped_ptr<LayerImpl> contentLayer = LayerImpl::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(gfx::PointF(0, 0)); |
1040 contentLayer->setAnchorPoint(FloatPoint(0, 0)); | 1040 contentLayer->setAnchorPoint(gfx::PointF(0, 0)); |
1041 contentLayer->setBounds(surfaceSize); | 1041 contentLayer->setBounds(surfaceSize); |
1042 contentLayer->setContentBounds(IntSize(surfaceSize.width() * 2, surfaceSize.
height() * 2)); | 1042 contentLayer->setContentBounds(gfx::Size(surfaceSize.width() * 2, surfaceSiz
e.height() * 2)); |
1043 | 1043 |
1044 scoped_ptr<LayerImpl> scrollLayer = LayerImpl::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(cc::IntSize(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(gfx::PointF(0, 0)); |
1050 scrollLayer->setAnchorPoint(FloatPoint(0, 0)); | 1050 scrollLayer->setAnchorPoint(gfx::PointF(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), InputHandlerClient::Wheel)
, InputHandlerClient::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(LayerTreeHostImplTest, scrollChildCallsCommitAndRedraw) | 1064 TEST_P(LayerTreeHostImplTest, scrollChildCallsCommitAndRedraw) |
1065 { | 1065 { |
1066 IntSize surfaceSize(10, 10); | 1066 gfx::Size surfaceSize(10, 10); |
1067 scoped_ptr<LayerImpl> root = LayerImpl::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), InputHandlerClient::Wheel)
, InputHandlerClient::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(LayerTreeHostImplTest, scrollMissesChild) | 1082 TEST_P(LayerTreeHostImplTest, scrollMissesChild) |
1083 { | 1083 { |
1084 IntSize surfaceSize(10, 10); | 1084 gfx::Size surfaceSize(10, 10); |
1085 scoped_ptr<LayerImpl> root = LayerImpl::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), InputHandlerClient::Wheel
), InputHandlerClient::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(LayerTreeHostImplTest, scrollMissesBackfacingChild) | 1097 TEST_P(LayerTreeHostImplTest, scrollMissesBackfacingChild) |
1098 { | 1098 { |
1099 IntSize surfaceSize(10, 10); | 1099 gfx::Size surfaceSize(10, 10); |
1100 scoped_ptr<LayerImpl> root = LayerImpl::create(1); | 1100 scoped_ptr<LayerImpl> root = LayerImpl::create(1); |
1101 scoped_ptr<LayerImpl> 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), InputHandlerClient::Wheel)
, InputHandlerClient::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(LayerTreeHostImplTest, scrollBlockedByContentLayer) | 1120 TEST_P(LayerTreeHostImplTest, scrollBlockedByContentLayer) |
1121 { | 1121 { |
1122 IntSize surfaceSize(10, 10); | 1122 gfx::Size surfaceSize(10, 10); |
1123 scoped_ptr<LayerImpl> 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<LayerImpl> 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), InputHandlerClient::Wheel)
, InputHandlerClient::ScrollOnMainThread); | 1135 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(5, 5), InputHandlerClient::Wheel)
, InputHandlerClient::ScrollOnMainThread); |
1136 } | 1136 } |
1137 | 1137 |
1138 TEST_P(LayerTreeHostImplTest, scrollRootAndChangePageScaleOnMainThread) | 1138 TEST_P(LayerTreeHostImplTest, scrollRootAndChangePageScaleOnMainThread) |
1139 { | 1139 { |
1140 IntSize surfaceSize(10, 10); | 1140 gfx::Size surfaceSize(10, 10); |
1141 float pageScale = 2; | 1141 float pageScale = 2; |
1142 scoped_ptr<LayerImpl> 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), InputHandlerClient::Wheel)
, InputHandlerClient::ScrollStarted); | 1150 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(5, 5), InputHandlerClient::Wheel)
, InputHandlerClient::ScrollStarted); |
(...skipping 12 matching lines...) Expand all Loading... |
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(LayerTreeHostImplTest, scrollRootAndChangePageScaleOnImplThread) | 1171 TEST_P(LayerTreeHostImplTest, scrollRootAndChangePageScaleOnImplThread) |
1172 { | 1172 { |
1173 IntSize surfaceSize(10, 10); | 1173 gfx::Size surfaceSize(10, 10); |
1174 float pageScale = 2; | 1174 float pageScale = 2; |
1175 scoped_ptr<LayerImpl> 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()); |
(...skipping 15 matching lines...) Expand all Loading... |
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(LayerTreeHostImplTest, pageScaleDeltaAppliedToRootScrollLayerOnly) | 1207 TEST_P(LayerTreeHostImplTest, pageScaleDeltaAppliedToRootScrollLayerOnly) |
1208 { | 1208 { |
1209 IntSize surfaceSize(10, 10); | 1209 gfx::Size 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 LayerImpl* root = m_hostImpl->rootLayer(); | 1219 LayerImpl* root = m_hostImpl->rootLayer(); |
(...skipping 24 matching lines...) Expand all Loading... |
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(LayerTreeHostImplTest, scrollChildAndChangePageScaleOnMainThread) | 1252 TEST_P(LayerTreeHostImplTest, scrollChildAndChangePageScaleOnMainThread) |
1253 { | 1253 { |
1254 IntSize surfaceSize(10, 10); | 1254 gfx::Size surfaceSize(10, 10); |
1255 scoped_ptr<LayerImpl> root = LayerImpl::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(); |
(...skipping 25 matching lines...) Expand all Loading... |
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(LayerTreeHostImplTest, 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 gfx::Size surfaceSize(10, 10); |
1301 scoped_ptr<LayerImpl> root = createScrollableLayer(1, surfaceSize); | 1301 scoped_ptr<LayerImpl> root = createScrollableLayer(1, surfaceSize); |
1302 | 1302 |
1303 scoped_ptr<LayerImpl> 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<LayerImpl> 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()); |
(...skipping 15 matching lines...) Expand all Loading... |
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(LayerTreeHostImplTest, 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 gfx::Size surfaceSize(10, 10); |
1337 scoped_ptr<LayerImpl> root = createScrollableLayer(1, surfaceSize); | 1337 scoped_ptr<LayerImpl> root = createScrollableLayer(1, surfaceSize); |
1338 scoped_ptr<LayerImpl> 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), InputHandlerClient::Wh
eel), InputHandlerClient::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<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDelt
as(); | 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(LayerTreeHostImplTest, scrollBeforeRedraw) | 1360 TEST_P(LayerTreeHostImplTest, scrollBeforeRedraw) |
1361 { | 1361 { |
1362 IntSize surfaceSize(10, 10); | 1362 gfx::Size 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), InputHandlerClient::Wheel)
, InputHandlerClient::ScrollStarted); | 1372 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(5, 5), InputHandlerClient::Wheel)
, InputHandlerClient::ScrollStarted); |
1373 } | 1373 } |
1374 | 1374 |
1375 TEST_P(LayerTreeHostImplTest, scrollAxisAlignedRotatedLayer) | 1375 TEST_P(LayerTreeHostImplTest, scrollAxisAlignedRotatedLayer) |
1376 { | 1376 { |
1377 setupScrollAndContentsLayers(IntSize(100, 100)); | 1377 setupScrollAndContentsLayers(gfx::Size(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 gfx::Size 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), InputHandlerClient::Gestur
e), InputHandlerClient::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<ScrollAndScaleSet> 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), InputHandlerClient::Wheel)
, InputHandlerClient::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(LayerTreeHostImplTest, scrollNonAxisAlignedRotatedLayer) | 1410 TEST_P(LayerTreeHostImplTest, scrollNonAxisAlignedRotatedLayer) |
1411 { | 1411 { |
1412 setupScrollAndContentsLayers(IntSize(100, 100)); | 1412 setupScrollAndContentsLayers(gfx::Size(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<LayerImpl> child = createScrollableLayer(childLayerId, m_hostImpl
->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 gfx::Size 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), InputHandlerClient::Ge
sture), InputHandlerClient::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 |
(...skipping 24 matching lines...) Expand all Loading... |
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(LayerTreeHostImplTest, scrollScaledLayer) | 1471 TEST_P(LayerTreeHostImplTest, scrollScaledLayer) |
1472 { | 1472 { |
1473 setupScrollAndContentsLayers(IntSize(100, 100)); | 1473 setupScrollAndContentsLayers(gfx::Size(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 gfx::Size 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), InputHandlerClient::Gestur
e), InputHandlerClient::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. |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1527 }; | 1527 }; |
1528 | 1528 |
1529 class BlendStateCheckLayer : public LayerImpl { | 1529 class BlendStateCheckLayer : public LayerImpl { |
1530 public: | 1530 public: |
1531 static scoped_ptr<LayerImpl> create(int id, ResourceProvider* resourceProvid
er) { return scoped_ptr<LayerImpl>(new BlendStateCheckLayer(id, resourceProvider
)); } | 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(QuadSink& quadSink, AppendQuadsData& appendQuadsDat
a) 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 gfx::Rect 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 SharedQuadState* sharedQuadState = quadSink.useSharedQuadState(createSha
redQuadState()); | 1543 SharedQuadState* sharedQuadState = quadSink.useSharedQuadState(createSha
redQuadState()); |
1544 scoped_ptr<TileDrawQuad> testBlendingDrawQuad = TileDrawQuad::create(sha
redQuadState, 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, gfx::Vector2d(), gfx::Size(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<DrawQuad>(), appendQuadsData
); | 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 gfx::Rect& rect) { m_quadRect = rect; } |
1561 void setQuadVisibleRect(const IntRect& rect) { m_quadVisibleRect = rect; } | 1561 void setQuadVisibleRect(const gfx::Rect& rect) { m_quadVisibleRect = rect; } |
1562 void setOpaqueContentRect(const IntRect& rect) { m_opaqueContentRect = rect;
} | 1562 void setOpaqueContentRect(const gfx::Rect& rect) { m_opaqueContentRect = rec
t; } |
1563 | 1563 |
1564 private: | 1564 private: |
1565 explicit BlendStateCheckLayer(int id, ResourceProvider* resourceProvider) | 1565 explicit BlendStateCheckLayer(int id, ResourceProvider* resourceProvider) |
1566 : LayerImpl(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(Renderer::ContentPool, I
ntSize(1, 1), GL_RGBA, ResourceProvider::TextureUsageAny)) | 1572 , m_resourceId(resourceProvider->createResource(Renderer::ContentPool, g
fx::Size(1, 1), GL_RGBA, ResourceProvider::TextureUsageAny)) |
1573 { | 1573 { |
1574 setAnchorPoint(FloatPoint(0, 0)); | 1574 setAnchorPoint(gfx::PointF(0, 0)); |
1575 setBounds(IntSize(10, 10)); | 1575 setBounds(gfx::Size(10, 10)); |
1576 setContentBounds(IntSize(10, 10)); | 1576 setContentBounds(gfx::Size(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 gfx::Rect m_quadRect; |
1584 IntRect m_opaqueContentRect; | 1584 gfx::Rect m_opaqueContentRect; |
1585 IntRect m_quadVisibleRect; | 1585 gfx::Rect m_quadVisibleRect; |
1586 ResourceProvider::ResourceId m_resourceId; | 1586 ResourceProvider::ResourceId m_resourceId; |
1587 }; | 1587 }; |
1588 | 1588 |
1589 TEST_P(LayerTreeHostImplTest, blendingOffWhenDrawingOpaqueLayers) | 1589 TEST_P(LayerTreeHostImplTest, blendingOffWhenDrawingOpaqueLayers) |
1590 { | 1590 { |
1591 { | 1591 { |
1592 scoped_ptr<LayerImpl> root = LayerImpl::create(1); | 1592 scoped_ptr<LayerImpl> root = LayerImpl::create(1); |
1593 root->setAnchorPoint(FloatPoint(0, 0)); | 1593 root->setAnchorPoint(gfx::PointF(0, 0)); |
1594 root->setBounds(IntSize(10, 10)); | 1594 root->setBounds(gfx::Size(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 LayerImpl* 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(gfx::PointF(2, 2)); |
1604 | 1604 |
1605 LayerTreeHostImpl::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); |
(...skipping 19 matching lines...) Expand all Loading... |
1633 layer1->setContentsOpaque(true); | 1633 layer1->setContentsOpaque(true); |
1634 layer1->setOpacity(0.5); | 1634 layer1->setOpacity(0.5); |
1635 layer1->setExpectation(true, false); | 1635 layer1->setExpectation(true, false); |
1636 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); | 1636 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
1637 m_hostImpl->drawLayers(frame); | 1637 m_hostImpl->drawLayers(frame); |
1638 EXPECT_TRUE(layer1->quadsAppended()); | 1638 EXPECT_TRUE(layer1->quadsAppended()); |
1639 m_hostImpl->didDrawAllLayers(frame); | 1639 m_hostImpl->didDrawAllLayers(frame); |
1640 | 1640 |
1641 layer1->addChild(BlendStateCheckLayer::create(3, m_hostImpl->resourceProvide
r())); | 1641 layer1->addChild(BlendStateCheckLayer::create(3, m_hostImpl->resourceProvide
r())); |
1642 BlendStateCheckLayer* layer2 = static_cast<BlendStateCheckLayer*>(layer1->ch
ildren()[0]); | 1642 BlendStateCheckLayer* layer2 = static_cast<BlendStateCheckLayer*>(layer1->ch
ildren()[0]); |
1643 layer2->setPosition(FloatPoint(4, 4)); | 1643 layer2->setPosition(gfx::PointF(4, 4)); |
1644 | 1644 |
1645 // 2 opaque layers, drawn without blending. | 1645 // 2 opaque layers, drawn without blending. |
1646 layer1->setContentsOpaque(true); | 1646 layer1->setContentsOpaque(true); |
1647 layer1->setOpacity(1); | 1647 layer1->setOpacity(1); |
1648 layer1->setExpectation(false, false); | 1648 layer1->setExpectation(false, false); |
1649 layer2->setContentsOpaque(true); | 1649 layer2->setContentsOpaque(true); |
1650 layer2->setOpacity(1); | 1650 layer2->setOpacity(1); |
1651 layer2->setExpectation(false, false); | 1651 layer2->setExpectation(false, false); |
1652 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); | 1652 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
1653 m_hostImpl->drawLayers(frame); | 1653 m_hostImpl->drawLayers(frame); |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1727 layer2->setOpacity(1); | 1727 layer2->setOpacity(1); |
1728 layer2->setExpectation(false, false); | 1728 layer2->setExpectation(false, false); |
1729 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); | 1729 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
1730 m_hostImpl->drawLayers(frame); | 1730 m_hostImpl->drawLayers(frame); |
1731 EXPECT_TRUE(layer1->quadsAppended()); | 1731 EXPECT_TRUE(layer1->quadsAppended()); |
1732 EXPECT_TRUE(layer2->quadsAppended()); | 1732 EXPECT_TRUE(layer2->quadsAppended()); |
1733 m_hostImpl->didDrawAllLayers(frame); | 1733 m_hostImpl->didDrawAllLayers(frame); |
1734 | 1734 |
1735 // Layer with partially opaque contents, drawn with blending. | 1735 // Layer with partially opaque contents, drawn with blending. |
1736 layer1->setContentsOpaque(false); | 1736 layer1->setContentsOpaque(false); |
1737 layer1->setQuadRect(IntRect(5, 5, 5, 5)); | 1737 layer1->setQuadRect(gfx::Rect(5, 5, 5, 5)); |
1738 layer1->setQuadVisibleRect(IntRect(5, 5, 5, 5)); | 1738 layer1->setQuadVisibleRect(gfx::Rect(5, 5, 5, 5)); |
1739 layer1->setOpaqueContentRect(IntRect(5, 5, 2, 5)); | 1739 layer1->setOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); |
1740 layer1->setExpectation(true, false); | 1740 layer1->setExpectation(true, false); |
1741 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); | 1741 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
1742 m_hostImpl->drawLayers(frame); | 1742 m_hostImpl->drawLayers(frame); |
1743 EXPECT_TRUE(layer1->quadsAppended()); | 1743 EXPECT_TRUE(layer1->quadsAppended()); |
1744 m_hostImpl->didDrawAllLayers(frame); | 1744 m_hostImpl->didDrawAllLayers(frame); |
1745 | 1745 |
1746 // Layer with partially opaque contents partially culled, drawn with blendin
g. | 1746 // Layer with partially opaque contents partially culled, drawn with blendin
g. |
1747 layer1->setContentsOpaque(false); | 1747 layer1->setContentsOpaque(false); |
1748 layer1->setQuadRect(IntRect(5, 5, 5, 5)); | 1748 layer1->setQuadRect(gfx::Rect(5, 5, 5, 5)); |
1749 layer1->setQuadVisibleRect(IntRect(5, 5, 5, 2)); | 1749 layer1->setQuadVisibleRect(gfx::Rect(5, 5, 5, 2)); |
1750 layer1->setOpaqueContentRect(IntRect(5, 5, 2, 5)); | 1750 layer1->setOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); |
1751 layer1->setExpectation(true, false); | 1751 layer1->setExpectation(true, false); |
1752 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); | 1752 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
1753 m_hostImpl->drawLayers(frame); | 1753 m_hostImpl->drawLayers(frame); |
1754 EXPECT_TRUE(layer1->quadsAppended()); | 1754 EXPECT_TRUE(layer1->quadsAppended()); |
1755 m_hostImpl->didDrawAllLayers(frame); | 1755 m_hostImpl->didDrawAllLayers(frame); |
1756 | 1756 |
1757 // Layer with partially opaque contents culled, drawn with blending. | 1757 // Layer with partially opaque contents culled, drawn with blending. |
1758 layer1->setContentsOpaque(false); | 1758 layer1->setContentsOpaque(false); |
1759 layer1->setQuadRect(IntRect(5, 5, 5, 5)); | 1759 layer1->setQuadRect(gfx::Rect(5, 5, 5, 5)); |
1760 layer1->setQuadVisibleRect(IntRect(7, 5, 3, 5)); | 1760 layer1->setQuadVisibleRect(gfx::Rect(7, 5, 3, 5)); |
1761 layer1->setOpaqueContentRect(IntRect(5, 5, 2, 5)); | 1761 layer1->setOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); |
1762 layer1->setExpectation(true, false); | 1762 layer1->setExpectation(true, false); |
1763 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); | 1763 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
1764 m_hostImpl->drawLayers(frame); | 1764 m_hostImpl->drawLayers(frame); |
1765 EXPECT_TRUE(layer1->quadsAppended()); | 1765 EXPECT_TRUE(layer1->quadsAppended()); |
1766 m_hostImpl->didDrawAllLayers(frame); | 1766 m_hostImpl->didDrawAllLayers(frame); |
1767 | 1767 |
1768 // Layer with partially opaque contents and translucent contents culled, dra
wn without blending. | 1768 // Layer with partially opaque contents and translucent contents culled, dra
wn without blending. |
1769 layer1->setContentsOpaque(false); | 1769 layer1->setContentsOpaque(false); |
1770 layer1->setQuadRect(IntRect(5, 5, 5, 5)); | 1770 layer1->setQuadRect(gfx::Rect(5, 5, 5, 5)); |
1771 layer1->setQuadVisibleRect(IntRect(5, 5, 2, 5)); | 1771 layer1->setQuadVisibleRect(gfx::Rect(5, 5, 2, 5)); |
1772 layer1->setOpaqueContentRect(IntRect(5, 5, 2, 5)); | 1772 layer1->setOpaqueContentRect(gfx::Rect(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(LayerTreeHostImplTest, 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 gfx::Size 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 gfx::Rect layerRect(0, 0, 1000, 1000); |
1797 root->setPosition(layerRect.location()); | 1797 root->setPosition(layerRect.origin()); |
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(gfx::Rect(gfx::Point(), layerRect.size())); |
1801 root->setQuadVisibleRect(IntRect(IntPoint(), layerRect.size())); | 1801 root->setQuadVisibleRect(gfx::Rect(gfx::Point(), layerRect.size())); |
1802 | 1802 |
1803 LayerTreeHostImpl::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()
== DrawQuad::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 gfx::Rect expectedRect(gfx::Point(-layerRect.x(), -layerRect.y()), viewp
ortSize); |
| 1814 verifyQuadsExactlyCoverRect(frame.renderPasses[0]->quadList(), expectedR
ect); |
1814 m_hostImpl->didDrawAllLayers(frame); | 1815 m_hostImpl->didDrawAllLayers(frame); |
1815 } | 1816 } |
1816 | 1817 |
1817 // Empty visible content area (fullscreen gutter rect) | 1818 // Empty visible content area (fullscreen gutter rect) |
1818 { | 1819 { |
1819 IntRect layerRect(0, 0, 0, 0); | 1820 gfx::Rect layerRect(0, 0, 0, 0); |
1820 root->setPosition(layerRect.location()); | 1821 root->setPosition(layerRect.origin()); |
1821 root->setBounds(layerRect.size()); | 1822 root->setBounds(layerRect.size()); |
1822 root->setContentBounds(layerRect.size()); | 1823 root->setContentBounds(layerRect.size()); |
1823 root->setQuadRect(IntRect(IntPoint(), layerRect.size())); | 1824 root->setQuadRect(gfx::Rect(gfx::Point(), layerRect.size())); |
1824 root->setQuadVisibleRect(IntRect(IntPoint(), layerRect.size())); | 1825 root->setQuadVisibleRect(gfx::Rect(gfx::Point(), layerRect.size())); |
1825 | 1826 |
1826 LayerTreeHostImpl::FrameData frame; | 1827 LayerTreeHostImpl::FrameData frame; |
1827 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); | 1828 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
1828 ASSERT_EQ(1u, frame.renderPasses.size()); | 1829 ASSERT_EQ(1u, frame.renderPasses.size()); |
1829 m_hostImpl->didDrawAllLayers(frame); | 1830 m_hostImpl->didDrawAllLayers(frame); |
1830 | 1831 |
1831 size_t numGutterQuads = 0; | 1832 size_t numGutterQuads = 0; |
1832 for (size_t i = 0; i < frame.renderPasses[0]->quadList().size(); ++i) | 1833 for (size_t i = 0; i < frame.renderPasses[0]->quadList().size(); ++i) |
1833 numGutterQuads += (frame.renderPasses[0]->quadList()[i]->material()
== DrawQuad::SolidColor) ? 1 : 0; | 1834 numGutterQuads += (frame.renderPasses[0]->quadList()[i]->material()
== DrawQuad::SolidColor) ? 1 : 0; |
1834 EXPECT_EQ(1u, numGutterQuads); | 1835 EXPECT_EQ(1u, numGutterQuads); |
1835 EXPECT_EQ(1u, frame.renderPasses[0]->quadList().size()); | 1836 EXPECT_EQ(1u, frame.renderPasses[0]->quadList().size()); |
1836 | 1837 |
1837 verifyQuadsExactlyCoverRect(frame.renderPasses[0]->quadList(), IntRect(-
layerRect.location(), viewportSize)); | 1838 gfx::Rect expectedRect(gfx::Point(-layerRect.x(), -layerRect.y()), viewp
ortSize); |
| 1839 verifyQuadsExactlyCoverRect(frame.renderPasses[0]->quadList(), expectedR
ect); |
1838 m_hostImpl->didDrawAllLayers(frame); | 1840 m_hostImpl->didDrawAllLayers(frame); |
1839 } | 1841 } |
1840 | 1842 |
1841 // Content area in middle of clip rect (four surrounding gutter rects) | 1843 // Content area in middle of clip rect (four surrounding gutter rects) |
1842 { | 1844 { |
1843 IntRect layerRect(500, 500, 200, 200); | 1845 gfx::Rect layerRect(500, 500, 200, 200); |
1844 root->setPosition(layerRect.location()); | 1846 root->setPosition(layerRect.origin()); |
1845 root->setBounds(layerRect.size()); | 1847 root->setBounds(layerRect.size()); |
1846 root->setContentBounds(layerRect.size()); | 1848 root->setContentBounds(layerRect.size()); |
1847 root->setQuadRect(IntRect(IntPoint(), layerRect.size())); | 1849 root->setQuadRect(gfx::Rect(gfx::Point(), layerRect.size())); |
1848 root->setQuadVisibleRect(IntRect(IntPoint(), layerRect.size())); | 1850 root->setQuadVisibleRect(gfx::Rect(gfx::Point(), layerRect.size())); |
1849 | 1851 |
1850 LayerTreeHostImpl::FrameData frame; | 1852 LayerTreeHostImpl::FrameData frame; |
1851 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); | 1853 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
1852 ASSERT_EQ(1u, frame.renderPasses.size()); | 1854 ASSERT_EQ(1u, frame.renderPasses.size()); |
1853 | 1855 |
1854 size_t numGutterQuads = 0; | 1856 size_t numGutterQuads = 0; |
1855 for (size_t i = 0; i < frame.renderPasses[0]->quadList().size(); ++i) | 1857 for (size_t i = 0; i < frame.renderPasses[0]->quadList().size(); ++i) |
1856 numGutterQuads += (frame.renderPasses[0]->quadList()[i]->material()
== DrawQuad::SolidColor) ? 1 : 0; | 1858 numGutterQuads += (frame.renderPasses[0]->quadList()[i]->material()
== DrawQuad::SolidColor) ? 1 : 0; |
1857 EXPECT_EQ(4u, numGutterQuads); | 1859 EXPECT_EQ(4u, numGutterQuads); |
1858 EXPECT_EQ(5u, frame.renderPasses[0]->quadList().size()); | 1860 EXPECT_EQ(5u, frame.renderPasses[0]->quadList().size()); |
1859 | 1861 |
1860 verifyQuadsExactlyCoverRect(frame.renderPasses[0]->quadList(), IntRect(-
layerRect.location(), viewportSize)); | 1862 gfx::Rect expectedRect(gfx::Point(-layerRect.x(), -layerRect.y()), viewp
ortSize); |
| 1863 verifyQuadsExactlyCoverRect(frame.renderPasses[0]->quadList(), expectedR
ect); |
1861 m_hostImpl->didDrawAllLayers(frame); | 1864 m_hostImpl->didDrawAllLayers(frame); |
1862 } | 1865 } |
1863 | 1866 |
1864 } | 1867 } |
1865 | 1868 |
1866 | 1869 |
1867 class ReshapeTrackerContext: public FakeWebGraphicsContext3D { | 1870 class ReshapeTrackerContext: public FakeWebGraphicsContext3D { |
1868 public: | 1871 public: |
1869 ReshapeTrackerContext() : m_reshapeCalled(false) { } | 1872 ReshapeTrackerContext() : m_reshapeCalled(false) { } |
1870 | 1873 |
(...skipping 18 matching lines...) Expand all Loading... |
1889 // Only reshape when we know we are going to draw. Otherwise, the reshape | 1892 // 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 | 1893 // can leave the window at the wrong size if we never draw and the proper |
1891 // viewport size is never set. | 1894 // viewport size is never set. |
1892 TEST_P(LayerTreeHostImplTest, reshapeNotCalledUntilDraw) | 1895 TEST_P(LayerTreeHostImplTest, reshapeNotCalledUntilDraw) |
1893 { | 1896 { |
1894 scoped_ptr<GraphicsContext> outputSurface = FakeWebCompositorOutputSurface::
create(scoped_ptr<WebKit::WebGraphicsContext3D>(new ReshapeTrackerContext)).Pass
As<GraphicsContext>(); | 1897 scoped_ptr<GraphicsContext> outputSurface = FakeWebCompositorOutputSurface::
create(scoped_ptr<WebKit::WebGraphicsContext3D>(new ReshapeTrackerContext)).Pass
As<GraphicsContext>(); |
1895 ReshapeTrackerContext* reshapeTracker = static_cast<ReshapeTrackerContext*>(
outputSurface->context3D()); | 1898 ReshapeTrackerContext* reshapeTracker = static_cast<ReshapeTrackerContext*>(
outputSurface->context3D()); |
1896 m_hostImpl->initializeRenderer(outputSurface.Pass()); | 1899 m_hostImpl->initializeRenderer(outputSurface.Pass()); |
1897 | 1900 |
1898 scoped_ptr<LayerImpl> root = FakeDrawableLayerImpl::create(1); | 1901 scoped_ptr<LayerImpl> root = FakeDrawableLayerImpl::create(1); |
1899 root->setAnchorPoint(FloatPoint(0, 0)); | 1902 root->setAnchorPoint(gfx::PointF(0, 0)); |
1900 root->setBounds(IntSize(10, 10)); | 1903 root->setBounds(gfx::Size(10, 10)); |
1901 root->setDrawsContent(true); | 1904 root->setDrawsContent(true); |
1902 m_hostImpl->setRootLayer(root.Pass()); | 1905 m_hostImpl->setRootLayer(root.Pass()); |
1903 EXPECT_FALSE(reshapeTracker->reshapeCalled()); | 1906 EXPECT_FALSE(reshapeTracker->reshapeCalled()); |
1904 | 1907 |
1905 LayerTreeHostImpl::FrameData frame; | 1908 LayerTreeHostImpl::FrameData frame; |
1906 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); | 1909 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
1907 m_hostImpl->drawLayers(frame); | 1910 m_hostImpl->drawLayers(frame); |
1908 EXPECT_TRUE(reshapeTracker->reshapeCalled()); | 1911 EXPECT_TRUE(reshapeTracker->reshapeCalled()); |
1909 m_hostImpl->didDrawAllLayers(frame); | 1912 m_hostImpl->didDrawAllLayers(frame); |
1910 } | 1913 } |
1911 | 1914 |
1912 class PartialSwapTrackerContext : public FakeWebGraphicsContext3D { | 1915 class PartialSwapTrackerContext : public FakeWebGraphicsContext3D { |
1913 public: | 1916 public: |
1914 virtual void postSubBufferCHROMIUM(int x, int y, int width, int height) | 1917 virtual void postSubBufferCHROMIUM(int x, int y, int width, int height) |
1915 { | 1918 { |
1916 m_partialSwapRect = IntRect(x, y, width, height); | 1919 m_partialSwapRect = gfx::Rect(x, y, width, height); |
1917 } | 1920 } |
1918 | 1921 |
1919 virtual WebString getString(WGC3Denum name) | 1922 virtual WebString getString(WGC3Denum name) |
1920 { | 1923 { |
1921 if (name == GL_EXTENSIONS) | 1924 if (name == GL_EXTENSIONS) |
1922 return WebString("GL_CHROMIUM_post_sub_buffer GL_CHROMIUM_set_visibi
lity"); | 1925 return WebString("GL_CHROMIUM_post_sub_buffer GL_CHROMIUM_set_visibi
lity"); |
1923 | 1926 |
1924 return WebString(); | 1927 return WebString(); |
1925 } | 1928 } |
1926 | 1929 |
1927 IntRect partialSwapRect() const { return m_partialSwapRect; } | 1930 gfx::Rect partialSwapRect() const { return m_partialSwapRect; } |
1928 | 1931 |
1929 private: | 1932 private: |
1930 IntRect m_partialSwapRect; | 1933 gfx::Rect m_partialSwapRect; |
1931 }; | 1934 }; |
1932 | 1935 |
1933 // Make sure damage tracking propagates all the way to the graphics context, | 1936 // 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. | 1937 // where it should request to swap only the subBuffer that is damaged. |
1935 TEST_P(LayerTreeHostImplTest, partialSwapReceivesDamageRect) | 1938 TEST_P(LayerTreeHostImplTest, partialSwapReceivesDamageRect) |
1936 { | 1939 { |
1937 scoped_ptr<GraphicsContext> outputSurface = FakeWebCompositorOutputSurface::
create(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapTrackerContext)).
PassAs<GraphicsContext>(); | 1940 scoped_ptr<GraphicsContext> outputSurface = FakeWebCompositorOutputSurface::
create(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapTrackerContext)).
PassAs<GraphicsContext>(); |
1938 PartialSwapTrackerContext* partialSwapTracker = static_cast<PartialSwapTrack
erContext*>(outputSurface->context3D()); | 1941 PartialSwapTrackerContext* partialSwapTracker = static_cast<PartialSwapTrack
erContext*>(outputSurface->context3D()); |
1939 | 1942 |
1940 // This test creates its own LayerTreeHostImpl, so | 1943 // This test creates its own LayerTreeHostImpl, so |
1941 // that we can force partial swap enabled. | 1944 // that we can force partial swap enabled. |
1942 LayerTreeSettings settings; | 1945 LayerTreeSettings settings; |
1943 Settings::setPartialSwapEnabled(true); | 1946 Settings::setPartialSwapEnabled(true); |
1944 scoped_ptr<LayerTreeHostImpl> layerTreeHostImpl = LayerTreeHostImpl::create(
settings, this); | 1947 scoped_ptr<LayerTreeHostImpl> layerTreeHostImpl = LayerTreeHostImpl::create(
settings, this); |
1945 layerTreeHostImpl->initializeRenderer(outputSurface.Pass()); | 1948 layerTreeHostImpl->initializeRenderer(outputSurface.Pass()); |
1946 layerTreeHostImpl->setViewportSize(IntSize(500, 500), IntSize(500, 500)); | 1949 layerTreeHostImpl->setViewportSize(gfx::Size(500, 500), gfx::Size(500, 500))
; |
1947 | 1950 |
1948 scoped_ptr<LayerImpl> root = FakeDrawableLayerImpl::create(1); | 1951 scoped_ptr<LayerImpl> root = FakeDrawableLayerImpl::create(1); |
1949 scoped_ptr<LayerImpl> child = FakeDrawableLayerImpl::create(2); | 1952 scoped_ptr<LayerImpl> child = FakeDrawableLayerImpl::create(2); |
1950 child->setPosition(FloatPoint(12, 13)); | 1953 child->setPosition(gfx::PointF(12, 13)); |
1951 child->setAnchorPoint(FloatPoint(0, 0)); | 1954 child->setAnchorPoint(gfx::PointF(0, 0)); |
1952 child->setBounds(IntSize(14, 15)); | 1955 child->setBounds(gfx::Size(14, 15)); |
1953 child->setContentBounds(IntSize(14, 15)); | 1956 child->setContentBounds(gfx::Size(14, 15)); |
1954 child->setDrawsContent(true); | 1957 child->setDrawsContent(true); |
1955 root->setAnchorPoint(FloatPoint(0, 0)); | 1958 root->setAnchorPoint(gfx::PointF(0, 0)); |
1956 root->setBounds(IntSize(500, 500)); | 1959 root->setBounds(gfx::Size(500, 500)); |
1957 root->setContentBounds(IntSize(500, 500)); | 1960 root->setContentBounds(gfx::Size(500, 500)); |
1958 root->setDrawsContent(true); | 1961 root->setDrawsContent(true); |
1959 root->addChild(child.Pass()); | 1962 root->addChild(child.Pass()); |
1960 layerTreeHostImpl->setRootLayer(root.Pass()); | 1963 layerTreeHostImpl->setRootLayer(root.Pass()); |
1961 | 1964 |
1962 LayerTreeHostImpl::FrameData frame; | 1965 LayerTreeHostImpl::FrameData frame; |
1963 | 1966 |
1964 // First frame, the entire screen should get swapped. | 1967 // First frame, the entire screen should get swapped. |
1965 EXPECT_TRUE(layerTreeHostImpl->prepareToDraw(frame)); | 1968 EXPECT_TRUE(layerTreeHostImpl->prepareToDraw(frame)); |
1966 layerTreeHostImpl->drawLayers(frame); | 1969 layerTreeHostImpl->drawLayers(frame); |
1967 layerTreeHostImpl->didDrawAllLayers(frame); | 1970 layerTreeHostImpl->didDrawAllLayers(frame); |
1968 layerTreeHostImpl->swapBuffers(); | 1971 layerTreeHostImpl->swapBuffers(); |
1969 IntRect actualSwapRect = partialSwapTracker->partialSwapRect(); | 1972 gfx::Rect actualSwapRect = partialSwapTracker->partialSwapRect(); |
1970 IntRect expectedSwapRect = IntRect(IntPoint::zero(), IntSize(500, 500)); | 1973 gfx::Rect expectedSwapRect = gfx::Rect(gfx::Point(), gfx::Size(500, 500)); |
1971 EXPECT_EQ(expectedSwapRect.x(), actualSwapRect.x()); | 1974 EXPECT_EQ(expectedSwapRect.x(), actualSwapRect.x()); |
1972 EXPECT_EQ(expectedSwapRect.y(), actualSwapRect.y()); | 1975 EXPECT_EQ(expectedSwapRect.y(), actualSwapRect.y()); |
1973 EXPECT_EQ(expectedSwapRect.width(), actualSwapRect.width()); | 1976 EXPECT_EQ(expectedSwapRect.width(), actualSwapRect.width()); |
1974 EXPECT_EQ(expectedSwapRect.height(), actualSwapRect.height()); | 1977 EXPECT_EQ(expectedSwapRect.height(), actualSwapRect.height()); |
1975 | 1978 |
1976 // Second frame, only the damaged area should get swapped. Damage should be
the union | 1979 // Second frame, only the damaged area should get swapped. Damage should be
the union |
1977 // of old and new child rects. | 1980 // of old and new child rects. |
1978 // expected damage rect: IntRect(IntPoint::zero(), IntSize(26, 28)); | 1981 // expected damage rect: gfx::Rect(gfx::Point(), gfx::Size(26, 28)); |
1979 // expected swap rect: vertically flipped, with origin at bottom left corner
. | 1982 // expected swap rect: vertically flipped, with origin at bottom left corner
. |
1980 layerTreeHostImpl->rootLayer()->children()[0]->setPosition(FloatPoint(0, 0))
; | 1983 layerTreeHostImpl->rootLayer()->children()[0]->setPosition(gfx::PointF(0, 0)
); |
1981 EXPECT_TRUE(layerTreeHostImpl->prepareToDraw(frame)); | 1984 EXPECT_TRUE(layerTreeHostImpl->prepareToDraw(frame)); |
1982 layerTreeHostImpl->drawLayers(frame); | 1985 layerTreeHostImpl->drawLayers(frame); |
1983 m_hostImpl->didDrawAllLayers(frame); | 1986 m_hostImpl->didDrawAllLayers(frame); |
1984 layerTreeHostImpl->swapBuffers(); | 1987 layerTreeHostImpl->swapBuffers(); |
1985 actualSwapRect = partialSwapTracker->partialSwapRect(); | 1988 actualSwapRect = partialSwapTracker->partialSwapRect(); |
1986 expectedSwapRect = IntRect(IntPoint(0, 500-28), IntSize(26, 28)); | 1989 expectedSwapRect = gfx::Rect(gfx::Point(0, 500-28), gfx::Size(26, 28)); |
1987 EXPECT_EQ(expectedSwapRect.x(), actualSwapRect.x()); | 1990 EXPECT_EQ(expectedSwapRect.x(), actualSwapRect.x()); |
1988 EXPECT_EQ(expectedSwapRect.y(), actualSwapRect.y()); | 1991 EXPECT_EQ(expectedSwapRect.y(), actualSwapRect.y()); |
1989 EXPECT_EQ(expectedSwapRect.width(), actualSwapRect.width()); | 1992 EXPECT_EQ(expectedSwapRect.width(), actualSwapRect.width()); |
1990 EXPECT_EQ(expectedSwapRect.height(), actualSwapRect.height()); | 1993 EXPECT_EQ(expectedSwapRect.height(), actualSwapRect.height()); |
1991 | 1994 |
1992 // Make sure that partial swap is constrained to the viewport dimensions | 1995 // Make sure that partial swap is constrained to the viewport dimensions |
1993 // expected damage rect: IntRect(IntPoint::zero(), IntSize(500, 500)); | 1996 // expected damage rect: gfx::Rect(gfx::Point(), gfx::Size(500, 500)); |
1994 // expected swap rect: flipped damage rect, but also clamped to viewport | 1997 // expected swap rect: flipped damage rect, but also clamped to viewport |
1995 layerTreeHostImpl->setViewportSize(IntSize(10, 10), IntSize(10, 10)); | 1998 layerTreeHostImpl->setViewportSize(gfx::Size(10, 10), gfx::Size(10, 10)); |
1996 layerTreeHostImpl->rootLayer()->setOpacity(0.7f); // this will damage everyt
hing | 1999 layerTreeHostImpl->rootLayer()->setOpacity(0.7f); // this will damage everyt
hing |
1997 EXPECT_TRUE(layerTreeHostImpl->prepareToDraw(frame)); | 2000 EXPECT_TRUE(layerTreeHostImpl->prepareToDraw(frame)); |
1998 layerTreeHostImpl->drawLayers(frame); | 2001 layerTreeHostImpl->drawLayers(frame); |
1999 m_hostImpl->didDrawAllLayers(frame); | 2002 m_hostImpl->didDrawAllLayers(frame); |
2000 layerTreeHostImpl->swapBuffers(); | 2003 layerTreeHostImpl->swapBuffers(); |
2001 actualSwapRect = partialSwapTracker->partialSwapRect(); | 2004 actualSwapRect = partialSwapTracker->partialSwapRect(); |
2002 expectedSwapRect = IntRect(IntPoint::zero(), IntSize(10, 10)); | 2005 expectedSwapRect = gfx::Rect(gfx::Point(), gfx::Size(10, 10)); |
2003 EXPECT_EQ(expectedSwapRect.x(), actualSwapRect.x()); | 2006 EXPECT_EQ(expectedSwapRect.x(), actualSwapRect.x()); |
2004 EXPECT_EQ(expectedSwapRect.y(), actualSwapRect.y()); | 2007 EXPECT_EQ(expectedSwapRect.y(), actualSwapRect.y()); |
2005 EXPECT_EQ(expectedSwapRect.width(), actualSwapRect.width()); | 2008 EXPECT_EQ(expectedSwapRect.width(), actualSwapRect.width()); |
2006 EXPECT_EQ(expectedSwapRect.height(), actualSwapRect.height()); | 2009 EXPECT_EQ(expectedSwapRect.height(), actualSwapRect.height()); |
2007 } | 2010 } |
2008 | 2011 |
2009 TEST_P(LayerTreeHostImplTest, rootLayerDoesntCreateExtraSurface) | 2012 TEST_P(LayerTreeHostImplTest, rootLayerDoesntCreateExtraSurface) |
2010 { | 2013 { |
2011 scoped_ptr<LayerImpl> root = FakeDrawableLayerImpl::create(1); | 2014 scoped_ptr<LayerImpl> root = FakeDrawableLayerImpl::create(1); |
2012 scoped_ptr<LayerImpl> child = FakeDrawableLayerImpl::create(2); | 2015 scoped_ptr<LayerImpl> child = FakeDrawableLayerImpl::create(2); |
2013 child->setAnchorPoint(FloatPoint(0, 0)); | 2016 child->setAnchorPoint(gfx::PointF(0, 0)); |
2014 child->setBounds(IntSize(10, 10)); | 2017 child->setBounds(gfx::Size(10, 10)); |
2015 child->setContentBounds(IntSize(10, 10)); | 2018 child->setContentBounds(gfx::Size(10, 10)); |
2016 child->setDrawsContent(true); | 2019 child->setDrawsContent(true); |
2017 root->setAnchorPoint(FloatPoint(0, 0)); | 2020 root->setAnchorPoint(gfx::PointF(0, 0)); |
2018 root->setBounds(IntSize(10, 10)); | 2021 root->setBounds(gfx::Size(10, 10)); |
2019 root->setContentBounds(IntSize(10, 10)); | 2022 root->setContentBounds(gfx::Size(10, 10)); |
2020 root->setDrawsContent(true); | 2023 root->setDrawsContent(true); |
2021 root->setOpacity(0.7f); | 2024 root->setOpacity(0.7f); |
2022 root->addChild(child.Pass()); | 2025 root->addChild(child.Pass()); |
2023 | 2026 |
2024 m_hostImpl->setRootLayer(root.Pass()); | 2027 m_hostImpl->setRootLayer(root.Pass()); |
2025 | 2028 |
2026 LayerTreeHostImpl::FrameData frame; | 2029 LayerTreeHostImpl::FrameData frame; |
2027 | 2030 |
2028 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); | 2031 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
2029 EXPECT_EQ(1u, frame.renderSurfaceLayerList->size()); | 2032 EXPECT_EQ(1u, frame.renderSurfaceLayerList->size()); |
2030 EXPECT_EQ(1u, frame.renderPasses.size()); | 2033 EXPECT_EQ(1u, frame.renderPasses.size()); |
2031 m_hostImpl->didDrawAllLayers(frame); | 2034 m_hostImpl->didDrawAllLayers(frame); |
2032 } | 2035 } |
2033 | 2036 |
2034 } // namespace | 2037 } // namespace |
2035 | 2038 |
2036 class FakeLayerWithQuads : public LayerImpl { | 2039 class FakeLayerWithQuads : public LayerImpl { |
2037 public: | 2040 public: |
2038 static scoped_ptr<LayerImpl> create(int id) { return scoped_ptr<LayerImpl>(n
ew FakeLayerWithQuads(id)); } | 2041 static scoped_ptr<LayerImpl> create(int id) { return scoped_ptr<LayerImpl>(n
ew FakeLayerWithQuads(id)); } |
2039 | 2042 |
2040 virtual void appendQuads(QuadSink& quadSink, AppendQuadsData& appendQuadsDat
a) OVERRIDE | 2043 virtual void appendQuads(QuadSink& quadSink, AppendQuadsData& appendQuadsDat
a) OVERRIDE |
2041 { | 2044 { |
2042 SharedQuadState* sharedQuadState = quadSink.useSharedQuadState(createSha
redQuadState()); | 2045 SharedQuadState* sharedQuadState = quadSink.useSharedQuadState(createSha
redQuadState()); |
2043 | 2046 |
2044 SkColor gray = SkColorSetRGB(100, 100, 100); | 2047 SkColor gray = SkColorSetRGB(100, 100, 100); |
2045 IntRect quadRect(IntPoint(0, 0), contentBounds()); | 2048 gfx::Rect quadRect(gfx::Point(0, 0), contentBounds()); |
2046 scoped_ptr<SolidColorDrawQuad> myQuad = SolidColorDrawQuad::create(share
dQuadState, quadRect, gray); | 2049 scoped_ptr<SolidColorDrawQuad> myQuad = SolidColorDrawQuad::create(share
dQuadState, quadRect, gray); |
2047 quadSink.append(myQuad.PassAs<DrawQuad>(), appendQuadsData); | 2050 quadSink.append(myQuad.PassAs<DrawQuad>(), appendQuadsData); |
2048 } | 2051 } |
2049 | 2052 |
2050 private: | 2053 private: |
2051 FakeLayerWithQuads(int id) | 2054 FakeLayerWithQuads(int id) |
2052 : LayerImpl(id) | 2055 : LayerImpl(id) |
2053 { | 2056 { |
2054 } | 2057 } |
2055 }; | 2058 }; |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2178 harness.mustDrawSolidQuad(); | 2181 harness.mustDrawSolidQuad(); |
2179 { | 2182 { |
2180 LayerTreeHostImpl::FrameData frame; | 2183 LayerTreeHostImpl::FrameData frame; |
2181 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 2184 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
2182 myHostImpl->drawLayers(frame); | 2185 myHostImpl->drawLayers(frame); |
2183 myHostImpl->didDrawAllLayers(frame); | 2186 myHostImpl->didDrawAllLayers(frame); |
2184 } | 2187 } |
2185 Mock::VerifyAndClearExpectations(&mockContext); | 2188 Mock::VerifyAndClearExpectations(&mockContext); |
2186 | 2189 |
2187 // Damage a portion of the frame. | 2190 // Damage a portion of the frame. |
2188 myHostImpl->rootLayer()->setUpdateRect(IntRect(0, 0, 2, 3)); | 2191 myHostImpl->rootLayer()->setUpdateRect(gfx::Rect(0, 0, 2, 3)); |
2189 | 2192 |
2190 // The second frame will be partially-swapped (the y coordinates are flipped
). | 2193 // The second frame will be partially-swapped (the y coordinates are flipped
). |
2191 harness.mustSetScissor(0, 7, 2, 3); | 2194 harness.mustSetScissor(0, 7, 2, 3); |
2192 harness.mustDrawSolidQuad(); | 2195 harness.mustDrawSolidQuad(); |
2193 { | 2196 { |
2194 LayerTreeHostImpl::FrameData frame; | 2197 LayerTreeHostImpl::FrameData frame; |
2195 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 2198 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
2196 myHostImpl->drawLayers(frame); | 2199 myHostImpl->drawLayers(frame); |
2197 myHostImpl->didDrawAllLayers(frame); | 2200 myHostImpl->didDrawAllLayers(frame); |
2198 } | 2201 } |
(...skipping 24 matching lines...) Expand all Loading... |
2223 | 2226 |
2224 static scoped_ptr<LayerTreeHostImpl> setupLayersForOpacity(bool partialSwap, Lay
erTreeHostImplClient* client) | 2227 static scoped_ptr<LayerTreeHostImpl> setupLayersForOpacity(bool partialSwap, Lay
erTreeHostImplClient* client) |
2225 { | 2228 { |
2226 Settings::setPartialSwapEnabled(partialSwap); | 2229 Settings::setPartialSwapEnabled(partialSwap); |
2227 | 2230 |
2228 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create
(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi
csContext>(); | 2231 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create
(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi
csContext>(); |
2229 | 2232 |
2230 LayerTreeSettings settings; | 2233 LayerTreeSettings settings; |
2231 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, client); | 2234 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, client); |
2232 myHostImpl->initializeRenderer(context.Pass()); | 2235 myHostImpl->initializeRenderer(context.Pass()); |
2233 myHostImpl->setViewportSize(IntSize(100, 100), IntSize(100, 100)); | 2236 myHostImpl->setViewportSize(gfx::Size(100, 100), gfx::Size(100, 100)); |
2234 | 2237 |
2235 /* | 2238 /* |
2236 Layers are created as follows: | 2239 Layers are created as follows: |
2237 | 2240 |
2238 +--------------------+ | 2241 +--------------------+ |
2239 | 1 | | 2242 | 1 | |
2240 | +-----------+ | | 2243 | +-----------+ | |
2241 | | 2 | | | 2244 | | 2 | | |
2242 | | +-------------------+ | 2245 | | +-------------------+ |
2243 | | | 3 | | 2246 | | | 3 | |
2244 | | +-------------------+ | 2247 | | +-------------------+ |
2245 | | | | | 2248 | | | | |
2246 | +-----------+ | | 2249 | +-----------+ | |
2247 | | | 2250 | | |
2248 | | | 2251 | | |
2249 +--------------------+ | 2252 +--------------------+ |
2250 | 2253 |
2251 Layers 1, 2 have render surfaces | 2254 Layers 1, 2 have render surfaces |
2252 */ | 2255 */ |
2253 scoped_ptr<LayerImpl> root = LayerImpl::create(1); | 2256 scoped_ptr<LayerImpl> root = LayerImpl::create(1); |
2254 scoped_ptr<LayerImpl> child = LayerImpl::create(2); | 2257 scoped_ptr<LayerImpl> child = LayerImpl::create(2); |
2255 scoped_ptr<LayerImpl> grandChild = FakeLayerWithQuads::create(3); | 2258 scoped_ptr<LayerImpl> grandChild = FakeLayerWithQuads::create(3); |
2256 | 2259 |
2257 IntRect rootRect(0, 0, 100, 100); | 2260 gfx::Rect rootRect(0, 0, 100, 100); |
2258 IntRect childRect(10, 10, 50, 50); | 2261 gfx::Rect childRect(10, 10, 50, 50); |
2259 IntRect grandChildRect(5, 5, 150, 150); | 2262 gfx::Rect grandChildRect(5, 5, 150, 150); |
2260 | 2263 |
2261 root->createRenderSurface(); | 2264 root->createRenderSurface(); |
2262 root->setAnchorPoint(FloatPoint(0, 0)); | 2265 root->setAnchorPoint(gfx::PointF(0, 0)); |
2263 root->setPosition(FloatPoint(rootRect.x(), rootRect.y())); | 2266 root->setPosition(gfx::PointF(rootRect.x(), rootRect.y())); |
2264 root->setBounds(IntSize(rootRect.width(), rootRect.height())); | 2267 root->setBounds(gfx::Size(rootRect.width(), rootRect.height())); |
2265 root->setContentBounds(root->bounds()); | 2268 root->setContentBounds(root->bounds()); |
2266 root->setVisibleContentRect(rootRect); | 2269 root->setVisibleContentRect(rootRect); |
2267 root->setDrawsContent(false); | 2270 root->setDrawsContent(false); |
2268 root->renderSurface()->setContentRect(IntRect(IntPoint(), IntSize(rootRect.w
idth(), rootRect.height()))); | 2271 root->renderSurface()->setContentRect(gfx::Rect(gfx::Point(), gfx::Size(root
Rect.width(), rootRect.height()))); |
2269 | 2272 |
2270 child->setAnchorPoint(FloatPoint(0, 0)); | 2273 child->setAnchorPoint(gfx::PointF(0, 0)); |
2271 child->setPosition(FloatPoint(childRect.x(), childRect.y())); | 2274 child->setPosition(gfx::PointF(childRect.x(), childRect.y())); |
2272 child->setOpacity(0.5f); | 2275 child->setOpacity(0.5f); |
2273 child->setBounds(IntSize(childRect.width(), childRect.height())); | 2276 child->setBounds(gfx::Size(childRect.width(), childRect.height())); |
2274 child->setContentBounds(child->bounds()); | 2277 child->setContentBounds(child->bounds()); |
2275 child->setVisibleContentRect(childRect); | 2278 child->setVisibleContentRect(childRect); |
2276 child->setDrawsContent(false); | 2279 child->setDrawsContent(false); |
2277 | 2280 |
2278 grandChild->setAnchorPoint(FloatPoint(0, 0)); | 2281 grandChild->setAnchorPoint(gfx::PointF(0, 0)); |
2279 grandChild->setPosition(IntPoint(grandChildRect.x(), grandChildRect.y())); | 2282 grandChild->setPosition(gfx::Point(grandChildRect.x(), grandChildRect.y())); |
2280 grandChild->setBounds(IntSize(grandChildRect.width(), grandChildRect.height(
))); | 2283 grandChild->setBounds(gfx::Size(grandChildRect.width(), grandChildRect.heigh
t())); |
2281 grandChild->setContentBounds(grandChild->bounds()); | 2284 grandChild->setContentBounds(grandChild->bounds()); |
2282 grandChild->setVisibleContentRect(grandChildRect); | 2285 grandChild->setVisibleContentRect(grandChildRect); |
2283 grandChild->setDrawsContent(true); | 2286 grandChild->setDrawsContent(true); |
2284 | 2287 |
2285 child->addChild(grandChild.Pass()); | 2288 child->addChild(grandChild.Pass()); |
2286 root->addChild(child.Pass()); | 2289 root->addChild(child.Pass()); |
2287 | 2290 |
2288 myHostImpl->setRootLayer(root.Pass()); | 2291 myHostImpl->setRootLayer(root.Pass()); |
2289 return myHostImpl.Pass(); | 2292 return myHostImpl.Pass(); |
2290 } | 2293 } |
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2611 public: | 2614 public: |
2612 static scoped_ptr<FakeScrollbarLayerImpl> create(int id) | 2615 static scoped_ptr<FakeScrollbarLayerImpl> create(int id) |
2613 { | 2616 { |
2614 return make_scoped_ptr(new FakeScrollbarLayerImpl(id)); | 2617 return make_scoped_ptr(new FakeScrollbarLayerImpl(id)); |
2615 } | 2618 } |
2616 | 2619 |
2617 void createResources(ResourceProvider* provider) | 2620 void createResources(ResourceProvider* provider) |
2618 { | 2621 { |
2619 DCHECK(provider); | 2622 DCHECK(provider); |
2620 int pool = 0; | 2623 int pool = 0; |
2621 IntSize size(10, 10); | 2624 gfx::Size size(10, 10); |
2622 GLenum format = GL_RGBA; | 2625 GLenum format = GL_RGBA; |
2623 ResourceProvider::TextureUsageHint hint = ResourceProvider::TextureUsage
Any; | 2626 ResourceProvider::TextureUsageHint hint = ResourceProvider::TextureUsage
Any; |
2624 setScrollbarGeometry(ScrollbarGeometryFixedThumb::create(FakeWebScrollba
rThemeGeometryNonEmpty::create())); | 2627 setScrollbarGeometry(ScrollbarGeometryFixedThumb::create(FakeWebScrollba
rThemeGeometryNonEmpty::create())); |
2625 | 2628 |
2626 setBackTrackResourceId(provider->createResource(pool, size, format, hint
)); | 2629 setBackTrackResourceId(provider->createResource(pool, size, format, hint
)); |
2627 setForeTrackResourceId(provider->createResource(pool, size, format, hint
)); | 2630 setForeTrackResourceId(provider->createResource(pool, size, format, hint
)); |
2628 setThumbResourceId(provider->createResource(pool, size, format, hint)); | 2631 setThumbResourceId(provider->createResource(pool, size, format, hint)); |
2629 } | 2632 } |
2630 | 2633 |
2631 protected: | 2634 protected: |
2632 explicit FakeScrollbarLayerImpl(int id) | 2635 explicit FakeScrollbarLayerImpl(int id) |
2633 : ScrollbarLayerImpl(id) | 2636 : ScrollbarLayerImpl(id) |
2634 { | 2637 { |
2635 } | 2638 } |
2636 }; | 2639 }; |
2637 | 2640 |
2638 static inline scoped_ptr<RenderPass> createRenderPassWithResource(ResourceProvid
er* provider) | 2641 static inline scoped_ptr<RenderPass> createRenderPassWithResource(ResourceProvid
er* provider) |
2639 { | 2642 { |
2640 ResourceProvider::ResourceId resourceId = provider->createResource(0, IntSiz
e(1, 1), GL_RGBA, ResourceProvider::TextureUsageAny); | 2643 ResourceProvider::ResourceId resourceId = provider->createResource(0, gfx::S
ize(1, 1), GL_RGBA, ResourceProvider::TextureUsageAny); |
2641 | 2644 |
2642 scoped_ptr<TestRenderPass> pass = TestRenderPass::create(RenderPass::Id(1, 1
), IntRect(0, 0, 1, 1), WebTransformationMatrix()); | 2645 scoped_ptr<TestRenderPass> pass = TestRenderPass::create(RenderPass::Id(1, 1
), gfx::Rect(0, 0, 1, 1), WebTransformationMatrix()); |
2643 scoped_ptr<SharedQuadState> sharedState = SharedQuadState::create(WebTransfo
rmationMatrix(), IntRect(0, 0, 1, 1), IntRect(0, 0, 1, 1), 1, false); | 2646 scoped_ptr<SharedQuadState> sharedState = SharedQuadState::create(WebTransfo
rmationMatrix(), gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 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); | 2647 scoped_ptr<TextureDrawQuad> quad = TextureDrawQuad::create(sharedState.get()
, gfx::Rect(0, 0, 1, 1), resourceId, false, gfx::RectF(0, 0, 1, 1), false); |
2645 | 2648 |
2646 pass->appendSharedQuadState(sharedState.Pass()); | 2649 pass->appendSharedQuadState(sharedState.Pass()); |
2647 pass->appendQuad(quad.PassAs<DrawQuad>()); | 2650 pass->appendQuad(quad.PassAs<DrawQuad>()); |
2648 | 2651 |
2649 return pass.PassAs<RenderPass>(); | 2652 return pass.PassAs<RenderPass>(); |
2650 } | 2653 } |
2651 | 2654 |
2652 TEST_P(LayerTreeHostImplTest, dontUseOldResourcesAfterLostContext) | 2655 TEST_P(LayerTreeHostImplTest, dontUseOldResourcesAfterLostContext) |
2653 { | 2656 { |
2654 int layerId = 1; | 2657 int layerId = 1; |
2655 | 2658 |
2656 scoped_ptr<LayerImpl> rootLayer(LayerImpl::create(layerId++)); | 2659 scoped_ptr<LayerImpl> rootLayer(LayerImpl::create(layerId++)); |
2657 rootLayer->setBounds(IntSize(10, 10)); | 2660 rootLayer->setBounds(gfx::Size(10, 10)); |
2658 rootLayer->setAnchorPoint(FloatPoint(0, 0)); | 2661 rootLayer->setAnchorPoint(gfx::PointF(0, 0)); |
2659 | 2662 |
2660 scoped_ptr<TiledLayerImpl> tileLayer = TiledLayerImpl::create(layerId++); | 2663 scoped_ptr<TiledLayerImpl> tileLayer = TiledLayerImpl::create(layerId++); |
2661 tileLayer->setBounds(IntSize(10, 10)); | 2664 tileLayer->setBounds(gfx::Size(10, 10)); |
2662 tileLayer->setAnchorPoint(FloatPoint(0, 0)); | 2665 tileLayer->setAnchorPoint(gfx::PointF(0, 0)); |
2663 tileLayer->setContentBounds(IntSize(10, 10)); | 2666 tileLayer->setContentBounds(gfx::Size(10, 10)); |
2664 tileLayer->setDrawsContent(true); | 2667 tileLayer->setDrawsContent(true); |
2665 tileLayer->setSkipsDraw(false); | 2668 tileLayer->setSkipsDraw(false); |
2666 scoped_ptr<LayerTilingData> tilingData(LayerTilingData::create(IntSize(10, 1
0), LayerTilingData::NoBorderTexels)); | 2669 scoped_ptr<LayerTilingData> tilingData(LayerTilingData::create(gfx::Size(10,
10), LayerTilingData::NoBorderTexels)); |
2667 tilingData->setBounds(IntSize(10, 10)); | 2670 tilingData->setBounds(gfx::Size(10, 10)); |
2668 tileLayer->setTilingData(*tilingData); | 2671 tileLayer->setTilingData(*tilingData); |
2669 tileLayer->pushTileProperties(0, 0, 1, IntRect(0, 0, 10, 10), false); | 2672 tileLayer->pushTileProperties(0, 0, 1, gfx::Rect(0, 0, 10, 10), false); |
2670 rootLayer->addChild(tileLayer.PassAs<LayerImpl>()); | 2673 rootLayer->addChild(tileLayer.PassAs<LayerImpl>()); |
2671 | 2674 |
2672 scoped_ptr<TextureLayerImpl> textureLayer = TextureLayerImpl::create(layerId
++); | 2675 scoped_ptr<TextureLayerImpl> textureLayer = TextureLayerImpl::create(layerId
++); |
2673 textureLayer->setBounds(IntSize(10, 10)); | 2676 textureLayer->setBounds(gfx::Size(10, 10)); |
2674 textureLayer->setAnchorPoint(FloatPoint(0, 0)); | 2677 textureLayer->setAnchorPoint(gfx::PointF(0, 0)); |
2675 textureLayer->setContentBounds(IntSize(10, 10)); | 2678 textureLayer->setContentBounds(gfx::Size(10, 10)); |
2676 textureLayer->setDrawsContent(true); | 2679 textureLayer->setDrawsContent(true); |
2677 textureLayer->setTextureId(1); | 2680 textureLayer->setTextureId(1); |
2678 rootLayer->addChild(textureLayer.PassAs<LayerImpl>()); | 2681 rootLayer->addChild(textureLayer.PassAs<LayerImpl>()); |
2679 | 2682 |
2680 scoped_ptr<TiledLayerImpl> maskLayer = TiledLayerImpl::create(layerId++); | 2683 scoped_ptr<TiledLayerImpl> maskLayer = TiledLayerImpl::create(layerId++); |
2681 maskLayer->setBounds(IntSize(10, 10)); | 2684 maskLayer->setBounds(gfx::Size(10, 10)); |
2682 maskLayer->setAnchorPoint(FloatPoint(0, 0)); | 2685 maskLayer->setAnchorPoint(gfx::PointF(0, 0)); |
2683 maskLayer->setContentBounds(IntSize(10, 10)); | 2686 maskLayer->setContentBounds(gfx::Size(10, 10)); |
2684 maskLayer->setDrawsContent(true); | 2687 maskLayer->setDrawsContent(true); |
2685 maskLayer->setSkipsDraw(false); | 2688 maskLayer->setSkipsDraw(false); |
2686 maskLayer->setTilingData(*tilingData); | 2689 maskLayer->setTilingData(*tilingData); |
2687 maskLayer->pushTileProperties(0, 0, 1, IntRect(0, 0, 10, 10), false); | 2690 maskLayer->pushTileProperties(0, 0, 1, gfx::Rect(0, 0, 10, 10), false); |
2688 | 2691 |
2689 scoped_ptr<TextureLayerImpl> textureLayerWithMask = TextureLayerImpl::create
(layerId++); | 2692 scoped_ptr<TextureLayerImpl> textureLayerWithMask = TextureLayerImpl::create
(layerId++); |
2690 textureLayerWithMask->setBounds(IntSize(10, 10)); | 2693 textureLayerWithMask->setBounds(gfx::Size(10, 10)); |
2691 textureLayerWithMask->setAnchorPoint(FloatPoint(0, 0)); | 2694 textureLayerWithMask->setAnchorPoint(gfx::PointF(0, 0)); |
2692 textureLayerWithMask->setContentBounds(IntSize(10, 10)); | 2695 textureLayerWithMask->setContentBounds(gfx::Size(10, 10)); |
2693 textureLayerWithMask->setDrawsContent(true); | 2696 textureLayerWithMask->setDrawsContent(true); |
2694 textureLayerWithMask->setTextureId(1); | 2697 textureLayerWithMask->setTextureId(1); |
2695 textureLayerWithMask->setMaskLayer(maskLayer.PassAs<LayerImpl>()); | 2698 textureLayerWithMask->setMaskLayer(maskLayer.PassAs<LayerImpl>()); |
2696 rootLayer->addChild(textureLayerWithMask.PassAs<LayerImpl>()); | 2699 rootLayer->addChild(textureLayerWithMask.PassAs<LayerImpl>()); |
2697 | 2700 |
2698 FakeVideoFrame videoFrame; | 2701 FakeVideoFrame videoFrame; |
2699 FakeVideoFrameProvider provider; | 2702 FakeVideoFrameProvider provider; |
2700 provider.setFrame(&videoFrame); | 2703 provider.setFrame(&videoFrame); |
2701 scoped_ptr<VideoLayerImpl> videoLayer = VideoLayerImpl::create(layerId++, &p
rovider); | 2704 scoped_ptr<VideoLayerImpl> videoLayer = VideoLayerImpl::create(layerId++, &p
rovider); |
2702 videoLayer->setBounds(IntSize(10, 10)); | 2705 videoLayer->setBounds(gfx::Size(10, 10)); |
2703 videoLayer->setAnchorPoint(FloatPoint(0, 0)); | 2706 videoLayer->setAnchorPoint(gfx::PointF(0, 0)); |
2704 videoLayer->setContentBounds(IntSize(10, 10)); | 2707 videoLayer->setContentBounds(gfx::Size(10, 10)); |
2705 videoLayer->setDrawsContent(true); | 2708 videoLayer->setDrawsContent(true); |
2706 videoLayer->setLayerTreeHostImpl(m_hostImpl.get()); | 2709 videoLayer->setLayerTreeHostImpl(m_hostImpl.get()); |
2707 rootLayer->addChild(videoLayer.PassAs<LayerImpl>()); | 2710 rootLayer->addChild(videoLayer.PassAs<LayerImpl>()); |
2708 | 2711 |
2709 FakeVideoFrame hwVideoFrame; | 2712 FakeVideoFrame hwVideoFrame; |
2710 FakeVideoFrameProvider hwProvider; | 2713 FakeVideoFrameProvider hwProvider; |
2711 hwProvider.setFrame(&hwVideoFrame); | 2714 hwProvider.setFrame(&hwVideoFrame); |
2712 scoped_ptr<VideoLayerImpl> hwVideoLayer = VideoLayerImpl::create(layerId++,
&hwProvider); | 2715 scoped_ptr<VideoLayerImpl> hwVideoLayer = VideoLayerImpl::create(layerId++,
&hwProvider); |
2713 hwVideoLayer->setBounds(IntSize(10, 10)); | 2716 hwVideoLayer->setBounds(gfx::Size(10, 10)); |
2714 hwVideoLayer->setAnchorPoint(FloatPoint(0, 0)); | 2717 hwVideoLayer->setAnchorPoint(gfx::PointF(0, 0)); |
2715 hwVideoLayer->setContentBounds(IntSize(10, 10)); | 2718 hwVideoLayer->setContentBounds(gfx::Size(10, 10)); |
2716 hwVideoLayer->setDrawsContent(true); | 2719 hwVideoLayer->setDrawsContent(true); |
2717 hwVideoLayer->setLayerTreeHostImpl(m_hostImpl.get()); | 2720 hwVideoLayer->setLayerTreeHostImpl(m_hostImpl.get()); |
2718 rootLayer->addChild(hwVideoLayer.PassAs<LayerImpl>()); | 2721 rootLayer->addChild(hwVideoLayer.PassAs<LayerImpl>()); |
2719 | 2722 |
2720 scoped_ptr<IOSurfaceLayerImpl> ioSurfaceLayer = IOSurfaceLayerImpl::create(l
ayerId++); | 2723 scoped_ptr<IOSurfaceLayerImpl> ioSurfaceLayer = IOSurfaceLayerImpl::create(l
ayerId++); |
2721 ioSurfaceLayer->setBounds(IntSize(10, 10)); | 2724 ioSurfaceLayer->setBounds(gfx::Size(10, 10)); |
2722 ioSurfaceLayer->setAnchorPoint(FloatPoint(0, 0)); | 2725 ioSurfaceLayer->setAnchorPoint(gfx::PointF(0, 0)); |
2723 ioSurfaceLayer->setContentBounds(IntSize(10, 10)); | 2726 ioSurfaceLayer->setContentBounds(gfx::Size(10, 10)); |
2724 ioSurfaceLayer->setDrawsContent(true); | 2727 ioSurfaceLayer->setDrawsContent(true); |
2725 ioSurfaceLayer->setIOSurfaceProperties(1, IntSize(10, 10)); | 2728 ioSurfaceLayer->setIOSurfaceProperties(1, gfx::Size(10, 10)); |
2726 ioSurfaceLayer->setLayerTreeHostImpl(m_hostImpl.get()); | 2729 ioSurfaceLayer->setLayerTreeHostImpl(m_hostImpl.get()); |
2727 rootLayer->addChild(ioSurfaceLayer.PassAs<LayerImpl>()); | 2730 rootLayer->addChild(ioSurfaceLayer.PassAs<LayerImpl>()); |
2728 | 2731 |
2729 scoped_ptr<HeadsUpDisplayLayerImpl> hudLayer = HeadsUpDisplayLayerImpl::crea
te(layerId++); | 2732 scoped_ptr<HeadsUpDisplayLayerImpl> hudLayer = HeadsUpDisplayLayerImpl::crea
te(layerId++); |
2730 hudLayer->setBounds(IntSize(10, 10)); | 2733 hudLayer->setBounds(gfx::Size(10, 10)); |
2731 hudLayer->setAnchorPoint(FloatPoint(0, 0)); | 2734 hudLayer->setAnchorPoint(gfx::PointF(0, 0)); |
2732 hudLayer->setContentBounds(IntSize(10, 10)); | 2735 hudLayer->setContentBounds(gfx::Size(10, 10)); |
2733 hudLayer->setDrawsContent(true); | 2736 hudLayer->setDrawsContent(true); |
2734 hudLayer->setLayerTreeHostImpl(m_hostImpl.get()); | 2737 hudLayer->setLayerTreeHostImpl(m_hostImpl.get()); |
2735 rootLayer->addChild(hudLayer.PassAs<LayerImpl>()); | 2738 rootLayer->addChild(hudLayer.PassAs<LayerImpl>()); |
2736 | 2739 |
2737 scoped_ptr<FakeScrollbarLayerImpl> scrollbarLayer(FakeScrollbarLayerImpl::cr
eate(layerId++)); | 2740 scoped_ptr<FakeScrollbarLayerImpl> scrollbarLayer(FakeScrollbarLayerImpl::cr
eate(layerId++)); |
2738 scrollbarLayer->setBounds(IntSize(10, 10)); | 2741 scrollbarLayer->setBounds(gfx::Size(10, 10)); |
2739 scrollbarLayer->setContentBounds(IntSize(10, 10)); | 2742 scrollbarLayer->setContentBounds(gfx::Size(10, 10)); |
2740 scrollbarLayer->setDrawsContent(true); | 2743 scrollbarLayer->setDrawsContent(true); |
2741 scrollbarLayer->setLayerTreeHostImpl(m_hostImpl.get()); | 2744 scrollbarLayer->setLayerTreeHostImpl(m_hostImpl.get()); |
2742 scrollbarLayer->createResources(m_hostImpl->resourceProvider()); | 2745 scrollbarLayer->createResources(m_hostImpl->resourceProvider()); |
2743 rootLayer->addChild(scrollbarLayer.PassAs<LayerImpl>()); | 2746 rootLayer->addChild(scrollbarLayer.PassAs<LayerImpl>()); |
2744 | 2747 |
2745 scoped_ptr<DelegatedRendererLayerImpl> delegatedRendererLayer(DelegatedRende
rerLayerImpl::create(layerId++)); | 2748 scoped_ptr<DelegatedRendererLayerImpl> delegatedRendererLayer(DelegatedRende
rerLayerImpl::create(layerId++)); |
2746 delegatedRendererLayer->setBounds(IntSize(10, 10)); | 2749 delegatedRendererLayer->setBounds(gfx::Size(10, 10)); |
2747 delegatedRendererLayer->setContentBounds(IntSize(10, 10)); | 2750 delegatedRendererLayer->setContentBounds(gfx::Size(10, 10)); |
2748 delegatedRendererLayer->setDrawsContent(true); | 2751 delegatedRendererLayer->setDrawsContent(true); |
2749 delegatedRendererLayer->setLayerTreeHostImpl(m_hostImpl.get()); | 2752 delegatedRendererLayer->setLayerTreeHostImpl(m_hostImpl.get()); |
2750 ScopedPtrVector<RenderPass> passList; | 2753 ScopedPtrVector<RenderPass> passList; |
2751 passList.append(createRenderPassWithResource(m_hostImpl->resourceProvider())
); | 2754 passList.append(createRenderPassWithResource(m_hostImpl->resourceProvider())
); |
2752 delegatedRendererLayer->setRenderPasses(passList); | 2755 delegatedRendererLayer->setRenderPasses(passList); |
2753 EXPECT_TRUE(passList.isEmpty()); | 2756 EXPECT_TRUE(passList.isEmpty()); |
2754 rootLayer->addChild(delegatedRendererLayer.PassAs<LayerImpl>()); | 2757 rootLayer->addChild(delegatedRendererLayer.PassAs<LayerImpl>()); |
2755 | 2758 |
2756 // Use a context that supports IOSurfaces | 2759 // Use a context that supports IOSurfaces |
2757 m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurface::create(scoped
_ptr<WebKit::WebGraphicsContext3D>(new FakeWebGraphicsContext3DWithIOSurface)).P
assAs<GraphicsContext>()); | 2760 m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurface::create(scoped
_ptr<WebKit::WebGraphicsContext3D>(new FakeWebGraphicsContext3DWithIOSurface)).P
assAs<GraphicsContext>()); |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2832 unsigned numTextures() const { return m_numTextures; } | 2835 unsigned numTextures() const { return m_numTextures; } |
2833 | 2836 |
2834 private: | 2837 private: |
2835 base::hash_map<WebGLId, bool> m_textures; | 2838 base::hash_map<WebGLId, bool> m_textures; |
2836 unsigned m_numTextures; | 2839 unsigned m_numTextures; |
2837 }; | 2840 }; |
2838 | 2841 |
2839 TEST_P(LayerTreeHostImplTest, layersFreeTextures) | 2842 TEST_P(LayerTreeHostImplTest, layersFreeTextures) |
2840 { | 2843 { |
2841 scoped_ptr<LayerImpl> rootLayer(LayerImpl::create(1)); | 2844 scoped_ptr<LayerImpl> rootLayer(LayerImpl::create(1)); |
2842 rootLayer->setBounds(IntSize(10, 10)); | 2845 rootLayer->setBounds(gfx::Size(10, 10)); |
2843 rootLayer->setAnchorPoint(FloatPoint(0, 0)); | 2846 rootLayer->setAnchorPoint(gfx::PointF(0, 0)); |
2844 | 2847 |
2845 scoped_ptr<TiledLayerImpl> tileLayer = TiledLayerImpl::create(2); | 2848 scoped_ptr<TiledLayerImpl> tileLayer = TiledLayerImpl::create(2); |
2846 tileLayer->setBounds(IntSize(10, 10)); | 2849 tileLayer->setBounds(gfx::Size(10, 10)); |
2847 tileLayer->setAnchorPoint(FloatPoint(0, 0)); | 2850 tileLayer->setAnchorPoint(gfx::PointF(0, 0)); |
2848 tileLayer->setContentBounds(IntSize(10, 10)); | 2851 tileLayer->setContentBounds(gfx::Size(10, 10)); |
2849 tileLayer->setDrawsContent(true); | 2852 tileLayer->setDrawsContent(true); |
2850 tileLayer->setSkipsDraw(false); | 2853 tileLayer->setSkipsDraw(false); |
2851 scoped_ptr<LayerTilingData> tilingData(LayerTilingData::create(IntSize(10, 1
0), LayerTilingData::NoBorderTexels)); | 2854 scoped_ptr<LayerTilingData> tilingData(LayerTilingData::create(gfx::Size(10,
10), LayerTilingData::NoBorderTexels)); |
2852 tilingData->setBounds(IntSize(10, 10)); | 2855 tilingData->setBounds(gfx::Size(10, 10)); |
2853 tileLayer->setTilingData(*tilingData); | 2856 tileLayer->setTilingData(*tilingData); |
2854 tileLayer->pushTileProperties(0, 0, 1, IntRect(0, 0, 10, 10), false); | 2857 tileLayer->pushTileProperties(0, 0, 1, gfx::Rect(0, 0, 10, 10), false); |
2855 rootLayer->addChild(tileLayer.PassAs<LayerImpl>()); | 2858 rootLayer->addChild(tileLayer.PassAs<LayerImpl>()); |
2856 | 2859 |
2857 scoped_ptr<TextureLayerImpl> textureLayer = TextureLayerImpl::create(3); | 2860 scoped_ptr<TextureLayerImpl> textureLayer = TextureLayerImpl::create(3); |
2858 textureLayer->setBounds(IntSize(10, 10)); | 2861 textureLayer->setBounds(gfx::Size(10, 10)); |
2859 textureLayer->setAnchorPoint(FloatPoint(0, 0)); | 2862 textureLayer->setAnchorPoint(gfx::PointF(0, 0)); |
2860 textureLayer->setContentBounds(IntSize(10, 10)); | 2863 textureLayer->setContentBounds(gfx::Size(10, 10)); |
2861 textureLayer->setDrawsContent(true); | 2864 textureLayer->setDrawsContent(true); |
2862 textureLayer->setTextureId(1); | 2865 textureLayer->setTextureId(1); |
2863 rootLayer->addChild(textureLayer.PassAs<LayerImpl>()); | 2866 rootLayer->addChild(textureLayer.PassAs<LayerImpl>()); |
2864 | 2867 |
2865 FakeVideoFrameProvider provider; | 2868 FakeVideoFrameProvider provider; |
2866 scoped_ptr<VideoLayerImpl> videoLayer = VideoLayerImpl::create(4, &provider)
; | 2869 scoped_ptr<VideoLayerImpl> videoLayer = VideoLayerImpl::create(4, &provider)
; |
2867 videoLayer->setBounds(IntSize(10, 10)); | 2870 videoLayer->setBounds(gfx::Size(10, 10)); |
2868 videoLayer->setAnchorPoint(FloatPoint(0, 0)); | 2871 videoLayer->setAnchorPoint(gfx::PointF(0, 0)); |
2869 videoLayer->setContentBounds(IntSize(10, 10)); | 2872 videoLayer->setContentBounds(gfx::Size(10, 10)); |
2870 videoLayer->setDrawsContent(true); | 2873 videoLayer->setDrawsContent(true); |
2871 videoLayer->setLayerTreeHostImpl(m_hostImpl.get()); | 2874 videoLayer->setLayerTreeHostImpl(m_hostImpl.get()); |
2872 rootLayer->addChild(videoLayer.PassAs<LayerImpl>()); | 2875 rootLayer->addChild(videoLayer.PassAs<LayerImpl>()); |
2873 | 2876 |
2874 scoped_ptr<IOSurfaceLayerImpl> ioSurfaceLayer = IOSurfaceLayerImpl::create(5
); | 2877 scoped_ptr<IOSurfaceLayerImpl> ioSurfaceLayer = IOSurfaceLayerImpl::create(5
); |
2875 ioSurfaceLayer->setBounds(IntSize(10, 10)); | 2878 ioSurfaceLayer->setBounds(gfx::Size(10, 10)); |
2876 ioSurfaceLayer->setAnchorPoint(FloatPoint(0, 0)); | 2879 ioSurfaceLayer->setAnchorPoint(gfx::PointF(0, 0)); |
2877 ioSurfaceLayer->setContentBounds(IntSize(10, 10)); | 2880 ioSurfaceLayer->setContentBounds(gfx::Size(10, 10)); |
2878 ioSurfaceLayer->setDrawsContent(true); | 2881 ioSurfaceLayer->setDrawsContent(true); |
2879 ioSurfaceLayer->setIOSurfaceProperties(1, IntSize(10, 10)); | 2882 ioSurfaceLayer->setIOSurfaceProperties(1, gfx::Size(10, 10)); |
2880 ioSurfaceLayer->setLayerTreeHostImpl(m_hostImpl.get()); | 2883 ioSurfaceLayer->setLayerTreeHostImpl(m_hostImpl.get()); |
2881 rootLayer->addChild(ioSurfaceLayer.PassAs<LayerImpl>()); | 2884 rootLayer->addChild(ioSurfaceLayer.PassAs<LayerImpl>()); |
2882 | 2885 |
2883 // Lose the context, replacing it with a TrackingWebGraphicsContext3D (which
the LayerTreeHostImpl takes ownership of). | 2886 // Lose the context, replacing it with a TrackingWebGraphicsContext3D (which
the LayerTreeHostImpl takes ownership of). |
2884 scoped_ptr<GraphicsContext> outputSurface(FakeWebCompositorOutputSurface::cr
eate(scoped_ptr<WebKit::WebGraphicsContext3D>(new TrackingWebGraphicsContext3D))
); | 2887 scoped_ptr<GraphicsContext> outputSurface(FakeWebCompositorOutputSurface::cr
eate(scoped_ptr<WebKit::WebGraphicsContext3D>(new TrackingWebGraphicsContext3D))
); |
2885 TrackingWebGraphicsContext3D* trackingWebGraphicsContext = static_cast<Track
ingWebGraphicsContext3D*>(outputSurface->context3D()); | 2888 TrackingWebGraphicsContext3D* trackingWebGraphicsContext = static_cast<Track
ingWebGraphicsContext3D*>(outputSurface->context3D()); |
2886 m_hostImpl->initializeRenderer(outputSurface.Pass()); | 2889 m_hostImpl->initializeRenderer(outputSurface.Pass()); |
2887 | 2890 |
2888 m_hostImpl->setRootLayer(rootLayer.Pass()); | 2891 m_hostImpl->setRootLayer(rootLayer.Pass()); |
2889 | 2892 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2929 Mock::VerifyAndClearExpectations(&mockContext); | 2932 Mock::VerifyAndClearExpectations(&mockContext); |
2930 | 2933 |
2931 // Verify no quads are drawn when transparent background is set. | 2934 // Verify no quads are drawn when transparent background is set. |
2932 myHostImpl->setHasTransparentBackground(true); | 2935 myHostImpl->setHasTransparentBackground(true); |
2933 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 2936 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
2934 myHostImpl->drawLayers(frame); | 2937 myHostImpl->drawLayers(frame); |
2935 myHostImpl->didDrawAllLayers(frame); | 2938 myHostImpl->didDrawAllLayers(frame); |
2936 Mock::VerifyAndClearExpectations(&mockContext); | 2939 Mock::VerifyAndClearExpectations(&mockContext); |
2937 } | 2940 } |
2938 | 2941 |
2939 static void addDrawingLayerTo(LayerImpl* parent, int id, const IntRect& layerRec
t, LayerImpl** result) | 2942 static void addDrawingLayerTo(LayerImpl* parent, int id, const gfx::Rect& layerR
ect, LayerImpl** result) |
2940 { | 2943 { |
2941 scoped_ptr<LayerImpl> layer = FakeLayerWithQuads::create(id); | 2944 scoped_ptr<LayerImpl> layer = FakeLayerWithQuads::create(id); |
2942 LayerImpl* layerPtr = layer.get(); | 2945 LayerImpl* layerPtr = layer.get(); |
2943 layerPtr->setAnchorPoint(FloatPoint(0, 0)); | 2946 layerPtr->setAnchorPoint(gfx::PointF(0, 0)); |
2944 layerPtr->setPosition(FloatPoint(layerRect.location())); | 2947 layerPtr->setPosition(gfx::PointF(layerRect.origin())); |
2945 layerPtr->setBounds(layerRect.size()); | 2948 layerPtr->setBounds(layerRect.size()); |
2946 layerPtr->setContentBounds(layerRect.size()); | 2949 layerPtr->setContentBounds(layerRect.size()); |
2947 layerPtr->setDrawsContent(true); // only children draw content | 2950 layerPtr->setDrawsContent(true); // only children draw content |
2948 layerPtr->setContentsOpaque(true); | 2951 layerPtr->setContentsOpaque(true); |
2949 parent->addChild(layer.Pass()); | 2952 parent->addChild(layer.Pass()); |
2950 if (result) | 2953 if (result) |
2951 *result = layerPtr; | 2954 *result = layerPtr; |
2952 } | 2955 } |
2953 | 2956 |
2954 static void setupLayersForTextureCaching(LayerTreeHostImpl* layerTreeHostImpl, L
ayerImpl*& rootPtr, LayerImpl*& intermediateLayerPtr, LayerImpl*& surfaceLayerPt
r, LayerImpl*& childPtr, const IntSize& rootSize) | 2957 static void setupLayersForTextureCaching(LayerTreeHostImpl* layerTreeHostImpl, L
ayerImpl*& rootPtr, LayerImpl*& intermediateLayerPtr, LayerImpl*& surfaceLayerPt
r, LayerImpl*& childPtr, const gfx::Size& rootSize) |
2955 { | 2958 { |
2956 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create
(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi
csContext>(); | 2959 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create
(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi
csContext>(); |
2957 | 2960 |
2958 layerTreeHostImpl->initializeRenderer(context.Pass()); | 2961 layerTreeHostImpl->initializeRenderer(context.Pass()); |
2959 layerTreeHostImpl->setViewportSize(rootSize, rootSize); | 2962 layerTreeHostImpl->setViewportSize(rootSize, rootSize); |
2960 | 2963 |
2961 scoped_ptr<LayerImpl> root = LayerImpl::create(1); | 2964 scoped_ptr<LayerImpl> root = LayerImpl::create(1); |
2962 rootPtr = root.get(); | 2965 rootPtr = root.get(); |
2963 | 2966 |
2964 root->setAnchorPoint(FloatPoint(0, 0)); | 2967 root->setAnchorPoint(gfx::PointF(0, 0)); |
2965 root->setPosition(FloatPoint(0, 0)); | 2968 root->setPosition(gfx::PointF(0, 0)); |
2966 root->setBounds(rootSize); | 2969 root->setBounds(rootSize); |
2967 root->setContentBounds(rootSize); | 2970 root->setContentBounds(rootSize); |
2968 root->setDrawsContent(true); | 2971 root->setDrawsContent(true); |
2969 layerTreeHostImpl->setRootLayer(root.Pass()); | 2972 layerTreeHostImpl->setRootLayer(root.Pass()); |
2970 | 2973 |
2971 addDrawingLayerTo(rootPtr, 2, IntRect(10, 10, rootSize.width(), rootSize.hei
ght()), &intermediateLayerPtr); | 2974 addDrawingLayerTo(rootPtr, 2, gfx::Rect(10, 10, rootSize.width(), rootSize.h
eight()), &intermediateLayerPtr); |
2972 intermediateLayerPtr->setDrawsContent(false); // only children draw content | 2975 intermediateLayerPtr->setDrawsContent(false); // only children draw content |
2973 | 2976 |
2974 // Surface layer is the layer that changes its opacity | 2977 // Surface layer is the layer that changes its opacity |
2975 // It will contain other layers that draw content. | 2978 // It will contain other layers that draw content. |
2976 addDrawingLayerTo(intermediateLayerPtr, 3, IntRect(10, 10, rootSize.width(),
rootSize.height()), &surfaceLayerPtr); | 2979 addDrawingLayerTo(intermediateLayerPtr, 3, gfx::Rect(10, 10, rootSize.width(
), rootSize.height()), &surfaceLayerPtr); |
2977 surfaceLayerPtr->setDrawsContent(false); // only children draw content | 2980 surfaceLayerPtr->setDrawsContent(false); // only children draw content |
2978 surfaceLayerPtr->setOpacity(0.5f); // This will cause it to have a surface | 2981 surfaceLayerPtr->setOpacity(0.5f); // This will cause it to have a surface |
2979 | 2982 |
2980 // Child of the surface layer will produce some quads | 2983 // Child of the surface layer will produce some quads |
2981 addDrawingLayerTo(surfaceLayerPtr, 4, IntRect(5, 5, rootSize.width() - 25, r
ootSize.height() - 25), &childPtr); | 2984 addDrawingLayerTo(surfaceLayerPtr, 4, gfx::Rect(5, 5, rootSize.width() - 25,
rootSize.height() - 25), &childPtr); |
2982 } | 2985 } |
2983 | 2986 |
2984 class GLRendererWithReleaseTextures : public GLRenderer { | 2987 class GLRendererWithReleaseTextures : public GLRenderer { |
2985 public: | 2988 public: |
2986 using GLRenderer::releaseRenderPassTextures; | 2989 using GLRenderer::releaseRenderPassTextures; |
2987 }; | 2990 }; |
2988 | 2991 |
2989 TEST_P(LayerTreeHostImplTest, textureCachingWithClipping) | 2992 TEST_P(LayerTreeHostImplTest, textureCachingWithClipping) |
2990 { | 2993 { |
2991 Settings::setPartialSwapEnabled(true); | 2994 Settings::setPartialSwapEnabled(true); |
2992 | 2995 |
2993 LayerTreeSettings settings; | 2996 LayerTreeSettings settings; |
2994 settings.minimumOcclusionTrackingSize = IntSize(); | 2997 settings.minimumOcclusionTrackingSize = gfx::Size(); |
2995 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this); | 2998 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this); |
2996 | 2999 |
2997 LayerImpl* rootPtr; | 3000 LayerImpl* rootPtr; |
2998 LayerImpl* surfaceLayerPtr; | 3001 LayerImpl* surfaceLayerPtr; |
2999 | 3002 |
3000 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create
(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi
csContext>(); | 3003 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create
(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi
csContext>(); |
3001 | 3004 |
3002 IntSize rootSize(100, 100); | 3005 gfx::Size rootSize(100, 100); |
3003 | 3006 |
3004 myHostImpl->initializeRenderer(context.Pass()); | 3007 myHostImpl->initializeRenderer(context.Pass()); |
3005 myHostImpl->setViewportSize(IntSize(rootSize.width(), rootSize.height()), In
tSize(rootSize.width(), rootSize.height())); | 3008 myHostImpl->setViewportSize(gfx::Size(rootSize.width(), rootSize.height()),
gfx::Size(rootSize.width(), rootSize.height())); |
3006 | 3009 |
3007 scoped_ptr<LayerImpl> root = LayerImpl::create(1); | 3010 scoped_ptr<LayerImpl> root = LayerImpl::create(1); |
3008 rootPtr = root.get(); | 3011 rootPtr = root.get(); |
3009 | 3012 |
3010 root->setAnchorPoint(FloatPoint(0, 0)); | 3013 root->setAnchorPoint(gfx::PointF(0, 0)); |
3011 root->setPosition(FloatPoint(0, 0)); | 3014 root->setPosition(gfx::PointF(0, 0)); |
3012 root->setBounds(rootSize); | 3015 root->setBounds(rootSize); |
3013 root->setContentBounds(rootSize); | 3016 root->setContentBounds(rootSize); |
3014 root->setDrawsContent(true); | 3017 root->setDrawsContent(true); |
3015 root->setMasksToBounds(true); | 3018 root->setMasksToBounds(true); |
3016 myHostImpl->setRootLayer(root.Pass()); | 3019 myHostImpl->setRootLayer(root.Pass()); |
3017 | 3020 |
3018 addDrawingLayerTo(rootPtr, 3, IntRect(0, 0, rootSize.width(), rootSize.heigh
t()), &surfaceLayerPtr); | 3021 addDrawingLayerTo(rootPtr, 3, gfx::Rect(0, 0, rootSize.width(), rootSize.hei
ght()), &surfaceLayerPtr); |
3019 surfaceLayerPtr->setDrawsContent(false); | 3022 surfaceLayerPtr->setDrawsContent(false); |
3020 | 3023 |
3021 // Surface layer is the layer that changes its opacity | 3024 // Surface layer is the layer that changes its opacity |
3022 // It will contain other layers that draw content. | 3025 // It will contain other layers that draw content. |
3023 surfaceLayerPtr->setOpacity(0.5f); // This will cause it to have a surface | 3026 surfaceLayerPtr->setOpacity(0.5f); // This will cause it to have a surface |
3024 | 3027 |
3025 addDrawingLayerTo(surfaceLayerPtr, 4, IntRect(0, 0, 100, 3), 0); | 3028 addDrawingLayerTo(surfaceLayerPtr, 4, gfx::Rect(0, 0, 100, 3), 0); |
3026 addDrawingLayerTo(surfaceLayerPtr, 5, IntRect(0, 97, 100, 3), 0); | 3029 addDrawingLayerTo(surfaceLayerPtr, 5, gfx::Rect(0, 97, 100, 3), 0); |
3027 | 3030 |
3028 // Rotation will put part of the child ouside the bounds of the root layer. | 3031 // Rotation will put part of the child ouside the bounds of the root layer. |
3029 // Nevertheless, the child layers should be drawn. | 3032 // Nevertheless, the child layers should be drawn. |
3030 WebTransformationMatrix transform = surfaceLayerPtr->transform(); | 3033 WebTransformationMatrix transform = surfaceLayerPtr->transform(); |
3031 transform.translate(50, 50); | 3034 transform.translate(50, 50); |
3032 transform.rotate(35); | 3035 transform.rotate(35); |
3033 transform.translate(-50, -50); | 3036 transform.translate(-50, -50); |
3034 surfaceLayerPtr->setTransform(transform); | 3037 surfaceLayerPtr->setTransform(transform); |
3035 | 3038 |
3036 { | 3039 { |
3037 LayerTreeHostImpl::FrameData frame; | 3040 LayerTreeHostImpl::FrameData frame; |
3038 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3041 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
3039 | 3042 |
3040 // Must receive two render passes, each with one quad | 3043 // Must receive two render passes, each with one quad |
3041 ASSERT_EQ(2U, frame.renderPasses.size()); | 3044 ASSERT_EQ(2U, frame.renderPasses.size()); |
3042 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size()); | 3045 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size()); |
3043 ASSERT_EQ(1U, frame.renderPasses[1]->quadList().size()); | 3046 ASSERT_EQ(1U, frame.renderPasses[1]->quadList().size()); |
3044 | 3047 |
3045 // Verify that the child layers are being clipped. | 3048 // Verify that the child layers are being clipped. |
3046 gfx::Rect quadVisibleRect = frame.renderPasses[0]->quadList()[0]->quadVi
sibleRect(); | 3049 gfx::Rect quadVisibleRect = frame.renderPasses[0]->quadList()[0]->quadVi
sibleRect(); |
3047 EXPECT_LT(quadVisibleRect.width(), 100); | 3050 EXPECT_LT(quadVisibleRect.width(), 100); |
3048 | 3051 |
3049 quadVisibleRect = frame.renderPasses[0]->quadList()[1]->quadVisibleRect(
); | 3052 quadVisibleRect = frame.renderPasses[0]->quadList()[1]->quadVisibleRect(
); |
3050 EXPECT_LT(quadVisibleRect.width(), 100); | 3053 EXPECT_LT(quadVisibleRect.width(), 100); |
3051 | 3054 |
3052 // Verify that the render surface texture is *not* clipped. | 3055 // Verify that the render surface texture is *not* clipped. |
3053 EXPECT_RECT_EQ(IntRect(0, 0, 100, 100), frame.renderPasses[0]->outputRec
t()); | 3056 EXPECT_RECT_EQ(gfx::Rect(0, 0, 100, 100), frame.renderPasses[0]->outputR
ect()); |
3054 | 3057 |
3055 EXPECT_EQ(DrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->ma
terial()); | 3058 EXPECT_EQ(DrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->ma
terial()); |
3056 RenderPassDrawQuad* quad = static_cast<RenderPassDrawQuad*>(frame.render
Passes[1]->quadList()[0]); | 3059 RenderPassDrawQuad* quad = static_cast<RenderPassDrawQuad*>(frame.render
Passes[1]->quadList()[0]); |
3057 EXPECT_FALSE(quad->contentsChangedSinceLastFrame().IsEmpty()); | 3060 EXPECT_FALSE(quad->contentsChangedSinceLastFrame().IsEmpty()); |
3058 | 3061 |
3059 myHostImpl->drawLayers(frame); | 3062 myHostImpl->drawLayers(frame); |
3060 myHostImpl->didDrawAllLayers(frame); | 3063 myHostImpl->didDrawAllLayers(frame); |
3061 } | 3064 } |
3062 | 3065 |
3063 transform = surfaceLayerPtr->transform(); | 3066 transform = surfaceLayerPtr->transform(); |
(...skipping 17 matching lines...) Expand all Loading... |
3081 myHostImpl->drawLayers(frame); | 3084 myHostImpl->drawLayers(frame); |
3082 myHostImpl->didDrawAllLayers(frame); | 3085 myHostImpl->didDrawAllLayers(frame); |
3083 } | 3086 } |
3084 } | 3087 } |
3085 | 3088 |
3086 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusion) | 3089 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusion) |
3087 { | 3090 { |
3088 Settings::setPartialSwapEnabled(false); | 3091 Settings::setPartialSwapEnabled(false); |
3089 | 3092 |
3090 LayerTreeSettings settings; | 3093 LayerTreeSettings settings; |
3091 settings.minimumOcclusionTrackingSize = IntSize(); | 3094 settings.minimumOcclusionTrackingSize = gfx::Size(); |
3092 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this); | 3095 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this); |
3093 | 3096 |
3094 // Layers are structure as follows: | 3097 // Layers are structure as follows: |
3095 // | 3098 // |
3096 // R +-- S1 +- L10 (owning) | 3099 // R +-- S1 +- L10 (owning) |
3097 // | +- L11 | 3100 // | +- L11 |
3098 // | +- L12 | 3101 // | +- L12 |
3099 // | | 3102 // | |
3100 // +-- S2 +- L20 (owning) | 3103 // +-- S2 +- L20 (owning) |
3101 // +- L21 | 3104 // +- L21 |
3102 // | 3105 // |
3103 // Occlusion: | 3106 // Occlusion: |
3104 // L12 occludes L11 (internal) | 3107 // L12 occludes L11 (internal) |
3105 // L20 occludes L10 (external) | 3108 // L20 occludes L10 (external) |
3106 // L21 occludes L20 (internal) | 3109 // L21 occludes L20 (internal) |
3107 | 3110 |
3108 LayerImpl* rootPtr; | 3111 LayerImpl* rootPtr; |
3109 LayerImpl* layerS1Ptr; | 3112 LayerImpl* layerS1Ptr; |
3110 LayerImpl* layerS2Ptr; | 3113 LayerImpl* layerS2Ptr; |
3111 | 3114 |
3112 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create
(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi
csContext>(); | 3115 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create
(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi
csContext>(); |
3113 | 3116 |
3114 IntSize rootSize(1000, 1000); | 3117 gfx::Size rootSize(1000, 1000); |
3115 | 3118 |
3116 myHostImpl->initializeRenderer(context.Pass()); | 3119 myHostImpl->initializeRenderer(context.Pass()); |
3117 myHostImpl->setViewportSize(IntSize(rootSize.width(), rootSize.height()), In
tSize(rootSize.width(), rootSize.height())); | 3120 myHostImpl->setViewportSize(gfx::Size(rootSize.width(), rootSize.height()),
gfx::Size(rootSize.width(), rootSize.height())); |
3118 | 3121 |
3119 scoped_ptr<LayerImpl> root = LayerImpl::create(1); | 3122 scoped_ptr<LayerImpl> root = LayerImpl::create(1); |
3120 rootPtr = root.get(); | 3123 rootPtr = root.get(); |
3121 | 3124 |
3122 root->setAnchorPoint(FloatPoint(0, 0)); | 3125 root->setAnchorPoint(gfx::PointF(0, 0)); |
3123 root->setPosition(FloatPoint(0, 0)); | 3126 root->setPosition(gfx::PointF(0, 0)); |
3124 root->setBounds(rootSize); | 3127 root->setBounds(rootSize); |
3125 root->setContentBounds(rootSize); | 3128 root->setContentBounds(rootSize); |
3126 root->setDrawsContent(true); | 3129 root->setDrawsContent(true); |
3127 root->setMasksToBounds(true); | 3130 root->setMasksToBounds(true); |
3128 myHostImpl->setRootLayer(root.Pass()); | 3131 myHostImpl->setRootLayer(root.Pass()); |
3129 | 3132 |
3130 addDrawingLayerTo(rootPtr, 2, IntRect(300, 300, 300, 300), &layerS1Ptr); | 3133 addDrawingLayerTo(rootPtr, 2, gfx::Rect(300, 300, 300, 300), &layerS1Ptr); |
3131 layerS1Ptr->setForceRenderSurface(true); | 3134 layerS1Ptr->setForceRenderSurface(true); |
3132 | 3135 |
3133 addDrawingLayerTo(layerS1Ptr, 3, IntRect(10, 10, 10, 10), 0); // L11 | 3136 addDrawingLayerTo(layerS1Ptr, 3, gfx::Rect(10, 10, 10, 10), 0); // L11 |
3134 addDrawingLayerTo(layerS1Ptr, 4, IntRect(0, 0, 30, 30), 0); // L12 | 3137 addDrawingLayerTo(layerS1Ptr, 4, gfx::Rect(0, 0, 30, 30), 0); // L12 |
3135 | 3138 |
3136 addDrawingLayerTo(rootPtr, 5, IntRect(550, 250, 300, 400), &layerS2Ptr); | 3139 addDrawingLayerTo(rootPtr, 5, gfx::Rect(550, 250, 300, 400), &layerS2Ptr); |
3137 layerS2Ptr->setForceRenderSurface(true); | 3140 layerS2Ptr->setForceRenderSurface(true); |
3138 | 3141 |
3139 addDrawingLayerTo(layerS2Ptr, 6, IntRect(20, 20, 5, 5), 0); // L21 | 3142 addDrawingLayerTo(layerS2Ptr, 6, gfx::Rect(20, 20, 5, 5), 0); // L21 |
3140 | 3143 |
3141 // Initial draw - must receive all quads | 3144 // Initial draw - must receive all quads |
3142 { | 3145 { |
3143 LayerTreeHostImpl::FrameData frame; | 3146 LayerTreeHostImpl::FrameData frame; |
3144 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3147 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
3145 | 3148 |
3146 // Must receive 3 render passes. | 3149 // 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. | 3150 // 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()); | 3151 ASSERT_EQ(3U, frame.renderPasses.size()); |
3149 | 3152 |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3197 myHostImpl->didDrawAllLayers(frame); | 3200 myHostImpl->didDrawAllLayers(frame); |
3198 } | 3201 } |
3199 | 3202 |
3200 } | 3203 } |
3201 | 3204 |
3202 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionEarlyOut) | 3205 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionEarlyOut) |
3203 { | 3206 { |
3204 Settings::setPartialSwapEnabled(false); | 3207 Settings::setPartialSwapEnabled(false); |
3205 | 3208 |
3206 LayerTreeSettings settings; | 3209 LayerTreeSettings settings; |
3207 settings.minimumOcclusionTrackingSize = IntSize(); | 3210 settings.minimumOcclusionTrackingSize = gfx::Size(); |
3208 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this); | 3211 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this); |
3209 | 3212 |
3210 // Layers are structure as follows: | 3213 // Layers are structure as follows: |
3211 // | 3214 // |
3212 // R +-- S1 +- L10 (owning, non drawing) | 3215 // R +-- S1 +- L10 (owning, non drawing) |
3213 // | +- L11 (corner, unoccluded) | 3216 // | +- L11 (corner, unoccluded) |
3214 // | +- L12 (corner, unoccluded) | 3217 // | +- L12 (corner, unoccluded) |
3215 // | +- L13 (corner, unoccluded) | 3218 // | +- L13 (corner, unoccluded) |
3216 // | +- L14 (corner, entirely occluded) | 3219 // | +- L14 (corner, entirely occluded) |
3217 // | | 3220 // | |
3218 // +-- S2 +- L20 (owning, drawing) | 3221 // +-- S2 +- L20 (owning, drawing) |
3219 // | 3222 // |
3220 | 3223 |
3221 LayerImpl* rootPtr; | 3224 LayerImpl* rootPtr; |
3222 LayerImpl* layerS1Ptr; | 3225 LayerImpl* layerS1Ptr; |
3223 LayerImpl* layerS2Ptr; | 3226 LayerImpl* layerS2Ptr; |
3224 | 3227 |
3225 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create
(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi
csContext>(); | 3228 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create
(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi
csContext>(); |
3226 | 3229 |
3227 IntSize rootSize(1000, 1000); | 3230 gfx::Size rootSize(1000, 1000); |
3228 | 3231 |
3229 myHostImpl->initializeRenderer(context.Pass()); | 3232 myHostImpl->initializeRenderer(context.Pass()); |
3230 myHostImpl->setViewportSize(IntSize(rootSize.width(), rootSize.height()), In
tSize(rootSize.width(), rootSize.height())); | 3233 myHostImpl->setViewportSize(gfx::Size(rootSize.width(), rootSize.height()),
gfx::Size(rootSize.width(), rootSize.height())); |
3231 | 3234 |
3232 scoped_ptr<LayerImpl> root = LayerImpl::create(1); | 3235 scoped_ptr<LayerImpl> root = LayerImpl::create(1); |
3233 rootPtr = root.get(); | 3236 rootPtr = root.get(); |
3234 | 3237 |
3235 root->setAnchorPoint(FloatPoint(0, 0)); | 3238 root->setAnchorPoint(gfx::PointF(0, 0)); |
3236 root->setPosition(FloatPoint(0, 0)); | 3239 root->setPosition(gfx::PointF(0, 0)); |
3237 root->setBounds(rootSize); | 3240 root->setBounds(rootSize); |
3238 root->setContentBounds(rootSize); | 3241 root->setContentBounds(rootSize); |
3239 root->setDrawsContent(true); | 3242 root->setDrawsContent(true); |
3240 root->setMasksToBounds(true); | 3243 root->setMasksToBounds(true); |
3241 myHostImpl->setRootLayer(root.Pass()); | 3244 myHostImpl->setRootLayer(root.Pass()); |
3242 | 3245 |
3243 addDrawingLayerTo(rootPtr, 2, IntRect(0, 0, 800, 800), &layerS1Ptr); | 3246 addDrawingLayerTo(rootPtr, 2, gfx::Rect(0, 0, 800, 800), &layerS1Ptr); |
3244 layerS1Ptr->setForceRenderSurface(true); | 3247 layerS1Ptr->setForceRenderSurface(true); |
3245 layerS1Ptr->setDrawsContent(false); | 3248 layerS1Ptr->setDrawsContent(false); |
3246 | 3249 |
3247 addDrawingLayerTo(layerS1Ptr, 3, IntRect(0, 0, 300, 300), 0); // L11 | 3250 addDrawingLayerTo(layerS1Ptr, 3, gfx::Rect(0, 0, 300, 300), 0); // L11 |
3248 addDrawingLayerTo(layerS1Ptr, 4, IntRect(0, 500, 300, 300), 0); // L12 | 3251 addDrawingLayerTo(layerS1Ptr, 4, gfx::Rect(0, 500, 300, 300), 0); // L12 |
3249 addDrawingLayerTo(layerS1Ptr, 5, IntRect(500, 0, 300, 300), 0); // L13 | 3252 addDrawingLayerTo(layerS1Ptr, 5, gfx::Rect(500, 0, 300, 300), 0); // L13 |
3250 addDrawingLayerTo(layerS1Ptr, 6, IntRect(500, 500, 300, 300), 0); // L14 | 3253 addDrawingLayerTo(layerS1Ptr, 6, gfx::Rect(500, 500, 300, 300), 0); // L14 |
3251 addDrawingLayerTo(layerS1Ptr, 9, IntRect(500, 500, 300, 300), 0); // L14 | 3254 addDrawingLayerTo(layerS1Ptr, 9, gfx::Rect(500, 500, 300, 300), 0); // L14 |
3252 | 3255 |
3253 addDrawingLayerTo(rootPtr, 7, IntRect(450, 450, 450, 450), &layerS2Ptr); | 3256 addDrawingLayerTo(rootPtr, 7, gfx::Rect(450, 450, 450, 450), &layerS2Ptr); |
3254 layerS2Ptr->setForceRenderSurface(true); | 3257 layerS2Ptr->setForceRenderSurface(true); |
3255 | 3258 |
3256 // Initial draw - must receive all quads | 3259 // Initial draw - must receive all quads |
3257 { | 3260 { |
3258 LayerTreeHostImpl::FrameData frame; | 3261 LayerTreeHostImpl::FrameData frame; |
3259 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3262 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
3260 | 3263 |
3261 // Must receive 3 render passes. | 3264 // Must receive 3 render passes. |
3262 // For Root, there are 2 quads; for S1, there are 3 quads; for S2, there
is 1 quad. | 3265 // 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()); | 3266 ASSERT_EQ(3U, frame.renderPasses.size()); |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3313 myHostImpl->drawLayers(frame); | 3316 myHostImpl->drawLayers(frame); |
3314 myHostImpl->didDrawAllLayers(frame); | 3317 myHostImpl->didDrawAllLayers(frame); |
3315 } | 3318 } |
3316 } | 3319 } |
3317 | 3320 |
3318 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionExternalOverInternal) | 3321 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionExternalOverInternal) |
3319 { | 3322 { |
3320 Settings::setPartialSwapEnabled(false); | 3323 Settings::setPartialSwapEnabled(false); |
3321 | 3324 |
3322 LayerTreeSettings settings; | 3325 LayerTreeSettings settings; |
3323 settings.minimumOcclusionTrackingSize = IntSize(); | 3326 settings.minimumOcclusionTrackingSize = gfx::Size(); |
3324 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this); | 3327 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this); |
3325 | 3328 |
3326 // Layers are structured as follows: | 3329 // Layers are structured as follows: |
3327 // | 3330 // |
3328 // R +-- S1 +- L10 (owning, drawing) | 3331 // R +-- S1 +- L10 (owning, drawing) |
3329 // | +- L11 (corner, occluded by L12) | 3332 // | +- L11 (corner, occluded by L12) |
3330 // | +- L12 (opposite corner) | 3333 // | +- L12 (opposite corner) |
3331 // | | 3334 // | |
3332 // +-- S2 +- L20 (owning, drawing) | 3335 // +-- S2 +- L20 (owning, drawing) |
3333 // | 3336 // |
3334 | 3337 |
3335 LayerImpl* rootPtr; | 3338 LayerImpl* rootPtr; |
3336 LayerImpl* layerS1Ptr; | 3339 LayerImpl* layerS1Ptr; |
3337 LayerImpl* layerS2Ptr; | 3340 LayerImpl* layerS2Ptr; |
3338 | 3341 |
3339 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create
(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi
csContext>(); | 3342 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create
(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi
csContext>(); |
3340 | 3343 |
3341 IntSize rootSize(1000, 1000); | 3344 gfx::Size rootSize(1000, 1000); |
3342 | 3345 |
3343 myHostImpl->initializeRenderer(context.Pass()); | 3346 myHostImpl->initializeRenderer(context.Pass()); |
3344 myHostImpl->setViewportSize(IntSize(rootSize.width(), rootSize.height()), In
tSize(rootSize.width(), rootSize.height())); | 3347 myHostImpl->setViewportSize(gfx::Size(rootSize.width(), rootSize.height()),
gfx::Size(rootSize.width(), rootSize.height())); |
3345 | 3348 |
3346 scoped_ptr<LayerImpl> root = LayerImpl::create(1); | 3349 scoped_ptr<LayerImpl> root = LayerImpl::create(1); |
3347 rootPtr = root.get(); | 3350 rootPtr = root.get(); |
3348 | 3351 |
3349 root->setAnchorPoint(FloatPoint(0, 0)); | 3352 root->setAnchorPoint(gfx::PointF(0, 0)); |
3350 root->setPosition(FloatPoint(0, 0)); | 3353 root->setPosition(gfx::PointF(0, 0)); |
3351 root->setBounds(rootSize); | 3354 root->setBounds(rootSize); |
3352 root->setContentBounds(rootSize); | 3355 root->setContentBounds(rootSize); |
3353 root->setDrawsContent(true); | 3356 root->setDrawsContent(true); |
3354 root->setMasksToBounds(true); | 3357 root->setMasksToBounds(true); |
3355 myHostImpl->setRootLayer(root.Pass()); | 3358 myHostImpl->setRootLayer(root.Pass()); |
3356 | 3359 |
3357 addDrawingLayerTo(rootPtr, 2, IntRect(0, 0, 400, 400), &layerS1Ptr); | 3360 addDrawingLayerTo(rootPtr, 2, gfx::Rect(0, 0, 400, 400), &layerS1Ptr); |
3358 layerS1Ptr->setForceRenderSurface(true); | 3361 layerS1Ptr->setForceRenderSurface(true); |
3359 | 3362 |
3360 addDrawingLayerTo(layerS1Ptr, 3, IntRect(0, 0, 300, 300), 0); // L11 | 3363 addDrawingLayerTo(layerS1Ptr, 3, gfx::Rect(0, 0, 300, 300), 0); // L11 |
3361 addDrawingLayerTo(layerS1Ptr, 4, IntRect(100, 0, 300, 300), 0); // L12 | 3364 addDrawingLayerTo(layerS1Ptr, 4, gfx::Rect(100, 0, 300, 300), 0); // L12 |
3362 | 3365 |
3363 addDrawingLayerTo(rootPtr, 7, IntRect(200, 0, 300, 300), &layerS2Ptr); | 3366 addDrawingLayerTo(rootPtr, 7, gfx::Rect(200, 0, 300, 300), &layerS2Ptr); |
3364 layerS2Ptr->setForceRenderSurface(true); | 3367 layerS2Ptr->setForceRenderSurface(true); |
3365 | 3368 |
3366 // Initial draw - must receive all quads | 3369 // Initial draw - must receive all quads |
3367 { | 3370 { |
3368 LayerTreeHostImpl::FrameData frame; | 3371 LayerTreeHostImpl::FrameData frame; |
3369 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3372 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
3370 | 3373 |
3371 // Must receive 3 render passes. | 3374 // Must receive 3 render passes. |
3372 // For Root, there are 2 quads; for S1, there are 3 quads; for S2, there
is 1 quad. | 3375 // 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()); | 3376 ASSERT_EQ(3U, frame.renderPasses.size()); |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3414 // Layers are structured as follows: | 3417 // Layers are structured as follows: |
3415 // | 3418 // |
3416 // R +-- S1 +- L10 (rotated, drawing) | 3419 // R +-- S1 +- L10 (rotated, drawing) |
3417 // +- L11 (occupies half surface) | 3420 // +- L11 (occupies half surface) |
3418 | 3421 |
3419 LayerImpl* rootPtr; | 3422 LayerImpl* rootPtr; |
3420 LayerImpl* layerS1Ptr; | 3423 LayerImpl* layerS1Ptr; |
3421 | 3424 |
3422 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create
(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi
csContext>(); | 3425 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create
(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi
csContext>(); |
3423 | 3426 |
3424 IntSize rootSize(1000, 1000); | 3427 gfx::Size rootSize(1000, 1000); |
3425 | 3428 |
3426 myHostImpl->initializeRenderer(context.Pass()); | 3429 myHostImpl->initializeRenderer(context.Pass()); |
3427 myHostImpl->setViewportSize(IntSize(rootSize.width(), rootSize.height()), In
tSize(rootSize.width(), rootSize.height())); | 3430 myHostImpl->setViewportSize(gfx::Size(rootSize.width(), rootSize.height()),
gfx::Size(rootSize.width(), rootSize.height())); |
3428 | 3431 |
3429 scoped_ptr<LayerImpl> root = LayerImpl::create(1); | 3432 scoped_ptr<LayerImpl> root = LayerImpl::create(1); |
3430 rootPtr = root.get(); | 3433 rootPtr = root.get(); |
3431 | 3434 |
3432 root->setAnchorPoint(FloatPoint(0, 0)); | 3435 root->setAnchorPoint(gfx::PointF(0, 0)); |
3433 root->setPosition(FloatPoint(0, 0)); | 3436 root->setPosition(gfx::PointF(0, 0)); |
3434 root->setBounds(rootSize); | 3437 root->setBounds(rootSize); |
3435 root->setContentBounds(rootSize); | 3438 root->setContentBounds(rootSize); |
3436 root->setDrawsContent(true); | 3439 root->setDrawsContent(true); |
3437 root->setMasksToBounds(true); | 3440 root->setMasksToBounds(true); |
3438 myHostImpl->setRootLayer(root.Pass()); | 3441 myHostImpl->setRootLayer(root.Pass()); |
3439 | 3442 |
3440 addDrawingLayerTo(rootPtr, 2, IntRect(0, 0, 400, 400), &layerS1Ptr); | 3443 addDrawingLayerTo(rootPtr, 2, gfx::Rect(0, 0, 400, 400), &layerS1Ptr); |
3441 layerS1Ptr->setForceRenderSurface(true); | 3444 layerS1Ptr->setForceRenderSurface(true); |
3442 WebTransformationMatrix transform = layerS1Ptr->transform(); | 3445 WebTransformationMatrix transform = layerS1Ptr->transform(); |
3443 transform.translate(200, 200); | 3446 transform.translate(200, 200); |
3444 transform.rotate(45); | 3447 transform.rotate(45); |
3445 transform.translate(-200, -200); | 3448 transform.translate(-200, -200); |
3446 layerS1Ptr->setTransform(transform); | 3449 layerS1Ptr->setTransform(transform); |
3447 | 3450 |
3448 addDrawingLayerTo(layerS1Ptr, 3, IntRect(200, 0, 200, 400), 0); // L11 | 3451 addDrawingLayerTo(layerS1Ptr, 3, gfx::Rect(200, 0, 200, 400), 0); // L11 |
3449 | 3452 |
3450 // Initial draw - must receive all quads | 3453 // Initial draw - must receive all quads |
3451 { | 3454 { |
3452 LayerTreeHostImpl::FrameData frame; | 3455 LayerTreeHostImpl::FrameData frame; |
3453 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3456 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
3454 | 3457 |
3455 // Must receive 2 render passes. | 3458 // Must receive 2 render passes. |
3456 ASSERT_EQ(2U, frame.renderPasses.size()); | 3459 ASSERT_EQ(2U, frame.renderPasses.size()); |
3457 | 3460 |
3458 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size()); | 3461 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size()); |
(...skipping 17 matching lines...) Expand all Loading... |
3476 myHostImpl->drawLayers(frame); | 3479 myHostImpl->drawLayers(frame); |
3477 myHostImpl->didDrawAllLayers(frame); | 3480 myHostImpl->didDrawAllLayers(frame); |
3478 } | 3481 } |
3479 } | 3482 } |
3480 | 3483 |
3481 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionPartialSwap) | 3484 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionPartialSwap) |
3482 { | 3485 { |
3483 Settings::setPartialSwapEnabled(true); | 3486 Settings::setPartialSwapEnabled(true); |
3484 | 3487 |
3485 LayerTreeSettings settings; | 3488 LayerTreeSettings settings; |
3486 settings.minimumOcclusionTrackingSize = IntSize(); | 3489 settings.minimumOcclusionTrackingSize = gfx::Size(); |
3487 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this); | 3490 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this); |
3488 | 3491 |
3489 // Layers are structure as follows: | 3492 // Layers are structure as follows: |
3490 // | 3493 // |
3491 // R +-- S1 +- L10 (owning) | 3494 // R +-- S1 +- L10 (owning) |
3492 // | +- L11 | 3495 // | +- L11 |
3493 // | +- L12 | 3496 // | +- L12 |
3494 // | | 3497 // | |
3495 // +-- S2 +- L20 (owning) | 3498 // +-- S2 +- L20 (owning) |
3496 // +- L21 | 3499 // +- L21 |
3497 // | 3500 // |
3498 // Occlusion: | 3501 // Occlusion: |
3499 // L12 occludes L11 (internal) | 3502 // L12 occludes L11 (internal) |
3500 // L20 occludes L10 (external) | 3503 // L20 occludes L10 (external) |
3501 // L21 occludes L20 (internal) | 3504 // L21 occludes L20 (internal) |
3502 | 3505 |
3503 LayerImpl* rootPtr; | 3506 LayerImpl* rootPtr; |
3504 LayerImpl* layerS1Ptr; | 3507 LayerImpl* layerS1Ptr; |
3505 LayerImpl* layerS2Ptr; | 3508 LayerImpl* layerS2Ptr; |
3506 | 3509 |
3507 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create
(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi
csContext>(); | 3510 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create
(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi
csContext>(); |
3508 | 3511 |
3509 IntSize rootSize(1000, 1000); | 3512 gfx::Size rootSize(1000, 1000); |
3510 | 3513 |
3511 myHostImpl->initializeRenderer(context.Pass()); | 3514 myHostImpl->initializeRenderer(context.Pass()); |
3512 myHostImpl->setViewportSize(IntSize(rootSize.width(), rootSize.height()), In
tSize(rootSize.width(), rootSize.height())); | 3515 myHostImpl->setViewportSize(gfx::Size(rootSize.width(), rootSize.height()),
gfx::Size(rootSize.width(), rootSize.height())); |
3513 | 3516 |
3514 scoped_ptr<LayerImpl> root = LayerImpl::create(1); | 3517 scoped_ptr<LayerImpl> root = LayerImpl::create(1); |
3515 rootPtr = root.get(); | 3518 rootPtr = root.get(); |
3516 | 3519 |
3517 root->setAnchorPoint(FloatPoint(0, 0)); | 3520 root->setAnchorPoint(gfx::PointF(0, 0)); |
3518 root->setPosition(FloatPoint(0, 0)); | 3521 root->setPosition(gfx::PointF(0, 0)); |
3519 root->setBounds(rootSize); | 3522 root->setBounds(rootSize); |
3520 root->setContentBounds(rootSize); | 3523 root->setContentBounds(rootSize); |
3521 root->setDrawsContent(true); | 3524 root->setDrawsContent(true); |
3522 root->setMasksToBounds(true); | 3525 root->setMasksToBounds(true); |
3523 myHostImpl->setRootLayer(root.Pass()); | 3526 myHostImpl->setRootLayer(root.Pass()); |
3524 | 3527 |
3525 addDrawingLayerTo(rootPtr, 2, IntRect(300, 300, 300, 300), &layerS1Ptr); | 3528 addDrawingLayerTo(rootPtr, 2, gfx::Rect(300, 300, 300, 300), &layerS1Ptr); |
3526 layerS1Ptr->setForceRenderSurface(true); | 3529 layerS1Ptr->setForceRenderSurface(true); |
3527 | 3530 |
3528 addDrawingLayerTo(layerS1Ptr, 3, IntRect(10, 10, 10, 10), 0); // L11 | 3531 addDrawingLayerTo(layerS1Ptr, 3, gfx::Rect(10, 10, 10, 10), 0); // L11 |
3529 addDrawingLayerTo(layerS1Ptr, 4, IntRect(0, 0, 30, 30), 0); // L12 | 3532 addDrawingLayerTo(layerS1Ptr, 4, gfx::Rect(0, 0, 30, 30), 0); // L12 |
3530 | 3533 |
3531 addDrawingLayerTo(rootPtr, 5, IntRect(550, 250, 300, 400), &layerS2Ptr); | 3534 addDrawingLayerTo(rootPtr, 5, gfx::Rect(550, 250, 300, 400), &layerS2Ptr); |
3532 layerS2Ptr->setForceRenderSurface(true); | 3535 layerS2Ptr->setForceRenderSurface(true); |
3533 | 3536 |
3534 addDrawingLayerTo(layerS2Ptr, 6, IntRect(20, 20, 5, 5), 0); // L21 | 3537 addDrawingLayerTo(layerS2Ptr, 6, gfx::Rect(20, 20, 5, 5), 0); // L21 |
3535 | 3538 |
3536 // Initial draw - must receive all quads | 3539 // Initial draw - must receive all quads |
3537 { | 3540 { |
3538 LayerTreeHostImpl::FrameData frame; | 3541 LayerTreeHostImpl::FrameData frame; |
3539 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3542 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
3540 | 3543 |
3541 // Must receive 3 render passes. | 3544 // 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. | 3545 // 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()); | 3546 ASSERT_EQ(3U, frame.renderPasses.size()); |
3544 | 3547 |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3589 myHostImpl->drawLayers(frame); | 3592 myHostImpl->drawLayers(frame); |
3590 myHostImpl->didDrawAllLayers(frame); | 3593 myHostImpl->didDrawAllLayers(frame); |
3591 } | 3594 } |
3592 } | 3595 } |
3593 | 3596 |
3594 TEST_P(LayerTreeHostImplTest, textureCachingWithScissor) | 3597 TEST_P(LayerTreeHostImplTest, textureCachingWithScissor) |
3595 { | 3598 { |
3596 Settings::setPartialSwapEnabled(false); | 3599 Settings::setPartialSwapEnabled(false); |
3597 | 3600 |
3598 LayerTreeSettings settings; | 3601 LayerTreeSettings settings; |
3599 settings.minimumOcclusionTrackingSize = IntSize(); | 3602 settings.minimumOcclusionTrackingSize = gfx::Size(); |
3600 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this); | 3603 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this); |
3601 | 3604 |
3602 /* | 3605 /* |
3603 Layers are created as follows: | 3606 Layers are created as follows: |
3604 | 3607 |
3605 +--------------------+ | 3608 +--------------------+ |
3606 | 1 | | 3609 | 1 | |
3607 | +-----------+ | | 3610 | +-----------+ | |
3608 | | 2 | | | 3611 | | 2 | | |
3609 | | +-------------------+ | 3612 | | +-------------------+ |
3610 | | | 3 | | 3613 | | | 3 | |
3611 | | +-------------------+ | 3614 | | +-------------------+ |
3612 | | | | | 3615 | | | | |
3613 | +-----------+ | | 3616 | +-----------+ | |
3614 | | | 3617 | | |
3615 | | | 3618 | | |
3616 +--------------------+ | 3619 +--------------------+ |
3617 | 3620 |
3618 Layers 1, 2 have render surfaces | 3621 Layers 1, 2 have render surfaces |
3619 */ | 3622 */ |
3620 scoped_ptr<LayerImpl> root = LayerImpl::create(1); | 3623 scoped_ptr<LayerImpl> root = LayerImpl::create(1); |
3621 scoped_ptr<TiledLayerImpl> child = TiledLayerImpl::create(2); | 3624 scoped_ptr<TiledLayerImpl> child = TiledLayerImpl::create(2); |
3622 scoped_ptr<LayerImpl> grandChild = LayerImpl::create(3); | 3625 scoped_ptr<LayerImpl> grandChild = LayerImpl::create(3); |
3623 | 3626 |
3624 IntRect rootRect(0, 0, 100, 100); | 3627 gfx::Rect rootRect(0, 0, 100, 100); |
3625 IntRect childRect(10, 10, 50, 50); | 3628 gfx::Rect childRect(10, 10, 50, 50); |
3626 IntRect grandChildRect(5, 5, 150, 150); | 3629 gfx::Rect grandChildRect(5, 5, 150, 150); |
3627 | 3630 |
3628 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create
(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi
csContext>(); | 3631 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create
(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi
csContext>(); |
3629 myHostImpl->initializeRenderer(context.Pass()); | 3632 myHostImpl->initializeRenderer(context.Pass()); |
3630 | 3633 |
3631 root->setAnchorPoint(FloatPoint(0, 0)); | 3634 root->setAnchorPoint(gfx::PointF(0, 0)); |
3632 root->setPosition(FloatPoint(rootRect.x(), rootRect.y())); | 3635 root->setPosition(gfx::PointF(rootRect.x(), rootRect.y())); |
3633 root->setBounds(IntSize(rootRect.width(), rootRect.height())); | 3636 root->setBounds(gfx::Size(rootRect.width(), rootRect.height())); |
3634 root->setContentBounds(root->bounds()); | 3637 root->setContentBounds(root->bounds()); |
3635 root->setDrawsContent(true); | 3638 root->setDrawsContent(true); |
3636 root->setMasksToBounds(true); | 3639 root->setMasksToBounds(true); |
3637 | 3640 |
3638 child->setAnchorPoint(FloatPoint(0, 0)); | 3641 child->setAnchorPoint(gfx::PointF(0, 0)); |
3639 child->setPosition(FloatPoint(childRect.x(), childRect.y())); | 3642 child->setPosition(gfx::PointF(childRect.x(), childRect.y())); |
3640 child->setOpacity(0.5); | 3643 child->setOpacity(0.5); |
3641 child->setBounds(IntSize(childRect.width(), childRect.height())); | 3644 child->setBounds(gfx::Size(childRect.width(), childRect.height())); |
3642 child->setContentBounds(child->bounds()); | 3645 child->setContentBounds(child->bounds()); |
3643 child->setDrawsContent(true); | 3646 child->setDrawsContent(true); |
3644 child->setSkipsDraw(false); | 3647 child->setSkipsDraw(false); |
3645 | 3648 |
3646 // child layer has 10x10 tiles. | 3649 // child layer has 10x10 tiles. |
3647 scoped_ptr<LayerTilingData> tiler = LayerTilingData::create(IntSize(10, 10),
LayerTilingData::HasBorderTexels); | 3650 scoped_ptr<LayerTilingData> tiler = LayerTilingData::create(gfx::Size(10, 10
), LayerTilingData::HasBorderTexels); |
3648 tiler->setBounds(child->contentBounds()); | 3651 tiler->setBounds(child->contentBounds()); |
3649 child->setTilingData(*tiler.get()); | 3652 child->setTilingData(*tiler.get()); |
3650 | 3653 |
3651 grandChild->setAnchorPoint(FloatPoint(0, 0)); | 3654 grandChild->setAnchorPoint(gfx::PointF(0, 0)); |
3652 grandChild->setPosition(IntPoint(grandChildRect.x(), grandChildRect.y())); | 3655 grandChild->setPosition(gfx::Point(grandChildRect.x(), grandChildRect.y())); |
3653 grandChild->setBounds(IntSize(grandChildRect.width(), grandChildRect.height(
))); | 3656 grandChild->setBounds(gfx::Size(grandChildRect.width(), grandChildRect.heigh
t())); |
3654 grandChild->setContentBounds(grandChild->bounds()); | 3657 grandChild->setContentBounds(grandChild->bounds()); |
3655 grandChild->setDrawsContent(true); | 3658 grandChild->setDrawsContent(true); |
3656 | 3659 |
3657 TiledLayerImpl* childPtr = child.get(); | 3660 TiledLayerImpl* childPtr = child.get(); |
3658 RenderPass::Id childPassId(childPtr->id(), 0); | 3661 RenderPass::Id childPassId(childPtr->id(), 0); |
3659 | 3662 |
3660 child->addChild(grandChild.Pass()); | 3663 child->addChild(grandChild.Pass()); |
3661 root->addChild(child.PassAs<LayerImpl>()); | 3664 root->addChild(child.PassAs<LayerImpl>()); |
3662 myHostImpl->setRootLayer(root.Pass()); | 3665 myHostImpl->setRootLayer(root.Pass()); |
3663 myHostImpl->setViewportSize(rootRect.size(), rootRect.size()); | 3666 myHostImpl->setViewportSize(rootRect.size(), rootRect.size()); |
(...skipping 14 matching lines...) Expand all Loading... |
3678 LayerTreeHostImpl::FrameData frame; | 3681 LayerTreeHostImpl::FrameData frame; |
3679 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3682 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
3680 myHostImpl->drawLayers(frame); | 3683 myHostImpl->drawLayers(frame); |
3681 myHostImpl->didDrawAllLayers(frame); | 3684 myHostImpl->didDrawAllLayers(frame); |
3682 } | 3685 } |
3683 | 3686 |
3684 // We should still have cached textures for surface 2 after drawing with no
damage. | 3687 // We should still have cached textures for surface 2 after drawing with no
damage. |
3685 EXPECT_TRUE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(child
PassId)); | 3688 EXPECT_TRUE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(child
PassId)); |
3686 | 3689 |
3687 // Damage a single tile of surface 2. | 3690 // Damage a single tile of surface 2. |
3688 childPtr->setUpdateRect(IntRect(10, 10, 10, 10)); | 3691 childPtr->setUpdateRect(gfx::Rect(10, 10, 10, 10)); |
3689 | 3692 |
3690 { | 3693 { |
3691 LayerTreeHostImpl::FrameData frame; | 3694 LayerTreeHostImpl::FrameData frame; |
3692 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3695 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
3693 myHostImpl->drawLayers(frame); | 3696 myHostImpl->drawLayers(frame); |
3694 myHostImpl->didDrawAllLayers(frame); | 3697 myHostImpl->didDrawAllLayers(frame); |
3695 } | 3698 } |
3696 | 3699 |
3697 // We should have a cached texture for surface 2 again even though it was da
maged. | 3700 // We should have a cached texture for surface 2 again even though it was da
maged. |
3698 EXPECT_TRUE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(child
PassId)); | 3701 EXPECT_TRUE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(child
PassId)); |
3699 } | 3702 } |
3700 | 3703 |
3701 TEST_P(LayerTreeHostImplTest, surfaceTextureCaching) | 3704 TEST_P(LayerTreeHostImplTest, surfaceTextureCaching) |
3702 { | 3705 { |
3703 Settings::setPartialSwapEnabled(true); | 3706 Settings::setPartialSwapEnabled(true); |
3704 | 3707 |
3705 LayerTreeSettings settings; | 3708 LayerTreeSettings settings; |
3706 settings.minimumOcclusionTrackingSize = IntSize(); | 3709 settings.minimumOcclusionTrackingSize = gfx::Size(); |
3707 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this); | 3710 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this); |
3708 | 3711 |
3709 LayerImpl* rootPtr; | 3712 LayerImpl* rootPtr; |
3710 LayerImpl* intermediateLayerPtr; | 3713 LayerImpl* intermediateLayerPtr; |
3711 LayerImpl* surfaceLayerPtr; | 3714 LayerImpl* surfaceLayerPtr; |
3712 LayerImpl* childPtr; | 3715 LayerImpl* childPtr; |
3713 | 3716 |
3714 setupLayersForTextureCaching(myHostImpl.get(), rootPtr, intermediateLayerPtr
, surfaceLayerPtr, childPtr, IntSize(100, 100)); | 3717 setupLayersForTextureCaching(myHostImpl.get(), rootPtr, intermediateLayerPtr
, surfaceLayerPtr, childPtr, gfx::Size(100, 100)); |
3715 | 3718 |
3716 { | 3719 { |
3717 LayerTreeHostImpl::FrameData frame; | 3720 LayerTreeHostImpl::FrameData frame; |
3718 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3721 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
3719 | 3722 |
3720 // Must receive two render passes, each with one quad | 3723 // Must receive two render passes, each with one quad |
3721 ASSERT_EQ(2U, frame.renderPasses.size()); | 3724 ASSERT_EQ(2U, frame.renderPasses.size()); |
3722 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3725 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
3723 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); | 3726 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); |
3724 | 3727 |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3857 myHostImpl->drawLayers(frame); | 3860 myHostImpl->drawLayers(frame); |
3858 myHostImpl->didDrawAllLayers(frame); | 3861 myHostImpl->didDrawAllLayers(frame); |
3859 } | 3862 } |
3860 } | 3863 } |
3861 | 3864 |
3862 TEST_P(LayerTreeHostImplTest, surfaceTextureCachingNoPartialSwap) | 3865 TEST_P(LayerTreeHostImplTest, surfaceTextureCachingNoPartialSwap) |
3863 { | 3866 { |
3864 Settings::setPartialSwapEnabled(false); | 3867 Settings::setPartialSwapEnabled(false); |
3865 | 3868 |
3866 LayerTreeSettings settings; | 3869 LayerTreeSettings settings; |
3867 settings.minimumOcclusionTrackingSize = IntSize(); | 3870 settings.minimumOcclusionTrackingSize = gfx::Size(); |
3868 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this); | 3871 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this); |
3869 | 3872 |
3870 LayerImpl* rootPtr; | 3873 LayerImpl* rootPtr; |
3871 LayerImpl* intermediateLayerPtr; | 3874 LayerImpl* intermediateLayerPtr; |
3872 LayerImpl* surfaceLayerPtr; | 3875 LayerImpl* surfaceLayerPtr; |
3873 LayerImpl* childPtr; | 3876 LayerImpl* childPtr; |
3874 | 3877 |
3875 setupLayersForTextureCaching(myHostImpl.get(), rootPtr, intermediateLayerPtr
, surfaceLayerPtr, childPtr, IntSize(100, 100)); | 3878 setupLayersForTextureCaching(myHostImpl.get(), rootPtr, intermediateLayerPtr
, surfaceLayerPtr, childPtr, gfx::Size(100, 100)); |
3876 | 3879 |
3877 { | 3880 { |
3878 LayerTreeHostImpl::FrameData frame; | 3881 LayerTreeHostImpl::FrameData frame; |
3879 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3882 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
3880 | 3883 |
3881 // Must receive two render passes, each with one quad | 3884 // Must receive two render passes, each with one quad |
3882 ASSERT_EQ(2U, frame.renderPasses.size()); | 3885 ASSERT_EQ(2U, frame.renderPasses.size()); |
3883 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3886 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
3884 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); | 3887 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); |
3885 | 3888 |
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4065 | 4068 |
4066 return renderer.Pass(); | 4069 return renderer.Pass(); |
4067 } | 4070 } |
4068 | 4071 |
4069 void clearCachedTextures() { m_textures.clear(); } | 4072 void clearCachedTextures() { m_textures.clear(); } |
4070 void setHaveCachedResourcesForRenderPassId(RenderPass::Id id) { m_textures.i
nsert(id); } | 4073 void setHaveCachedResourcesForRenderPassId(RenderPass::Id id) { m_textures.i
nsert(id); } |
4071 | 4074 |
4072 virtual bool haveCachedResourcesForRenderPassId(RenderPass::Id id) const OVE
RRIDE { return m_textures.count(id); } | 4075 virtual bool haveCachedResourcesForRenderPassId(RenderPass::Id id) const OVE
RRIDE { return m_textures.count(id); } |
4073 | 4076 |
4074 // RendererClient implementation. | 4077 // RendererClient implementation. |
4075 virtual const IntSize& deviceViewportSize() const OVERRIDE { return m_viewpo
rtSize; } | 4078 virtual const gfx::Size& deviceViewportSize() const OVERRIDE { return m_view
portSize; } |
4076 virtual const LayerTreeSettings& settings() const OVERRIDE { return m_settin
gs; } | 4079 virtual const LayerTreeSettings& settings() const OVERRIDE { return m_settin
gs; } |
4077 virtual void didLoseContext() OVERRIDE { } | 4080 virtual void didLoseContext() OVERRIDE { } |
4078 virtual void onSwapBuffersComplete() OVERRIDE { } | 4081 virtual void onSwapBuffersComplete() OVERRIDE { } |
4079 virtual void setFullRootLayerDamage() OVERRIDE { } | 4082 virtual void setFullRootLayerDamage() OVERRIDE { } |
4080 virtual void setManagedMemoryPolicy(const ManagedMemoryPolicy& policy) OVERR
IDE { } | 4083 virtual void setManagedMemoryPolicy(const ManagedMemoryPolicy& policy) OVERR
IDE { } |
4081 virtual void enforceManagedMemoryPolicy(const ManagedMemoryPolicy& policy) O
VERRIDE { } | 4084 virtual void enforceManagedMemoryPolicy(const ManagedMemoryPolicy& policy) O
VERRIDE { } |
4082 | 4085 |
4083 protected: | 4086 protected: |
4084 TestRenderer(ResourceProvider* resourceProvider) : GLRenderer(this, resource
Provider) { } | 4087 TestRenderer(ResourceProvider* resourceProvider) : GLRenderer(this, resource
Provider) { } |
4085 | 4088 |
4086 private: | 4089 private: |
4087 LayerTreeSettings m_settings; | 4090 LayerTreeSettings m_settings; |
4088 IntSize m_viewportSize; | 4091 gfx::Size m_viewportSize; |
4089 base::hash_set<RenderPass::Id> m_textures; | 4092 base::hash_set<RenderPass::Id> m_textures; |
4090 }; | 4093 }; |
4091 | 4094 |
4092 static void configureRenderPassTestData(const char* testScript, RenderPassRemova
lTestData& testData, TestRenderer* renderer) | 4095 static void configureRenderPassTestData(const char* testScript, RenderPassRemova
lTestData& testData, TestRenderer* renderer) |
4093 { | 4096 { |
4094 renderer->clearCachedTextures(); | 4097 renderer->clearCachedTextures(); |
4095 | 4098 |
4096 // One shared state for all quads - we don't need the correct details | 4099 // One shared state for all quads - we don't need the correct details |
4097 testData.sharedQuadState = SharedQuadState::create(WebTransformationMatrix()
, IntRect(), IntRect(), 1.0, true); | 4100 testData.sharedQuadState = SharedQuadState::create(WebTransformationMatrix()
, gfx::Rect(), gfx::Rect(), 1.0, true); |
4098 | 4101 |
4099 const char* currentChar = testScript; | 4102 const char* currentChar = testScript; |
4100 | 4103 |
4101 // Pre-create root pass | 4104 // Pre-create root pass |
4102 RenderPass::Id rootRenderPassId = RenderPass::Id(testScript[0], testScript[1
]); | 4105 RenderPass::Id rootRenderPassId = RenderPass::Id(testScript[0], testScript[1
]); |
4103 testData.renderPassCache.add(rootRenderPassId, TestRenderPass::create(rootRe
nderPassId, IntRect(), WebTransformationMatrix())); | 4106 testData.renderPassCache.add(rootRenderPassId, TestRenderPass::create(rootRe
nderPassId, gfx::Rect(), WebTransformationMatrix())); |
4104 while (*currentChar) { | 4107 while (*currentChar) { |
4105 int layerId = *currentChar; | 4108 int layerId = *currentChar; |
4106 currentChar++; | 4109 currentChar++; |
4107 ASSERT_TRUE(currentChar); | 4110 ASSERT_TRUE(currentChar); |
4108 int index = *currentChar; | 4111 int index = *currentChar; |
4109 currentChar++; | 4112 currentChar++; |
4110 | 4113 |
4111 RenderPass::Id renderPassId = RenderPass::Id(layerId, index); | 4114 RenderPass::Id renderPassId = RenderPass::Id(layerId, index); |
4112 | 4115 |
4113 bool isReplica = false; | 4116 bool isReplica = false; |
4114 if (!testData.renderPassCache.contains(renderPassId)) | 4117 if (!testData.renderPassCache.contains(renderPassId)) |
4115 isReplica = true; | 4118 isReplica = true; |
4116 | 4119 |
4117 scoped_ptr<TestRenderPass> renderPass = testData.renderPassCache.take(re
nderPassId); | 4120 scoped_ptr<TestRenderPass> renderPass = testData.renderPassCache.take(re
nderPassId); |
4118 | 4121 |
4119 // Cycle through quad data and create all quads | 4122 // Cycle through quad data and create all quads |
4120 while (*currentChar && *currentChar != '\n') { | 4123 while (*currentChar && *currentChar != '\n') { |
4121 if (*currentChar == 's') { | 4124 if (*currentChar == 's') { |
4122 // Solid color draw quad | 4125 // Solid color draw quad |
4123 scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::create
(testData.sharedQuadState.get(), IntRect(0, 0, 10, 10), SK_ColorWHITE); | 4126 scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::create
(testData.sharedQuadState.get(), gfx::Rect(0, 0, 10, 10), SK_ColorWHITE); |
4124 | 4127 |
4125 renderPass->appendQuad(quad.PassAs<DrawQuad>()); | 4128 renderPass->appendQuad(quad.PassAs<DrawQuad>()); |
4126 currentChar++; | 4129 currentChar++; |
4127 } else if ((*currentChar >= 'A') && (*currentChar <= 'Z')) { | 4130 } else if ((*currentChar >= 'A') && (*currentChar <= 'Z')) { |
4128 // RenderPass draw quad | 4131 // RenderPass draw quad |
4129 int layerId = *currentChar; | 4132 int layerId = *currentChar; |
4130 currentChar++; | 4133 currentChar++; |
4131 ASSERT_TRUE(currentChar); | 4134 ASSERT_TRUE(currentChar); |
4132 int index = *currentChar; | 4135 int index = *currentChar; |
4133 currentChar++; | 4136 currentChar++; |
(...skipping 16 matching lines...) Expand all Loading... |
4150 currentChar++; | 4153 currentChar++; |
4151 } | 4154 } |
4152 if (*currentChar == ']') | 4155 if (*currentChar == ']') |
4153 currentChar++; | 4156 currentChar++; |
4154 } | 4157 } |
4155 | 4158 |
4156 if (testData.renderPassCache.find(newRenderPassId) == testData.r
enderPassCache.end()) { | 4159 if (testData.renderPassCache.find(newRenderPassId) == testData.r
enderPassCache.end()) { |
4157 if (hasTexture) | 4160 if (hasTexture) |
4158 renderer->setHaveCachedResourcesForRenderPassId(newRende
rPassId); | 4161 renderer->setHaveCachedResourcesForRenderPassId(newRende
rPassId); |
4159 | 4162 |
4160 testData.renderPassCache.add(newRenderPassId, TestRenderPass
::create(newRenderPassId, IntRect(), WebTransformationMatrix())); | 4163 testData.renderPassCache.add(newRenderPassId, TestRenderPass
::create(newRenderPassId, gfx::Rect(), WebTransformationMatrix())); |
4161 } | 4164 } |
4162 | 4165 |
4163 IntRect quadRect = IntRect(0, 0, 1, 1); | 4166 gfx::Rect quadRect = gfx::Rect(0, 0, 1, 1); |
4164 IntRect contentsChangedRect = contentsChanged ? quadRect : IntRe
ct(); | 4167 gfx::Rect contentsChangedRect = contentsChanged ? quadRect : gfx
::Rect(); |
4165 scoped_ptr<RenderPassDrawQuad> quad = RenderPassDrawQuad::create
(testData.sharedQuadState.get(), quadRect, newRenderPassId, isReplica, 1, conten
tsChangedRect, 1, 1, 0, 0); | 4168 scoped_ptr<RenderPassDrawQuad> quad = RenderPassDrawQuad::create
(testData.sharedQuadState.get(), quadRect, newRenderPassId, isReplica, 1, conten
tsChangedRect, 1, 1, 0, 0); |
4166 renderPass->appendQuad(quad.PassAs<DrawQuad>()); | 4169 renderPass->appendQuad(quad.PassAs<DrawQuad>()); |
4167 } | 4170 } |
4168 } | 4171 } |
4169 testData.renderPasses.insert(testData.renderPasses.begin(), renderPass.g
et()); | 4172 testData.renderPasses.insert(testData.renderPasses.begin(), renderPass.g
et()); |
4170 testData.renderPassesById.add(renderPassId, renderPass.PassAs<RenderPass
>()); | 4173 testData.renderPassesById.add(renderPassId, renderPass.PassAs<RenderPass
>()); |
4171 if (*currentChar) | 4174 if (*currentChar) |
4172 currentChar++; | 4175 currentChar++; |
4173 } | 4176 } |
4174 } | 4177 } |
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4375 verifyRenderPassTestData(removeRenderPassesCases[testCaseIndex], testDat
a); | 4378 verifyRenderPassTestData(removeRenderPassesCases[testCaseIndex], testDat
a); |
4376 testCaseIndex++; | 4379 testCaseIndex++; |
4377 } | 4380 } |
4378 } | 4381 } |
4379 | 4382 |
4380 INSTANTIATE_TEST_CASE_P(LayerTreeHostImplTests, | 4383 INSTANTIATE_TEST_CASE_P(LayerTreeHostImplTests, |
4381 LayerTreeHostImplTest, | 4384 LayerTreeHostImplTest, |
4382 ::testing::Values(false, true)); | 4385 ::testing::Values(false, true)); |
4383 | 4386 |
4384 } // namespace | 4387 } // namespace |
OLD | NEW |