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 "cc/layer_tree_host_impl.h" | 5 #include "cc/layer_tree_host_impl.h" |
6 | 6 |
7 #include <cmath> | 7 #include <cmath> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
11 #include "base/hash_tables.h" | 11 #include "base/hash_tables.h" |
12 #include "cc/delegated_renderer_layer_impl.h" | 12 #include "cc/delegated_renderer_layer_impl.h" |
13 #include "cc/gl_renderer.h" | 13 #include "cc/gl_renderer.h" |
14 #include "cc/heads_up_display_layer_impl.h" | 14 #include "cc/heads_up_display_layer_impl.h" |
15 #include "cc/io_surface_layer_impl.h" | 15 #include "cc/io_surface_layer_impl.h" |
16 #include "cc/layer_impl.h" | 16 #include "cc/layer_impl.h" |
17 #include "cc/layer_tiling_data.h" | 17 #include "cc/layer_tiling_data.h" |
18 #include "cc/math_util.h" | 18 #include "cc/math_util.h" |
19 #include "cc/quad_sink.h" | 19 #include "cc/quad_sink.h" |
20 #include "cc/render_pass_draw_quad.h" | 20 #include "cc/render_pass_draw_quad.h" |
21 #include "cc/scrollbar_geometry_fixed_thumb.h" | 21 #include "cc/scrollbar_geometry_fixed_thumb.h" |
22 #include "cc/scrollbar_layer_impl.h" | 22 #include "cc/scrollbar_layer_impl.h" |
23 #include "cc/single_thread_proxy.h" | 23 #include "cc/single_thread_proxy.h" |
24 #include "cc/solid_color_draw_quad.h" | 24 #include "cc/solid_color_draw_quad.h" |
25 #include "cc/test/animation_test_common.h" | 25 #include "cc/test/animation_test_common.h" |
| 26 #include "cc/test/fake_output_surface.h" |
26 #include "cc/test/fake_proxy.h" | 27 #include "cc/test/fake_proxy.h" |
27 #include "cc/test/fake_web_compositor_output_surface.h" | |
28 #include "cc/test/fake_web_graphics_context_3d.h" | 28 #include "cc/test/fake_web_graphics_context_3d.h" |
29 #include "cc/test/fake_web_scrollbar_theme_geometry.h" | 29 #include "cc/test/fake_web_scrollbar_theme_geometry.h" |
30 #include "cc/test/geometry_test_utils.h" | 30 #include "cc/test/geometry_test_utils.h" |
31 #include "cc/test/layer_test_common.h" | 31 #include "cc/test/layer_test_common.h" |
32 #include "cc/test/render_pass_test_common.h" | 32 #include "cc/test/render_pass_test_common.h" |
33 #include "cc/texture_draw_quad.h" | 33 #include "cc/texture_draw_quad.h" |
34 #include "cc/texture_layer_impl.h" | 34 #include "cc/texture_layer_impl.h" |
35 #include "cc/tile_draw_quad.h" | 35 #include "cc/tile_draw_quad.h" |
36 #include "cc/tiled_layer_impl.h" | 36 #include "cc/tiled_layer_impl.h" |
37 #include "cc/video_layer_impl.h" | 37 #include "cc/video_layer_impl.h" |
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
202 } | 202 } |
203 | 203 |
204 void pinchZoomPanViewportForcesCommitRedraw(const float deviceScaleFactor); | 204 void pinchZoomPanViewportForcesCommitRedraw(const float deviceScaleFactor); |
205 void pinchZoomPanViewportTest(const float deviceScaleFactor); | 205 void pinchZoomPanViewportTest(const float deviceScaleFactor); |
206 void pinchZoomPanViewportAndScrollTest(const float deviceScaleFactor); | 206 void pinchZoomPanViewportAndScrollTest(const float deviceScaleFactor); |
207 void pinchZoomPanViewportAndScrollBoundaryTest(const float deviceScaleFactor
); | 207 void pinchZoomPanViewportAndScrollBoundaryTest(const float deviceScaleFactor
); |
208 | 208 |
209 protected: | 209 protected: |
210 scoped_ptr<OutputSurface> createOutputSurface() | 210 scoped_ptr<OutputSurface> createOutputSurface() |
211 { | 211 { |
212 return FakeWebCompositorOutputSurface::create(scoped_ptr<WebKit::WebGrap
hicsContext3D>(new FakeWebGraphicsContext3D)).PassAs<OutputSurface>(); | 212 return FakeOutputSurface::Create3d(scoped_ptr<WebKit::WebGraphicsContext
3D>(new FakeWebGraphicsContext3D)).PassAs<OutputSurface>(); |
213 } | 213 } |
214 | 214 |
215 FakeProxy m_proxy; | 215 FakeProxy m_proxy; |
216 DebugScopedSetImplThread m_alwaysImplThread; | 216 DebugScopedSetImplThread m_alwaysImplThread; |
217 DebugScopedSetMainThreadBlocked m_alwaysMainThreadBlocked; | 217 DebugScopedSetMainThreadBlocked m_alwaysMainThreadBlocked; |
218 | 218 |
219 scoped_ptr<LayerTreeHostImpl> m_hostImpl; | 219 scoped_ptr<LayerTreeHostImpl> m_hostImpl; |
220 bool m_onCanDrawStateChangedCalled; | 220 bool m_onCanDrawStateChangedCalled; |
221 bool m_didRequestCommit; | 221 bool m_didRequestCommit; |
222 bool m_didRequestRedraw; | 222 bool m_didRequestRedraw; |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
371 // We should not crash when trying to scroll an empty layer tree. | 371 // We should not crash when trying to scroll an empty layer tree. |
372 EXPECT_EQ(m_hostImpl->scrollBegin(gfx::Point(0, 0), InputHandlerClient::Whee
l), InputHandlerClient::ScrollIgnored); | 372 EXPECT_EQ(m_hostImpl->scrollBegin(gfx::Point(0, 0), InputHandlerClient::Whee
l), InputHandlerClient::ScrollIgnored); |
373 } | 373 } |
374 | 374 |
375 TEST_P(LayerTreeHostImplTest, scrollWithoutRenderer) | 375 TEST_P(LayerTreeHostImplTest, scrollWithoutRenderer) |
376 { | 376 { |
377 LayerTreeSettings settings; | 377 LayerTreeSettings settings; |
378 m_hostImpl = LayerTreeHostImpl::create(settings, this, &m_proxy); | 378 m_hostImpl = LayerTreeHostImpl::create(settings, this, &m_proxy); |
379 | 379 |
380 // Initialization will fail here. | 380 // Initialization will fail here. |
381 m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurface::create(scoped
_ptr<WebKit::WebGraphicsContext3D>(new FakeWebGraphicsContext3DMakeCurrentFails)
).PassAs<OutputSurface>()); | 381 m_hostImpl->initializeRenderer(FakeOutputSurface::Create3d(scoped_ptr<WebKit
::WebGraphicsContext3D>(new FakeWebGraphicsContext3DMakeCurrentFails)).PassAs<Ou
tputSurface>()); |
382 m_hostImpl->setViewportSize(gfx::Size(10, 10), gfx::Size(10, 10)); | 382 m_hostImpl->setViewportSize(gfx::Size(10, 10), gfx::Size(10, 10)); |
383 | 383 |
384 setupScrollAndContentsLayers(gfx::Size(100, 100)); | 384 setupScrollAndContentsLayers(gfx::Size(100, 100)); |
385 | 385 |
386 // We should not crash when trying to scroll after the renderer initializati
on fails. | 386 // We should not crash when trying to scroll after the renderer initializati
on fails. |
387 EXPECT_EQ(m_hostImpl->scrollBegin(gfx::Point(0, 0), InputHandlerClient::Whee
l), InputHandlerClient::ScrollIgnored); | 387 EXPECT_EQ(m_hostImpl->scrollBegin(gfx::Point(0, 0), InputHandlerClient::Whee
l), InputHandlerClient::ScrollIgnored); |
388 } | 388 } |
389 | 389 |
390 TEST_P(LayerTreeHostImplTest, replaceTreeWhileScrolling) | 390 TEST_P(LayerTreeHostImplTest, replaceTreeWhileScrolling) |
391 { | 391 { |
(...skipping 1600 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1992 static scoped_ptr<LayerImpl> create(LayerTreeHostImpl* hostImpl, int id) { r
eturn scoped_ptr<LayerImpl>(new FakeDrawableLayerImpl(hostImpl, id)); } | 1992 static scoped_ptr<LayerImpl> create(LayerTreeHostImpl* hostImpl, int id) { r
eturn scoped_ptr<LayerImpl>(new FakeDrawableLayerImpl(hostImpl, id)); } |
1993 protected: | 1993 protected: |
1994 FakeDrawableLayerImpl(LayerTreeHostImpl* hostImpl, int id) : LayerImpl(hostI
mpl, id) { } | 1994 FakeDrawableLayerImpl(LayerTreeHostImpl* hostImpl, int id) : LayerImpl(hostI
mpl, id) { } |
1995 }; | 1995 }; |
1996 | 1996 |
1997 // Only reshape when we know we are going to draw. Otherwise, the reshape | 1997 // Only reshape when we know we are going to draw. Otherwise, the reshape |
1998 // can leave the window at the wrong size if we never draw and the proper | 1998 // can leave the window at the wrong size if we never draw and the proper |
1999 // viewport size is never set. | 1999 // viewport size is never set. |
2000 TEST_P(LayerTreeHostImplTest, reshapeNotCalledUntilDraw) | 2000 TEST_P(LayerTreeHostImplTest, reshapeNotCalledUntilDraw) |
2001 { | 2001 { |
2002 scoped_ptr<OutputSurface> outputSurface = FakeWebCompositorOutputSurface::cr
eate(scoped_ptr<WebKit::WebGraphicsContext3D>(new ReshapeTrackerContext)).PassAs
<OutputSurface>(); | 2002 scoped_ptr<OutputSurface> outputSurface = FakeOutputSurface::Create3d(scoped
_ptr<WebKit::WebGraphicsContext3D>(new ReshapeTrackerContext)).PassAs<OutputSurf
ace>(); |
2003 ReshapeTrackerContext* reshapeTracker = static_cast<ReshapeTrackerContext*>(
outputSurface->context3D()); | 2003 ReshapeTrackerContext* reshapeTracker = static_cast<ReshapeTrackerContext*>(
outputSurface->Context3D()); |
2004 m_hostImpl->initializeRenderer(outputSurface.Pass()); | 2004 m_hostImpl->initializeRenderer(outputSurface.Pass()); |
2005 | 2005 |
2006 scoped_ptr<LayerImpl> root = FakeDrawableLayerImpl::create(m_hostImpl.get(),
1); | 2006 scoped_ptr<LayerImpl> root = FakeDrawableLayerImpl::create(m_hostImpl.get(),
1); |
2007 root->setAnchorPoint(gfx::PointF(0, 0)); | 2007 root->setAnchorPoint(gfx::PointF(0, 0)); |
2008 root->setBounds(gfx::Size(10, 10)); | 2008 root->setBounds(gfx::Size(10, 10)); |
2009 root->setDrawsContent(true); | 2009 root->setDrawsContent(true); |
2010 m_hostImpl->setRootLayer(root.Pass()); | 2010 m_hostImpl->setRootLayer(root.Pass()); |
2011 EXPECT_FALSE(reshapeTracker->reshapeCalled()); | 2011 EXPECT_FALSE(reshapeTracker->reshapeCalled()); |
2012 | 2012 |
2013 LayerTreeHostImpl::FrameData frame; | 2013 LayerTreeHostImpl::FrameData frame; |
(...skipping 21 matching lines...) Expand all Loading... |
2035 gfx::Rect partialSwapRect() const { return m_partialSwapRect; } | 2035 gfx::Rect partialSwapRect() const { return m_partialSwapRect; } |
2036 | 2036 |
2037 private: | 2037 private: |
2038 gfx::Rect m_partialSwapRect; | 2038 gfx::Rect m_partialSwapRect; |
2039 }; | 2039 }; |
2040 | 2040 |
2041 // Make sure damage tracking propagates all the way to the graphics context, | 2041 // Make sure damage tracking propagates all the way to the graphics context, |
2042 // where it should request to swap only the subBuffer that is damaged. | 2042 // where it should request to swap only the subBuffer that is damaged. |
2043 TEST_P(LayerTreeHostImplTest, partialSwapReceivesDamageRect) | 2043 TEST_P(LayerTreeHostImplTest, partialSwapReceivesDamageRect) |
2044 { | 2044 { |
2045 scoped_ptr<OutputSurface> outputSurface = FakeWebCompositorOutputSurface::cr
eate(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapTrackerContext)).Pa
ssAs<OutputSurface>(); | 2045 scoped_ptr<OutputSurface> outputSurface = FakeOutputSurface::Create3d(scoped
_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapTrackerContext)).PassAs<Output
Surface>(); |
2046 PartialSwapTrackerContext* partialSwapTracker = static_cast<PartialSwapTrack
erContext*>(outputSurface->context3D()); | 2046 PartialSwapTrackerContext* partialSwapTracker = static_cast<PartialSwapTrack
erContext*>(outputSurface->Context3D()); |
2047 | 2047 |
2048 // This test creates its own LayerTreeHostImpl, so | 2048 // This test creates its own LayerTreeHostImpl, so |
2049 // that we can force partial swap enabled. | 2049 // that we can force partial swap enabled. |
2050 LayerTreeSettings settings; | 2050 LayerTreeSettings settings; |
2051 settings.partialSwapEnabled = true; | 2051 settings.partialSwapEnabled = true; |
2052 scoped_ptr<LayerTreeHostImpl> layerTreeHostImpl = LayerTreeHostImpl::create(
settings, this, &m_proxy); | 2052 scoped_ptr<LayerTreeHostImpl> layerTreeHostImpl = LayerTreeHostImpl::create(
settings, this, &m_proxy); |
2053 layerTreeHostImpl->initializeRenderer(outputSurface.Pass()); | 2053 layerTreeHostImpl->initializeRenderer(outputSurface.Pass()); |
2054 layerTreeHostImpl->setViewportSize(gfx::Size(500, 500), gfx::Size(500, 500))
; | 2054 layerTreeHostImpl->setViewportSize(gfx::Size(500, 500), gfx::Size(500, 500))
; |
2055 | 2055 |
2056 scoped_ptr<LayerImpl> root = FakeDrawableLayerImpl::create(m_hostImpl.get(),
1); | 2056 scoped_ptr<LayerImpl> root = FakeDrawableLayerImpl::create(m_hostImpl.get(),
1); |
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2250 EXPECT_CALL(*m_context, enable(GL_SCISSOR_TEST)) | 2250 EXPECT_CALL(*m_context, enable(GL_SCISSOR_TEST)) |
2251 .Times(0); | 2251 .Times(0); |
2252 | 2252 |
2253 EXPECT_CALL(*m_context, scissor(_, _, _, _)) | 2253 EXPECT_CALL(*m_context, scissor(_, _, _, _)) |
2254 .Times(0); | 2254 .Times(0); |
2255 } | 2255 } |
2256 }; | 2256 }; |
2257 | 2257 |
2258 TEST_P(LayerTreeHostImplTest, noPartialSwap) | 2258 TEST_P(LayerTreeHostImplTest, noPartialSwap) |
2259 { | 2259 { |
2260 scoped_ptr<OutputSurface> outputSurface = FakeWebCompositorOutputSurface::cr
eate(scoped_ptr<WebGraphicsContext3D>(new MockContext)).PassAs<OutputSurface>(); | 2260 scoped_ptr<OutputSurface> outputSurface = FakeOutputSurface::Create3d(scoped
_ptr<WebGraphicsContext3D>(new MockContext)).PassAs<OutputSurface>(); |
2261 MockContext* mockContext = static_cast<MockContext*>(outputSurface->context3
D()); | 2261 MockContext* mockContext = static_cast<MockContext*>(outputSurface->Context3
D()); |
2262 MockContextHarness harness(mockContext); | 2262 MockContextHarness harness(mockContext); |
2263 | 2263 |
2264 // Run test case | 2264 // Run test case |
2265 createLayerTreeHost(false, outputSurface.Pass()); | 2265 createLayerTreeHost(false, outputSurface.Pass()); |
2266 setupRootLayerImpl(FakeLayerWithQuads::create(m_hostImpl.get(), 1)); | 2266 setupRootLayerImpl(FakeLayerWithQuads::create(m_hostImpl.get(), 1)); |
2267 | 2267 |
2268 // without partial swap, and no clipping, no scissor is set. | 2268 // without partial swap, and no clipping, no scissor is set. |
2269 harness.mustDrawSolidQuad(); | 2269 harness.mustDrawSolidQuad(); |
2270 harness.mustSetNoScissor(); | 2270 harness.mustSetNoScissor(); |
2271 { | 2271 { |
(...skipping 12 matching lines...) Expand all Loading... |
2284 LayerTreeHostImpl::FrameData frame; | 2284 LayerTreeHostImpl::FrameData frame; |
2285 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); | 2285 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
2286 m_hostImpl->drawLayers(frame); | 2286 m_hostImpl->drawLayers(frame); |
2287 m_hostImpl->didDrawAllLayers(frame); | 2287 m_hostImpl->didDrawAllLayers(frame); |
2288 } | 2288 } |
2289 Mock::VerifyAndClearExpectations(&mockContext); | 2289 Mock::VerifyAndClearExpectations(&mockContext); |
2290 } | 2290 } |
2291 | 2291 |
2292 TEST_P(LayerTreeHostImplTest, partialSwap) | 2292 TEST_P(LayerTreeHostImplTest, partialSwap) |
2293 { | 2293 { |
2294 scoped_ptr<OutputSurface> outputSurface = FakeWebCompositorOutputSurface::cr
eate(scoped_ptr<WebKit::WebGraphicsContext3D>(new MockContext)).PassAs<OutputSur
face>(); | 2294 scoped_ptr<OutputSurface> outputSurface = FakeOutputSurface::Create3d(scoped
_ptr<WebKit::WebGraphicsContext3D>(new MockContext)).PassAs<OutputSurface>(); |
2295 MockContext* mockContext = static_cast<MockContext*>(outputSurface->context3
D()); | 2295 MockContext* mockContext = static_cast<MockContext*>(outputSurface->Context3
D()); |
2296 MockContextHarness harness(mockContext); | 2296 MockContextHarness harness(mockContext); |
2297 | 2297 |
2298 createLayerTreeHost(true, outputSurface.Pass()); | 2298 createLayerTreeHost(true, outputSurface.Pass()); |
2299 setupRootLayerImpl(FakeLayerWithQuads::create(m_hostImpl.get(), 1)); | 2299 setupRootLayerImpl(FakeLayerWithQuads::create(m_hostImpl.get(), 1)); |
2300 | 2300 |
2301 // The first frame is not a partially-swapped one. | 2301 // The first frame is not a partially-swapped one. |
2302 harness.mustSetScissor(0, 0, 10, 10); | 2302 harness.mustSetScissor(0, 0, 10, 10); |
2303 harness.mustDrawSolidQuad(); | 2303 harness.mustDrawSolidQuad(); |
2304 { | 2304 { |
2305 LayerTreeHostImpl::FrameData frame; | 2305 LayerTreeHostImpl::FrameData frame; |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2341 // Unlimited texture size. | 2341 // Unlimited texture size. |
2342 virtual void getIntegerv(WGC3Denum pname, WGC3Dint* value) | 2342 virtual void getIntegerv(WGC3Denum pname, WGC3Dint* value) |
2343 { | 2343 { |
2344 if (pname == GL_MAX_TEXTURE_SIZE) | 2344 if (pname == GL_MAX_TEXTURE_SIZE) |
2345 *value = 8192; | 2345 *value = 8192; |
2346 } | 2346 } |
2347 }; | 2347 }; |
2348 | 2348 |
2349 static scoped_ptr<LayerTreeHostImpl> setupLayersForOpacity(bool partialSwap, Lay
erTreeHostImplClient* client, Proxy* proxy) | 2349 static scoped_ptr<LayerTreeHostImpl> setupLayersForOpacity(bool partialSwap, Lay
erTreeHostImplClient* client, Proxy* proxy) |
2350 { | 2350 { |
2351 scoped_ptr<OutputSurface> outputSurface = FakeWebCompositorOutputSurface::cr
eate(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Ou
tputSurface>(); | 2351 scoped_ptr<OutputSurface> outputSurface = FakeOutputSurface::Create3d(scoped
_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<OutputSurface
>(); |
2352 | 2352 |
2353 LayerTreeSettings settings; | 2353 LayerTreeSettings settings; |
2354 settings.partialSwapEnabled = partialSwap; | 2354 settings.partialSwapEnabled = partialSwap; |
2355 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, client, proxy); | 2355 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, client, proxy); |
2356 myHostImpl->initializeRenderer(outputSurface.Pass()); | 2356 myHostImpl->initializeRenderer(outputSurface.Pass()); |
2357 myHostImpl->setViewportSize(gfx::Size(100, 100), gfx::Size(100, 100)); | 2357 myHostImpl->setViewportSize(gfx::Size(100, 100), gfx::Size(100, 100)); |
2358 | 2358 |
2359 /* | 2359 /* |
2360 Layers are created as follows: | 2360 Layers are created as follows: |
2361 | 2361 |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2497 EXPECT_TRUE(layer1->didLoseOutputSurfaceCalled()); | 2497 EXPECT_TRUE(layer1->didLoseOutputSurfaceCalled()); |
2498 EXPECT_TRUE(layer2->didLoseOutputSurfaceCalled()); | 2498 EXPECT_TRUE(layer2->didLoseOutputSurfaceCalled()); |
2499 } | 2499 } |
2500 | 2500 |
2501 TEST_P(LayerTreeHostImplTest, finishAllRenderingAfterContextLost) | 2501 TEST_P(LayerTreeHostImplTest, finishAllRenderingAfterContextLost) |
2502 { | 2502 { |
2503 LayerTreeSettings settings; | 2503 LayerTreeSettings settings; |
2504 m_hostImpl = LayerTreeHostImpl::create(settings, this, &m_proxy); | 2504 m_hostImpl = LayerTreeHostImpl::create(settings, this, &m_proxy); |
2505 | 2505 |
2506 // The context initialization will fail, but we should still be able to call
finishAllRendering() without any ill effects. | 2506 // The context initialization will fail, but we should still be able to call
finishAllRendering() without any ill effects. |
2507 m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurface::create(scoped
_ptr<WebKit::WebGraphicsContext3D>(new FakeWebGraphicsContext3DMakeCurrentFails)
).PassAs<OutputSurface>()); | 2507 m_hostImpl->initializeRenderer(FakeOutputSurface::Create3d(scoped_ptr<WebKit
::WebGraphicsContext3D>(new FakeWebGraphicsContext3DMakeCurrentFails)).PassAs<Ou
tputSurface>()); |
2508 m_hostImpl->finishAllRendering(); | 2508 m_hostImpl->finishAllRendering(); |
2509 } | 2509 } |
2510 | 2510 |
2511 class FakeWebGraphicsContext3DMakeCurrentFailsEventually : public FakeWebGraphic
sContext3D { | 2511 class FakeWebGraphicsContext3DMakeCurrentFailsEventually : public FakeWebGraphic
sContext3D { |
2512 public: | 2512 public: |
2513 explicit FakeWebGraphicsContext3DMakeCurrentFailsEventually(unsigned succeed
Count) : m_succeedCount(succeedCount) { } | 2513 explicit FakeWebGraphicsContext3DMakeCurrentFailsEventually(unsigned succeed
Count) : m_succeedCount(succeedCount) { } |
2514 virtual bool makeContextCurrent() { | 2514 virtual bool makeContextCurrent() { |
2515 if (!m_succeedCount) | 2515 if (!m_succeedCount) |
2516 return false; | 2516 return false; |
2517 --m_succeedCount; | 2517 --m_succeedCount; |
(...skipping 17 matching lines...) Expand all Loading... |
2535 | 2535 |
2536 // We will make the context get lost after a numer of makeContextCurrent | 2536 // We will make the context get lost after a numer of makeContextCurrent |
2537 // calls. The exact number of calls to make it succeed is dependent on the | 2537 // calls. The exact number of calls to make it succeed is dependent on the |
2538 // implementation and doesn't really matter (i.e. can be changed to make the | 2538 // implementation and doesn't really matter (i.e. can be changed to make the |
2539 // tests pass after some refactoring). | 2539 // tests pass after some refactoring). |
2540 const unsigned kMakeCurrentSuccessesNeededForSuccessfulInitialization = 3; | 2540 const unsigned kMakeCurrentSuccessesNeededForSuccessfulInitialization = 3; |
2541 | 2541 |
2542 for (unsigned i = 0; i < kMakeCurrentSuccessesNeededForSuccessfulInitializat
ion; ++i) { | 2542 for (unsigned i = 0; i < kMakeCurrentSuccessesNeededForSuccessfulInitializat
ion; ++i) { |
2543 // The context will get lost during initialization, we shouldn't crash.
We | 2543 // The context will get lost during initialization, we shouldn't crash.
We |
2544 // should also be in a consistent state. | 2544 // should also be in a consistent state. |
2545 EXPECT_FALSE(m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurfa
ce::create(scoped_ptr<WebKit::WebGraphicsContext3D>(new FakeWebGraphicsContext3D
MakeCurrentFailsEventually(i))).PassAs<OutputSurface>())); | 2545 EXPECT_FALSE(m_hostImpl->initializeRenderer(FakeOutputSurface::Create3d(
scoped_ptr<WebKit::WebGraphicsContext3D>(new FakeWebGraphicsContext3DMakeCurrent
FailsEventually(i))).PassAs<OutputSurface>())); |
2546 EXPECT_EQ(0, m_hostImpl->outputSurface()); | 2546 EXPECT_EQ(0, m_hostImpl->outputSurface()); |
2547 EXPECT_EQ(0, m_hostImpl->renderer()); | 2547 EXPECT_EQ(0, m_hostImpl->renderer()); |
2548 EXPECT_EQ(0, m_hostImpl->resourceProvider()); | 2548 EXPECT_EQ(0, m_hostImpl->resourceProvider()); |
2549 EXPECT_TRUE(m_hostImpl->initializeRenderer(createOutputSurface())); | 2549 EXPECT_TRUE(m_hostImpl->initializeRenderer(createOutputSurface())); |
2550 } | 2550 } |
2551 | 2551 |
2552 EXPECT_TRUE(m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurface::c
reate(scoped_ptr<WebKit::WebGraphicsContext3D>(new FakeWebGraphicsContext3DMakeC
urrentFailsEventually(kMakeCurrentSuccessesNeededForSuccessfulInitialization))).
PassAs<OutputSurface>())); | 2552 EXPECT_TRUE(m_hostImpl->initializeRenderer(FakeOutputSurface::Create3d(scope
d_ptr<WebKit::WebGraphicsContext3D>(new FakeWebGraphicsContext3DMakeCurrentFails
Eventually(kMakeCurrentSuccessesNeededForSuccessfulInitialization))).PassAs<Outp
utSurface>())); |
2553 EXPECT_TRUE(m_hostImpl->outputSurface()); | 2553 EXPECT_TRUE(m_hostImpl->outputSurface()); |
2554 EXPECT_TRUE(m_hostImpl->renderer()); | 2554 EXPECT_TRUE(m_hostImpl->renderer()); |
2555 EXPECT_TRUE(m_hostImpl->resourceProvider()); | 2555 EXPECT_TRUE(m_hostImpl->resourceProvider()); |
2556 } | 2556 } |
2557 | 2557 |
2558 // Fake WebGraphicsContext3D that will cause a failure if trying to use a | 2558 // Fake WebGraphicsContext3D that will cause a failure if trying to use a |
2559 // resource that wasn't created by it (resources created by | 2559 // resource that wasn't created by it (resources created by |
2560 // FakeWebGraphicsContext3D have an id of 1). | 2560 // FakeWebGraphicsContext3D have an id of 1). |
2561 class StrictWebGraphicsContext3D : public FakeWebGraphicsContext3D { | 2561 class StrictWebGraphicsContext3D : public FakeWebGraphicsContext3D { |
2562 public: | 2562 public: |
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2889 delegatedRendererLayer->setBounds(gfx::Size(10, 10)); | 2889 delegatedRendererLayer->setBounds(gfx::Size(10, 10)); |
2890 delegatedRendererLayer->setContentBounds(gfx::Size(10, 10)); | 2890 delegatedRendererLayer->setContentBounds(gfx::Size(10, 10)); |
2891 delegatedRendererLayer->setDrawsContent(true); | 2891 delegatedRendererLayer->setDrawsContent(true); |
2892 ScopedPtrVector<RenderPass> passList; | 2892 ScopedPtrVector<RenderPass> passList; |
2893 passList.append(createRenderPassWithResource(m_hostImpl->resourceProvider())
); | 2893 passList.append(createRenderPassWithResource(m_hostImpl->resourceProvider())
); |
2894 delegatedRendererLayer->setRenderPasses(passList); | 2894 delegatedRendererLayer->setRenderPasses(passList); |
2895 EXPECT_TRUE(passList.isEmpty()); | 2895 EXPECT_TRUE(passList.isEmpty()); |
2896 rootLayer->addChild(delegatedRendererLayer.PassAs<LayerImpl>()); | 2896 rootLayer->addChild(delegatedRendererLayer.PassAs<LayerImpl>()); |
2897 | 2897 |
2898 // Use a context that supports IOSurfaces | 2898 // Use a context that supports IOSurfaces |
2899 m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurface::create(scoped
_ptr<WebKit::WebGraphicsContext3D>(new FakeWebGraphicsContext3DWithIOSurface)).P
assAs<OutputSurface>()); | 2899 m_hostImpl->initializeRenderer(FakeOutputSurface::Create3d(scoped_ptr<WebKit
::WebGraphicsContext3D>(new FakeWebGraphicsContext3DWithIOSurface)).PassAs<Outpu
tSurface>()); |
2900 | 2900 |
2901 FakeVideoFrame hwVideoFrame( | 2901 FakeVideoFrame hwVideoFrame( |
2902 VideoFrame::WrapNativeTexture( | 2902 VideoFrame::WrapNativeTexture( |
2903 m_hostImpl->resourceProvider()->graphicsContext3D()->createTexture()
, | 2903 m_hostImpl->resourceProvider()->graphicsContext3D()->createTexture()
, |
2904 GL_TEXTURE_2D, | 2904 GL_TEXTURE_2D, |
2905 gfx::Size(4, 4), gfx::Rect(0, 0, 4, 4), gfx::Size(4, 4), base::TimeD
elta(), | 2905 gfx::Size(4, 4), gfx::Rect(0, 0, 4, 4), gfx::Size(4, 4), base::TimeD
elta(), |
2906 VideoFrame::ReadPixelsCB(), base::Closure())); | 2906 VideoFrame::ReadPixelsCB(), base::Closure())); |
2907 hwProvider.setFrame(&hwVideoFrame); | 2907 hwProvider.setFrame(&hwVideoFrame); |
2908 | 2908 |
2909 FakeVideoFrame videoFrameScaled( | 2909 FakeVideoFrame videoFrameScaled( |
2910 VideoFrame::WrapNativeTexture( | 2910 VideoFrame::WrapNativeTexture( |
2911 m_hostImpl->resourceProvider()->graphicsContext3D()->createTexture()
, | 2911 m_hostImpl->resourceProvider()->graphicsContext3D()->createTexture()
, |
2912 GL_TEXTURE_2D, | 2912 GL_TEXTURE_2D, |
2913 gfx::Size(4, 4), gfx::Rect(0, 0, 3, 2), gfx::Size(4, 4), base::TimeD
elta(), | 2913 gfx::Size(4, 4), gfx::Rect(0, 0, 3, 2), gfx::Size(4, 4), base::TimeD
elta(), |
2914 VideoFrame::ReadPixelsCB(), base::Closure())); | 2914 VideoFrame::ReadPixelsCB(), base::Closure())); |
2915 providerScaled.setFrame(&videoFrameScaled); | 2915 providerScaled.setFrame(&videoFrameScaled); |
2916 | 2916 |
2917 m_hostImpl->setRootLayer(rootLayer.Pass()); | 2917 m_hostImpl->setRootLayer(rootLayer.Pass()); |
2918 | 2918 |
2919 LayerTreeHostImpl::FrameData frame; | 2919 LayerTreeHostImpl::FrameData frame; |
2920 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); | 2920 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
2921 m_hostImpl->drawLayers(frame); | 2921 m_hostImpl->drawLayers(frame); |
2922 m_hostImpl->didDrawAllLayers(frame); | 2922 m_hostImpl->didDrawAllLayers(frame); |
2923 m_hostImpl->swapBuffers(); | 2923 m_hostImpl->swapBuffers(); |
2924 | 2924 |
2925 unsigned numResources = m_hostImpl->resourceProvider()->numResources(); | 2925 unsigned numResources = m_hostImpl->resourceProvider()->numResources(); |
2926 | 2926 |
2927 // Lose the WebGraphicsContext3D, replacing it with a StrictWebGraphicsConte
xt3DWithIOSurface, | 2927 // Lose the WebGraphicsContext3D, replacing it with a StrictWebGraphicsConte
xt3DWithIOSurface, |
2928 // that will warn if any resource from the previous context gets used. | 2928 // that will warn if any resource from the previous context gets used. |
2929 m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurface::create(scoped
_ptr<WebKit::WebGraphicsContext3D>(new StrictWebGraphicsContext3DWithIOSurface))
.PassAs<OutputSurface>()); | 2929 m_hostImpl->initializeRenderer(FakeOutputSurface::Create3d(scoped_ptr<WebKit
::WebGraphicsContext3D>(new StrictWebGraphicsContext3DWithIOSurface)).PassAs<Out
putSurface>()); |
2930 | 2930 |
2931 // Create dummy resources so that looking up an old resource will get an | 2931 // Create dummy resources so that looking up an old resource will get an |
2932 // invalid texture id mapping. | 2932 // invalid texture id mapping. |
2933 for (unsigned i = 0; i < numResources; ++i) | 2933 for (unsigned i = 0; i < numResources; ++i) |
2934 m_hostImpl->resourceProvider()->createResourceFromExternalTexture(Strict
WebGraphicsContext3D::kExternalTextureId); | 2934 m_hostImpl->resourceProvider()->createResourceFromExternalTexture(Strict
WebGraphicsContext3D::kExternalTextureId); |
2935 | 2935 |
2936 // The WebVideoFrameProvider is expected to recreate its textures after a | 2936 // The WebVideoFrameProvider is expected to recreate its textures after a |
2937 // lost output surface (or not serve a frame). | 2937 // lost output surface (or not serve a frame). |
2938 hwProvider.setFrame(0); | 2938 hwProvider.setFrame(0); |
2939 providerScaled.setFrame(0); | 2939 providerScaled.setFrame(0); |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3036 | 3036 |
3037 scoped_ptr<IOSurfaceLayerImpl> ioSurfaceLayer = IOSurfaceLayerImpl::create(m
_hostImpl.get(), 5); | 3037 scoped_ptr<IOSurfaceLayerImpl> ioSurfaceLayer = IOSurfaceLayerImpl::create(m
_hostImpl.get(), 5); |
3038 ioSurfaceLayer->setBounds(gfx::Size(10, 10)); | 3038 ioSurfaceLayer->setBounds(gfx::Size(10, 10)); |
3039 ioSurfaceLayer->setAnchorPoint(gfx::PointF(0, 0)); | 3039 ioSurfaceLayer->setAnchorPoint(gfx::PointF(0, 0)); |
3040 ioSurfaceLayer->setContentBounds(gfx::Size(10, 10)); | 3040 ioSurfaceLayer->setContentBounds(gfx::Size(10, 10)); |
3041 ioSurfaceLayer->setDrawsContent(true); | 3041 ioSurfaceLayer->setDrawsContent(true); |
3042 ioSurfaceLayer->setIOSurfaceProperties(1, gfx::Size(10, 10)); | 3042 ioSurfaceLayer->setIOSurfaceProperties(1, gfx::Size(10, 10)); |
3043 rootLayer->addChild(ioSurfaceLayer.PassAs<LayerImpl>()); | 3043 rootLayer->addChild(ioSurfaceLayer.PassAs<LayerImpl>()); |
3044 | 3044 |
3045 // Lose the WebGraphicsContext3D, replacing it with a TrackingWebGraphicsCon
text3D (which the LayerTreeHostImpl takes ownership of). | 3045 // Lose the WebGraphicsContext3D, replacing it with a TrackingWebGraphicsCon
text3D (which the LayerTreeHostImpl takes ownership of). |
3046 scoped_ptr<OutputSurface> outputSurface(FakeWebCompositorOutputSurface::crea
te(scoped_ptr<WebKit::WebGraphicsContext3D>(new TrackingWebGraphicsContext3D))); | 3046 scoped_ptr<OutputSurface> outputSurface(FakeOutputSurface::Create3d(scoped_p
tr<WebKit::WebGraphicsContext3D>(new TrackingWebGraphicsContext3D))); |
3047 TrackingWebGraphicsContext3D* trackingWebGraphicsContext3D = static_cast<Tra
ckingWebGraphicsContext3D*>(outputSurface->context3D()); | 3047 TrackingWebGraphicsContext3D* trackingWebGraphicsContext3D = static_cast<Tra
ckingWebGraphicsContext3D*>(outputSurface->Context3D()); |
3048 m_hostImpl->initializeRenderer(outputSurface.Pass()); | 3048 m_hostImpl->initializeRenderer(outputSurface.Pass()); |
3049 | 3049 |
3050 m_hostImpl->setRootLayer(rootLayer.Pass()); | 3050 m_hostImpl->setRootLayer(rootLayer.Pass()); |
3051 | 3051 |
3052 LayerTreeHostImpl::FrameData frame; | 3052 LayerTreeHostImpl::FrameData frame; |
3053 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); | 3053 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
3054 m_hostImpl->drawLayers(frame); | 3054 m_hostImpl->drawLayers(frame); |
3055 m_hostImpl->didDrawAllLayers(frame); | 3055 m_hostImpl->didDrawAllLayers(frame); |
3056 m_hostImpl->swapBuffers(); | 3056 m_hostImpl->swapBuffers(); |
3057 | 3057 |
3058 EXPECT_GT(trackingWebGraphicsContext3D->numTextures(), 0u); | 3058 EXPECT_GT(trackingWebGraphicsContext3D->numTextures(), 0u); |
3059 | 3059 |
3060 // Kill the layer tree. | 3060 // Kill the layer tree. |
3061 m_hostImpl->setRootLayer(LayerImpl::create(m_hostImpl.get(), 100)); | 3061 m_hostImpl->setRootLayer(LayerImpl::create(m_hostImpl.get(), 100)); |
3062 // There should be no textures left in use after. | 3062 // There should be no textures left in use after. |
3063 EXPECT_EQ(0u, trackingWebGraphicsContext3D->numTextures()); | 3063 EXPECT_EQ(0u, trackingWebGraphicsContext3D->numTextures()); |
3064 } | 3064 } |
3065 | 3065 |
3066 class MockDrawQuadsToFillScreenContext : public FakeWebGraphicsContext3D { | 3066 class MockDrawQuadsToFillScreenContext : public FakeWebGraphicsContext3D { |
3067 public: | 3067 public: |
3068 MOCK_METHOD1(useProgram, void(WebGLId program)); | 3068 MOCK_METHOD1(useProgram, void(WebGLId program)); |
3069 MOCK_METHOD4(drawElements, void(WGC3Denum mode, WGC3Dsizei count, WGC3Denum
type, WGC3Dintptr offset)); | 3069 MOCK_METHOD4(drawElements, void(WGC3Denum mode, WGC3Dsizei count, WGC3Denum
type, WGC3Dintptr offset)); |
3070 }; | 3070 }; |
3071 | 3071 |
3072 TEST_P(LayerTreeHostImplTest, hasTransparentBackground) | 3072 TEST_P(LayerTreeHostImplTest, hasTransparentBackground) |
3073 { | 3073 { |
3074 scoped_ptr<OutputSurface> outputSurface = FakeWebCompositorOutputSurface::cr
eate(scoped_ptr<WebKit::WebGraphicsContext3D>(new MockDrawQuadsToFillScreenConte
xt)).PassAs<OutputSurface>(); | 3074 scoped_ptr<OutputSurface> outputSurface = FakeOutputSurface::Create3d(scoped
_ptr<WebKit::WebGraphicsContext3D>(new MockDrawQuadsToFillScreenContext)).PassAs
<OutputSurface>(); |
3075 MockDrawQuadsToFillScreenContext* mockContext = static_cast<MockDrawQuadsToF
illScreenContext*>(outputSurface->context3D()); | 3075 MockDrawQuadsToFillScreenContext* mockContext = static_cast<MockDrawQuadsToF
illScreenContext*>(outputSurface->Context3D()); |
3076 | 3076 |
3077 // Run test case | 3077 // Run test case |
3078 createLayerTreeHost(false, outputSurface.Pass()); | 3078 createLayerTreeHost(false, outputSurface.Pass()); |
3079 setupRootLayerImpl(LayerImpl::create(m_hostImpl.get(), 1)); | 3079 setupRootLayerImpl(LayerImpl::create(m_hostImpl.get(), 1)); |
3080 m_hostImpl->setBackgroundColor(SK_ColorWHITE); | 3080 m_hostImpl->setBackgroundColor(SK_ColorWHITE); |
3081 | 3081 |
3082 // Verify one quad is drawn when transparent background set is not set. | 3082 // Verify one quad is drawn when transparent background set is not set. |
3083 m_hostImpl->setHasTransparentBackground(false); | 3083 m_hostImpl->setHasTransparentBackground(false); |
3084 EXPECT_CALL(*mockContext, useProgram(_)) | 3084 EXPECT_CALL(*mockContext, useProgram(_)) |
3085 .Times(1); | 3085 .Times(1); |
(...skipping 23 matching lines...) Expand all Loading... |
3109 layerPtr->setContentBounds(layerRect.size()); | 3109 layerPtr->setContentBounds(layerRect.size()); |
3110 layerPtr->setDrawsContent(true); // only children draw content | 3110 layerPtr->setDrawsContent(true); // only children draw content |
3111 layerPtr->setContentsOpaque(true); | 3111 layerPtr->setContentsOpaque(true); |
3112 parent->addChild(layer.Pass()); | 3112 parent->addChild(layer.Pass()); |
3113 if (result) | 3113 if (result) |
3114 *result = layerPtr; | 3114 *result = layerPtr; |
3115 } | 3115 } |
3116 | 3116 |
3117 static void setupLayersForTextureCaching(LayerTreeHostImpl* layerTreeHostImpl, L
ayerImpl*& rootPtr, LayerImpl*& intermediateLayerPtr, LayerImpl*& surfaceLayerPt
r, LayerImpl*& childPtr, const gfx::Size& rootSize) | 3117 static void setupLayersForTextureCaching(LayerTreeHostImpl* layerTreeHostImpl, L
ayerImpl*& rootPtr, LayerImpl*& intermediateLayerPtr, LayerImpl*& surfaceLayerPt
r, LayerImpl*& childPtr, const gfx::Size& rootSize) |
3118 { | 3118 { |
3119 scoped_ptr<OutputSurface> outputSurface = FakeWebCompositorOutputSurface::cr
eate(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Ou
tputSurface>(); | 3119 scoped_ptr<OutputSurface> outputSurface = FakeOutputSurface::Create3d(scoped
_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<OutputSurface
>(); |
3120 | 3120 |
3121 layerTreeHostImpl->initializeRenderer(outputSurface.Pass()); | 3121 layerTreeHostImpl->initializeRenderer(outputSurface.Pass()); |
3122 layerTreeHostImpl->setViewportSize(rootSize, rootSize); | 3122 layerTreeHostImpl->setViewportSize(rootSize, rootSize); |
3123 | 3123 |
3124 scoped_ptr<LayerImpl> root = LayerImpl::create(layerTreeHostImpl, 1); | 3124 scoped_ptr<LayerImpl> root = LayerImpl::create(layerTreeHostImpl, 1); |
3125 rootPtr = root.get(); | 3125 rootPtr = root.get(); |
3126 | 3126 |
3127 root->setAnchorPoint(gfx::PointF(0, 0)); | 3127 root->setAnchorPoint(gfx::PointF(0, 0)); |
3128 root->setPosition(gfx::PointF(0, 0)); | 3128 root->setPosition(gfx::PointF(0, 0)); |
3129 root->setBounds(rootSize); | 3129 root->setBounds(rootSize); |
(...skipping 23 matching lines...) Expand all Loading... |
3153 TEST_P(LayerTreeHostImplTest, textureCachingWithClipping) | 3153 TEST_P(LayerTreeHostImplTest, textureCachingWithClipping) |
3154 { | 3154 { |
3155 LayerTreeSettings settings; | 3155 LayerTreeSettings settings; |
3156 settings.minimumOcclusionTrackingSize = gfx::Size(); | 3156 settings.minimumOcclusionTrackingSize = gfx::Size(); |
3157 settings.partialSwapEnabled = true; | 3157 settings.partialSwapEnabled = true; |
3158 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); | 3158 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); |
3159 | 3159 |
3160 LayerImpl* rootPtr; | 3160 LayerImpl* rootPtr; |
3161 LayerImpl* surfaceLayerPtr; | 3161 LayerImpl* surfaceLayerPtr; |
3162 | 3162 |
3163 scoped_ptr<OutputSurface> outputSurface = FakeWebCompositorOutputSurface::cr
eate(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Ou
tputSurface>(); | 3163 scoped_ptr<OutputSurface> outputSurface = FakeOutputSurface::Create3d(scoped
_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<OutputSurface
>(); |
3164 | 3164 |
3165 gfx::Size rootSize(100, 100); | 3165 gfx::Size rootSize(100, 100); |
3166 | 3166 |
3167 myHostImpl->initializeRenderer(outputSurface.Pass()); | 3167 myHostImpl->initializeRenderer(outputSurface.Pass()); |
3168 myHostImpl->setViewportSize(gfx::Size(rootSize.width(), rootSize.height()),
gfx::Size(rootSize.width(), rootSize.height())); | 3168 myHostImpl->setViewportSize(gfx::Size(rootSize.width(), rootSize.height()),
gfx::Size(rootSize.width(), rootSize.height())); |
3169 | 3169 |
3170 scoped_ptr<LayerImpl> root = LayerImpl::create(myHostImpl.get(), 1); | 3170 scoped_ptr<LayerImpl> root = LayerImpl::create(myHostImpl.get(), 1); |
3171 rootPtr = root.get(); | 3171 rootPtr = root.get(); |
3172 | 3172 |
3173 root->setAnchorPoint(gfx::PointF(0, 0)); | 3173 root->setAnchorPoint(gfx::PointF(0, 0)); |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3264 // | 3264 // |
3265 // Occlusion: | 3265 // Occlusion: |
3266 // L12 occludes L11 (internal) | 3266 // L12 occludes L11 (internal) |
3267 // L20 occludes L10 (external) | 3267 // L20 occludes L10 (external) |
3268 // L21 occludes L20 (internal) | 3268 // L21 occludes L20 (internal) |
3269 | 3269 |
3270 LayerImpl* rootPtr; | 3270 LayerImpl* rootPtr; |
3271 LayerImpl* layerS1Ptr; | 3271 LayerImpl* layerS1Ptr; |
3272 LayerImpl* layerS2Ptr; | 3272 LayerImpl* layerS2Ptr; |
3273 | 3273 |
3274 scoped_ptr<OutputSurface> outputSurface = FakeWebCompositorOutputSurface::cr
eate(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Ou
tputSurface>(); | 3274 scoped_ptr<OutputSurface> outputSurface = FakeOutputSurface::Create3d(scoped
_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<OutputSurface
>(); |
3275 | 3275 |
3276 gfx::Size rootSize(1000, 1000); | 3276 gfx::Size rootSize(1000, 1000); |
3277 | 3277 |
3278 myHostImpl->initializeRenderer(outputSurface.Pass()); | 3278 myHostImpl->initializeRenderer(outputSurface.Pass()); |
3279 myHostImpl->setViewportSize(gfx::Size(rootSize.width(), rootSize.height()),
gfx::Size(rootSize.width(), rootSize.height())); | 3279 myHostImpl->setViewportSize(gfx::Size(rootSize.width(), rootSize.height()),
gfx::Size(rootSize.width(), rootSize.height())); |
3280 | 3280 |
3281 scoped_ptr<LayerImpl> root = LayerImpl::create(myHostImpl.get(), 1); | 3281 scoped_ptr<LayerImpl> root = LayerImpl::create(myHostImpl.get(), 1); |
3282 rootPtr = root.get(); | 3282 rootPtr = root.get(); |
3283 | 3283 |
3284 root->setAnchorPoint(gfx::PointF(0, 0)); | 3284 root->setAnchorPoint(gfx::PointF(0, 0)); |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3375 // | +- L13 (corner, unoccluded) | 3375 // | +- L13 (corner, unoccluded) |
3376 // | +- L14 (corner, entirely occluded) | 3376 // | +- L14 (corner, entirely occluded) |
3377 // | | 3377 // | |
3378 // +-- S2 +- L20 (owning, drawing) | 3378 // +-- S2 +- L20 (owning, drawing) |
3379 // | 3379 // |
3380 | 3380 |
3381 LayerImpl* rootPtr; | 3381 LayerImpl* rootPtr; |
3382 LayerImpl* layerS1Ptr; | 3382 LayerImpl* layerS1Ptr; |
3383 LayerImpl* layerS2Ptr; | 3383 LayerImpl* layerS2Ptr; |
3384 | 3384 |
3385 scoped_ptr<OutputSurface> outputSurface = FakeWebCompositorOutputSurface::cr
eate(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Ou
tputSurface>(); | 3385 scoped_ptr<OutputSurface> outputSurface = FakeOutputSurface::Create3d(scoped
_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<OutputSurface
>(); |
3386 | 3386 |
3387 gfx::Size rootSize(1000, 1000); | 3387 gfx::Size rootSize(1000, 1000); |
3388 | 3388 |
3389 myHostImpl->initializeRenderer(outputSurface.Pass()); | 3389 myHostImpl->initializeRenderer(outputSurface.Pass()); |
3390 myHostImpl->setViewportSize(gfx::Size(rootSize.width(), rootSize.height()),
gfx::Size(rootSize.width(), rootSize.height())); | 3390 myHostImpl->setViewportSize(gfx::Size(rootSize.width(), rootSize.height()),
gfx::Size(rootSize.width(), rootSize.height())); |
3391 | 3391 |
3392 scoped_ptr<LayerImpl> root = LayerImpl::create(myHostImpl.get(), 1); | 3392 scoped_ptr<LayerImpl> root = LayerImpl::create(myHostImpl.get(), 1); |
3393 rootPtr = root.get(); | 3393 rootPtr = root.get(); |
3394 | 3394 |
3395 root->setAnchorPoint(gfx::PointF(0, 0)); | 3395 root->setAnchorPoint(gfx::PointF(0, 0)); |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3487 // | +- L11 (corner, occluded by L12) | 3487 // | +- L11 (corner, occluded by L12) |
3488 // | +- L12 (opposite corner) | 3488 // | +- L12 (opposite corner) |
3489 // | | 3489 // | |
3490 // +-- S2 +- L20 (owning, drawing) | 3490 // +-- S2 +- L20 (owning, drawing) |
3491 // | 3491 // |
3492 | 3492 |
3493 LayerImpl* rootPtr; | 3493 LayerImpl* rootPtr; |
3494 LayerImpl* layerS1Ptr; | 3494 LayerImpl* layerS1Ptr; |
3495 LayerImpl* layerS2Ptr; | 3495 LayerImpl* layerS2Ptr; |
3496 | 3496 |
3497 scoped_ptr<OutputSurface> outputSurface = FakeWebCompositorOutputSurface::cr
eate(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Ou
tputSurface>(); | 3497 scoped_ptr<OutputSurface> outputSurface = FakeOutputSurface::Create3d(scoped
_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<OutputSurface
>(); |
3498 | 3498 |
3499 gfx::Size rootSize(1000, 1000); | 3499 gfx::Size rootSize(1000, 1000); |
3500 | 3500 |
3501 myHostImpl->initializeRenderer(outputSurface.Pass()); | 3501 myHostImpl->initializeRenderer(outputSurface.Pass()); |
3502 myHostImpl->setViewportSize(gfx::Size(rootSize.width(), rootSize.height()),
gfx::Size(rootSize.width(), rootSize.height())); | 3502 myHostImpl->setViewportSize(gfx::Size(rootSize.width(), rootSize.height()),
gfx::Size(rootSize.width(), rootSize.height())); |
3503 | 3503 |
3504 scoped_ptr<LayerImpl> root = LayerImpl::create(myHostImpl.get(), 1); | 3504 scoped_ptr<LayerImpl> root = LayerImpl::create(myHostImpl.get(), 1); |
3505 rootPtr = root.get(); | 3505 rootPtr = root.get(); |
3506 | 3506 |
3507 root->setAnchorPoint(gfx::PointF(0, 0)); | 3507 root->setAnchorPoint(gfx::PointF(0, 0)); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3568 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); | 3568 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); |
3569 | 3569 |
3570 // Layers are structured as follows: | 3570 // Layers are structured as follows: |
3571 // | 3571 // |
3572 // R +-- S1 +- L10 (rotated, drawing) | 3572 // R +-- S1 +- L10 (rotated, drawing) |
3573 // +- L11 (occupies half surface) | 3573 // +- L11 (occupies half surface) |
3574 | 3574 |
3575 LayerImpl* rootPtr; | 3575 LayerImpl* rootPtr; |
3576 LayerImpl* layerS1Ptr; | 3576 LayerImpl* layerS1Ptr; |
3577 | 3577 |
3578 scoped_ptr<OutputSurface> outputSurface = FakeWebCompositorOutputSurface::cr
eate(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Ou
tputSurface>(); | 3578 scoped_ptr<OutputSurface> outputSurface = FakeOutputSurface::Create3d(scoped
_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<OutputSurface
>(); |
3579 | 3579 |
3580 gfx::Size rootSize(1000, 1000); | 3580 gfx::Size rootSize(1000, 1000); |
3581 | 3581 |
3582 myHostImpl->initializeRenderer(outputSurface.Pass()); | 3582 myHostImpl->initializeRenderer(outputSurface.Pass()); |
3583 myHostImpl->setViewportSize(gfx::Size(rootSize.width(), rootSize.height()),
gfx::Size(rootSize.width(), rootSize.height())); | 3583 myHostImpl->setViewportSize(gfx::Size(rootSize.width(), rootSize.height()),
gfx::Size(rootSize.width(), rootSize.height())); |
3584 | 3584 |
3585 scoped_ptr<LayerImpl> root = LayerImpl::create(myHostImpl.get(), 1); | 3585 scoped_ptr<LayerImpl> root = LayerImpl::create(myHostImpl.get(), 1); |
3586 rootPtr = root.get(); | 3586 rootPtr = root.get(); |
3587 | 3587 |
3588 root->setAnchorPoint(gfx::PointF(0, 0)); | 3588 root->setAnchorPoint(gfx::PointF(0, 0)); |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3652 // | 3652 // |
3653 // Occlusion: | 3653 // Occlusion: |
3654 // L12 occludes L11 (internal) | 3654 // L12 occludes L11 (internal) |
3655 // L20 occludes L10 (external) | 3655 // L20 occludes L10 (external) |
3656 // L21 occludes L20 (internal) | 3656 // L21 occludes L20 (internal) |
3657 | 3657 |
3658 LayerImpl* rootPtr; | 3658 LayerImpl* rootPtr; |
3659 LayerImpl* layerS1Ptr; | 3659 LayerImpl* layerS1Ptr; |
3660 LayerImpl* layerS2Ptr; | 3660 LayerImpl* layerS2Ptr; |
3661 | 3661 |
3662 scoped_ptr<OutputSurface> outputSurface = FakeWebCompositorOutputSurface::cr
eate(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Ou
tputSurface>(); | 3662 scoped_ptr<OutputSurface> outputSurface = FakeOutputSurface::Create3d(scoped
_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<OutputSurface
>(); |
3663 | 3663 |
3664 gfx::Size rootSize(1000, 1000); | 3664 gfx::Size rootSize(1000, 1000); |
3665 | 3665 |
3666 myHostImpl->initializeRenderer(outputSurface.Pass()); | 3666 myHostImpl->initializeRenderer(outputSurface.Pass()); |
3667 myHostImpl->setViewportSize(gfx::Size(rootSize.width(), rootSize.height()),
gfx::Size(rootSize.width(), rootSize.height())); | 3667 myHostImpl->setViewportSize(gfx::Size(rootSize.width(), rootSize.height()),
gfx::Size(rootSize.width(), rootSize.height())); |
3668 | 3668 |
3669 scoped_ptr<LayerImpl> root = LayerImpl::create(myHostImpl.get(), 1); | 3669 scoped_ptr<LayerImpl> root = LayerImpl::create(myHostImpl.get(), 1); |
3670 rootPtr = root.get(); | 3670 rootPtr = root.get(); |
3671 | 3671 |
3672 root->setAnchorPoint(gfx::PointF(0, 0)); | 3672 root->setAnchorPoint(gfx::PointF(0, 0)); |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3771 Layers 1, 2 have render surfaces | 3771 Layers 1, 2 have render surfaces |
3772 */ | 3772 */ |
3773 scoped_ptr<LayerImpl> root = LayerImpl::create(myHostImpl.get(), 1); | 3773 scoped_ptr<LayerImpl> root = LayerImpl::create(myHostImpl.get(), 1); |
3774 scoped_ptr<TiledLayerImpl> child = TiledLayerImpl::create(myHostImpl.get(),
2); | 3774 scoped_ptr<TiledLayerImpl> child = TiledLayerImpl::create(myHostImpl.get(),
2); |
3775 scoped_ptr<LayerImpl> grandChild = LayerImpl::create(myHostImpl.get(), 3); | 3775 scoped_ptr<LayerImpl> grandChild = LayerImpl::create(myHostImpl.get(), 3); |
3776 | 3776 |
3777 gfx::Rect rootRect(0, 0, 100, 100); | 3777 gfx::Rect rootRect(0, 0, 100, 100); |
3778 gfx::Rect childRect(10, 10, 50, 50); | 3778 gfx::Rect childRect(10, 10, 50, 50); |
3779 gfx::Rect grandChildRect(5, 5, 150, 150); | 3779 gfx::Rect grandChildRect(5, 5, 150, 150); |
3780 | 3780 |
3781 scoped_ptr<OutputSurface> outputSurface = FakeWebCompositorOutputSurface::cr
eate(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Ou
tputSurface>(); | 3781 scoped_ptr<OutputSurface> outputSurface = FakeOutputSurface::Create3d(scoped
_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<OutputSurface
>(); |
3782 myHostImpl->initializeRenderer(outputSurface.Pass()); | 3782 myHostImpl->initializeRenderer(outputSurface.Pass()); |
3783 | 3783 |
3784 root->setAnchorPoint(gfx::PointF(0, 0)); | 3784 root->setAnchorPoint(gfx::PointF(0, 0)); |
3785 root->setPosition(gfx::PointF(rootRect.x(), rootRect.y())); | 3785 root->setPosition(gfx::PointF(rootRect.x(), rootRect.y())); |
3786 root->setBounds(gfx::Size(rootRect.width(), rootRect.height())); | 3786 root->setBounds(gfx::Size(rootRect.width(), rootRect.height())); |
3787 root->setContentBounds(root->bounds()); | 3787 root->setContentBounds(root->bounds()); |
3788 root->setDrawsContent(true); | 3788 root->setDrawsContent(true); |
3789 root->setMasksToBounds(true); | 3789 root->setMasksToBounds(true); |
3790 | 3790 |
3791 child->setAnchorPoint(gfx::PointF(0, 0)); | 3791 child->setAnchorPoint(gfx::PointF(0, 0)); |
(...skipping 721 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4513 static void verifyRenderPassTestData(TestCase& testCase, RenderPassRemovalTestDa
ta& testData) | 4513 static void verifyRenderPassTestData(TestCase& testCase, RenderPassRemovalTestDa
ta& testData) |
4514 { | 4514 { |
4515 char actualResult[1024]; | 4515 char actualResult[1024]; |
4516 dumpRenderPassTestData(testData, actualResult); | 4516 dumpRenderPassTestData(testData, actualResult); |
4517 EXPECT_STREQ(testCase.expectedResult, actualResult) << "In test case: " << t
estCase.name; | 4517 EXPECT_STREQ(testCase.expectedResult, actualResult) << "In test case: " << t
estCase.name; |
4518 } | 4518 } |
4519 | 4519 |
4520 TEST_P(LayerTreeHostImplTest, testRemoveRenderPasses) | 4520 TEST_P(LayerTreeHostImplTest, testRemoveRenderPasses) |
4521 { | 4521 { |
4522 scoped_ptr<OutputSurface> outputSurface(createOutputSurface()); | 4522 scoped_ptr<OutputSurface> outputSurface(createOutputSurface()); |
4523 ASSERT_TRUE(outputSurface->context3D()); | 4523 ASSERT_TRUE(outputSurface->Context3D()); |
4524 scoped_ptr<ResourceProvider> resourceProvider(ResourceProvider::create(outpu
tSurface.get())); | 4524 scoped_ptr<ResourceProvider> resourceProvider(ResourceProvider::create(outpu
tSurface.get())); |
4525 | 4525 |
4526 scoped_ptr<TestRenderer> renderer(TestRenderer::create(resourceProvider.get(
), &m_proxy)); | 4526 scoped_ptr<TestRenderer> renderer(TestRenderer::create(resourceProvider.get(
), &m_proxy)); |
4527 | 4527 |
4528 int testCaseIndex = 0; | 4528 int testCaseIndex = 0; |
4529 while (removeRenderPassesCases[testCaseIndex].name) { | 4529 while (removeRenderPassesCases[testCaseIndex].name) { |
4530 RenderPassRemovalTestData testData; | 4530 RenderPassRemovalTestData testData; |
4531 configureRenderPassTestData(removeRenderPassesCases[testCaseIndex].initS
cript, testData, renderer.get()); | 4531 configureRenderPassTestData(removeRenderPassesCases[testCaseIndex].initS
cript, testData, renderer.get()); |
4532 LayerTreeHostImpl::removeRenderPasses(LayerTreeHostImpl::CullRenderPasse
sWithCachedTextures(*renderer), testData); | 4532 LayerTreeHostImpl::removeRenderPasses(LayerTreeHostImpl::CullRenderPasse
sWithCachedTextures(*renderer), testData); |
4533 verifyRenderPassTestData(removeRenderPassesCases[testCaseIndex], testDat
a); | 4533 verifyRenderPassTestData(removeRenderPassesCases[testCaseIndex], testDat
a); |
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4891 { | 4891 { |
4892 pinchZoomPanViewportAndScrollBoundaryTest(2); | 4892 pinchZoomPanViewportAndScrollBoundaryTest(2); |
4893 } | 4893 } |
4894 | 4894 |
4895 INSTANTIATE_TEST_CASE_P(LayerTreeHostImplTests, | 4895 INSTANTIATE_TEST_CASE_P(LayerTreeHostImplTests, |
4896 LayerTreeHostImplTest, | 4896 LayerTreeHostImplTest, |
4897 ::testing::Values(false, true)); | 4897 ::testing::Values(false, true)); |
4898 | 4898 |
4899 } // namespace | 4899 } // namespace |
4900 } // namespace cc | 4900 } // namespace cc |
OLD | NEW |