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 "CCDelegatedRendererLayerImpl.h" | 9 #include "CCDelegatedRendererLayerImpl.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/gl_renderer.h" | 12 #include "cc/gl_renderer.h" |
13 #include "cc/heads_up_display_layer_impl.h" | 13 #include "cc/heads_up_display_layer_impl.h" |
14 #include "cc/io_surface_layer_impl.h" | 14 #include "cc/io_surface_layer_impl.h" |
15 #include "cc/layer_impl.h" | 15 #include "cc/layer_impl.h" |
16 #include "cc/layer_tiling_data.h" | 16 #include "cc/layer_tiling_data.h" |
17 #include "cc/quad_sink.h" | 17 #include "cc/quad_sink.h" |
18 #include "cc/render_pass_draw_quad.h" | 18 #include "cc/render_pass_draw_quad.h" |
19 #include "cc/scrollbar_geometry_fixed_thumb.h" | 19 #include "cc/scrollbar_geometry_fixed_thumb.h" |
20 #include "cc/scrollbar_layer_impl.h" | 20 #include "cc/scrollbar_layer_impl.h" |
21 #include "cc/settings.h" | 21 #include "cc/settings.h" |
22 #include "cc/single_thread_proxy.h" | 22 #include "cc/single_thread_proxy.h" |
23 #include "cc/solid_color_draw_quad.h" | 23 #include "cc/solid_color_draw_quad.h" |
24 #include "cc/test/animation_test_common.h" | 24 #include "cc/test/animation_test_common.h" |
| 25 #include "cc/test/fake_proxy.h" |
25 #include "cc/test/fake_web_compositor_output_surface.h" | 26 #include "cc/test/fake_web_compositor_output_surface.h" |
26 #include "cc/test/fake_web_graphics_context_3d.h" | 27 #include "cc/test/fake_web_graphics_context_3d.h" |
27 #include "cc/test/fake_web_scrollbar_theme_geometry.h" | 28 #include "cc/test/fake_web_scrollbar_theme_geometry.h" |
28 #include "cc/test/geometry_test_utils.h" | 29 #include "cc/test/geometry_test_utils.h" |
29 #include "cc/test/layer_test_common.h" | 30 #include "cc/test/layer_test_common.h" |
30 #include "cc/test/render_pass_test_common.h" | 31 #include "cc/test/render_pass_test_common.h" |
31 #include "cc/test/test_common.h" | 32 #include "cc/test/test_common.h" |
32 #include "cc/texture_draw_quad.h" | 33 #include "cc/texture_draw_quad.h" |
33 #include "cc/texture_layer_impl.h" | 34 #include "cc/texture_layer_impl.h" |
34 #include "cc/tile_draw_quad.h" | 35 #include "cc/tile_draw_quad.h" |
(...skipping 16 matching lines...) Expand all Loading... |
51 using ::testing::_; | 52 using ::testing::_; |
52 | 53 |
53 namespace { | 54 namespace { |
54 | 55 |
55 // This test is parametrized to run all tests with the | 56 // This test is parametrized to run all tests with the |
56 // Settings::pageScalePinchZoomEnabled field enabled and disabled. | 57 // Settings::pageScalePinchZoomEnabled field enabled and disabled. |
57 class LayerTreeHostImplTest : public testing::TestWithParam<bool>, | 58 class LayerTreeHostImplTest : public testing::TestWithParam<bool>, |
58 public LayerTreeHostImplClient { | 59 public LayerTreeHostImplClient { |
59 public: | 60 public: |
60 LayerTreeHostImplTest() | 61 LayerTreeHostImplTest() |
61 : m_onCanDrawStateChangedCalled(false) | 62 : m_proxy(0) |
| 63 , m_alwaysImplThread(&m_proxy) |
| 64 , m_alwaysMainThreadBlocked(&m_proxy) |
| 65 , m_onCanDrawStateChangedCalled(false) |
62 , m_didRequestCommit(false) | 66 , m_didRequestCommit(false) |
63 , m_didRequestRedraw(false) | 67 , m_didRequestRedraw(false) |
64 , m_reduceMemoryResult(true) | 68 , m_reduceMemoryResult(true) |
65 { | 69 { |
66 } | 70 } |
67 | 71 |
68 virtual void SetUp() | 72 virtual void SetUp() |
69 { | 73 { |
70 Settings::setPageScalePinchZoomEnabled(GetParam()); | 74 Settings::setPageScalePinchZoomEnabled(GetParam()); |
71 LayerTreeSettings settings; | 75 LayerTreeSettings settings; |
72 settings.minimumOcclusionTrackingSize = IntSize(); | 76 settings.minimumOcclusionTrackingSize = IntSize(); |
73 | 77 |
74 m_hostImpl = LayerTreeHostImpl::create(settings, this); | 78 m_hostImpl = LayerTreeHostImpl::create(settings, this, &m_proxy); |
75 m_hostImpl->initializeRenderer(createContext()); | 79 m_hostImpl->initializeRenderer(createContext()); |
76 m_hostImpl->setViewportSize(IntSize(10, 10), IntSize(10, 10)); | 80 m_hostImpl->setViewportSize(IntSize(10, 10), IntSize(10, 10)); |
77 } | 81 } |
78 | 82 |
79 virtual void TearDown() | 83 virtual void TearDown() |
80 { | 84 { |
81 } | 85 } |
82 | 86 |
83 virtual void didLoseContextOnImplThread() OVERRIDE { } | 87 virtual void didLoseContextOnImplThread() OVERRIDE { } |
84 virtual void onSwapBuffersCompleteOnImplThread() OVERRIDE { } | 88 virtual void onSwapBuffersCompleteOnImplThread() OVERRIDE { } |
85 virtual void onVSyncParametersChanged(double, double) OVERRIDE { } | 89 virtual void onVSyncParametersChanged(double, double) OVERRIDE { } |
86 virtual void onCanDrawStateChanged(bool canDraw) OVERRIDE { m_onCanDrawState
ChangedCalled = true; } | 90 virtual void onCanDrawStateChanged(bool canDraw) OVERRIDE { m_onCanDrawState
ChangedCalled = true; } |
87 virtual void setNeedsRedrawOnImplThread() OVERRIDE { m_didRequestRedraw = tr
ue; } | 91 virtual void setNeedsRedrawOnImplThread() OVERRIDE { m_didRequestRedraw = tr
ue; } |
88 virtual void setNeedsCommitOnImplThread() OVERRIDE { m_didRequestCommit = tr
ue; } | 92 virtual void setNeedsCommitOnImplThread() OVERRIDE { m_didRequestCommit = tr
ue; } |
89 virtual void postAnimationEventsToMainThreadOnImplThread(scoped_ptr<Animatio
nEventsVector>, double wallClockTime) OVERRIDE { } | 93 virtual void postAnimationEventsToMainThreadOnImplThread(scoped_ptr<Animatio
nEventsVector>, double wallClockTime) OVERRIDE { } |
90 virtual bool reduceContentsTextureMemoryOnImplThread(size_t limitBytes, int
priorityCutoff) OVERRIDE { return m_reduceMemoryResult; } | 94 virtual bool reduceContentsTextureMemoryOnImplThread(size_t limitBytes, int
priorityCutoff) OVERRIDE { return m_reduceMemoryResult; } |
91 | 95 |
92 void setReduceMemoryResult(bool reduceMemoryResult) { m_reduceMemoryResult =
reduceMemoryResult; } | 96 void setReduceMemoryResult(bool reduceMemoryResult) { m_reduceMemoryResult =
reduceMemoryResult; } |
93 | 97 |
94 scoped_ptr<LayerTreeHostImpl> createLayerTreeHost(bool partialSwap, scoped_p
tr<GraphicsContext> graphicsContext, scoped_ptr<LayerImpl> root) | 98 scoped_ptr<LayerTreeHostImpl> createLayerTreeHost(bool partialSwap, scoped_p
tr<GraphicsContext> graphicsContext, scoped_ptr<LayerImpl> root) |
95 { | 99 { |
96 Settings::setPartialSwapEnabled(partialSwap); | 100 Settings::setPartialSwapEnabled(partialSwap); |
97 | 101 |
98 LayerTreeSettings settings; | 102 LayerTreeSettings settings; |
99 settings.minimumOcclusionTrackingSize = IntSize(); | 103 settings.minimumOcclusionTrackingSize = IntSize(); |
100 | 104 |
101 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(set
tings, this); | 105 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(set
tings, this, &m_proxy); |
102 | 106 |
103 myHostImpl->initializeRenderer(graphicsContext.Pass()); | 107 myHostImpl->initializeRenderer(graphicsContext.Pass()); |
104 myHostImpl->setViewportSize(IntSize(10, 10), IntSize(10, 10)); | 108 myHostImpl->setViewportSize(IntSize(10, 10), IntSize(10, 10)); |
105 | 109 |
106 root->setAnchorPoint(FloatPoint(0, 0)); | 110 root->setAnchorPoint(FloatPoint(0, 0)); |
107 root->setPosition(FloatPoint(0, 0)); | 111 root->setPosition(FloatPoint(0, 0)); |
108 root->setBounds(IntSize(10, 10)); | 112 root->setBounds(IntSize(10, 10)); |
109 root->setContentBounds(IntSize(10, 10)); | 113 root->setContentBounds(IntSize(10, 10)); |
110 root->setVisibleContentRect(IntRect(0, 0, 10, 10)); | 114 root->setVisibleContentRect(IntRect(0, 0, 10, 10)); |
111 root->setDrawsContent(true); | 115 root->setDrawsContent(true); |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
175 m_hostImpl->drawLayers(frame); | 179 m_hostImpl->drawLayers(frame); |
176 m_hostImpl->didDrawAllLayers(frame); | 180 m_hostImpl->didDrawAllLayers(frame); |
177 } | 181 } |
178 | 182 |
179 protected: | 183 protected: |
180 scoped_ptr<GraphicsContext> createContext() | 184 scoped_ptr<GraphicsContext> createContext() |
181 { | 185 { |
182 return FakeWebCompositorOutputSurface::create(scoped_ptr<WebKit::WebGrap
hicsContext3D>(new FakeWebGraphicsContext3D)).PassAs<GraphicsContext>(); | 186 return FakeWebCompositorOutputSurface::create(scoped_ptr<WebKit::WebGrap
hicsContext3D>(new FakeWebGraphicsContext3D)).PassAs<GraphicsContext>(); |
183 } | 187 } |
184 | 188 |
| 189 FakeProxy m_proxy; |
185 DebugScopedSetImplThread m_alwaysImplThread; | 190 DebugScopedSetImplThread m_alwaysImplThread; |
186 DebugScopedSetMainThreadBlocked m_alwaysMainThreadBlocked; | 191 DebugScopedSetMainThreadBlocked m_alwaysMainThreadBlocked; |
187 | 192 |
188 scoped_ptr<LayerTreeHostImpl> m_hostImpl; | 193 scoped_ptr<LayerTreeHostImpl> m_hostImpl; |
189 bool m_onCanDrawStateChangedCalled; | 194 bool m_onCanDrawStateChangedCalled; |
190 bool m_didRequestCommit; | 195 bool m_didRequestCommit; |
191 bool m_didRequestRedraw; | 196 bool m_didRequestRedraw; |
192 bool m_reduceMemoryResult; | 197 bool m_reduceMemoryResult; |
193 ScopedSettings m_scopedSettings; | 198 ScopedSettings m_scopedSettings; |
194 }; | 199 }; |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
338 | 343 |
339 TEST_P(LayerTreeHostImplTest, scrollWithoutRootLayer) | 344 TEST_P(LayerTreeHostImplTest, scrollWithoutRootLayer) |
340 { | 345 { |
341 // We should not crash when trying to scroll an empty layer tree. | 346 // 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); | 347 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), InputHandlerClient::Wheel)
, InputHandlerClient::ScrollIgnored); |
343 } | 348 } |
344 | 349 |
345 TEST_P(LayerTreeHostImplTest, scrollWithoutRenderer) | 350 TEST_P(LayerTreeHostImplTest, scrollWithoutRenderer) |
346 { | 351 { |
347 LayerTreeSettings settings; | 352 LayerTreeSettings settings; |
348 m_hostImpl = LayerTreeHostImpl::create(settings, this); | 353 m_hostImpl = LayerTreeHostImpl::create(settings, this, &m_proxy); |
349 | 354 |
350 // Initialization will fail here. | 355 // Initialization will fail here. |
351 m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurface::create(scoped
_ptr<WebKit::WebGraphicsContext3D>(new FakeWebGraphicsContext3DMakeCurrentFails)
).PassAs<GraphicsContext>()); | 356 m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurface::create(scoped
_ptr<WebKit::WebGraphicsContext3D>(new FakeWebGraphicsContext3DMakeCurrentFails)
).PassAs<GraphicsContext>()); |
352 m_hostImpl->setViewportSize(IntSize(10, 10), IntSize(10, 10)); | 357 m_hostImpl->setViewportSize(IntSize(10, 10), IntSize(10, 10)); |
353 | 358 |
354 setupScrollAndContentsLayers(IntSize(100, 100)); | 359 setupScrollAndContentsLayers(IntSize(100, 100)); |
355 | 360 |
356 // We should not crash when trying to scroll after the renderer initializati
on fails. | 361 // 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); | 362 EXPECT_EQ(m_hostImpl->scrollBegin(IntPoint(0, 0), InputHandlerClient::Wheel)
, InputHandlerClient::ScrollIgnored); |
358 } | 363 } |
(...skipping 1575 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1934 // where it should request to swap only the subBuffer that is damaged. | 1939 // where it should request to swap only the subBuffer that is damaged. |
1935 TEST_P(LayerTreeHostImplTest, partialSwapReceivesDamageRect) | 1940 TEST_P(LayerTreeHostImplTest, partialSwapReceivesDamageRect) |
1936 { | 1941 { |
1937 scoped_ptr<GraphicsContext> outputSurface = FakeWebCompositorOutputSurface::
create(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapTrackerContext)).
PassAs<GraphicsContext>(); | 1942 scoped_ptr<GraphicsContext> outputSurface = FakeWebCompositorOutputSurface::
create(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapTrackerContext)).
PassAs<GraphicsContext>(); |
1938 PartialSwapTrackerContext* partialSwapTracker = static_cast<PartialSwapTrack
erContext*>(outputSurface->context3D()); | 1943 PartialSwapTrackerContext* partialSwapTracker = static_cast<PartialSwapTrack
erContext*>(outputSurface->context3D()); |
1939 | 1944 |
1940 // This test creates its own LayerTreeHostImpl, so | 1945 // This test creates its own LayerTreeHostImpl, so |
1941 // that we can force partial swap enabled. | 1946 // that we can force partial swap enabled. |
1942 LayerTreeSettings settings; | 1947 LayerTreeSettings settings; |
1943 Settings::setPartialSwapEnabled(true); | 1948 Settings::setPartialSwapEnabled(true); |
1944 scoped_ptr<LayerTreeHostImpl> layerTreeHostImpl = LayerTreeHostImpl::create(
settings, this); | 1949 scoped_ptr<LayerTreeHostImpl> layerTreeHostImpl = LayerTreeHostImpl::create(
settings, this, &m_proxy); |
1945 layerTreeHostImpl->initializeRenderer(outputSurface.Pass()); | 1950 layerTreeHostImpl->initializeRenderer(outputSurface.Pass()); |
1946 layerTreeHostImpl->setViewportSize(IntSize(500, 500), IntSize(500, 500)); | 1951 layerTreeHostImpl->setViewportSize(IntSize(500, 500), IntSize(500, 500)); |
1947 | 1952 |
1948 scoped_ptr<LayerImpl> root = FakeDrawableLayerImpl::create(1); | 1953 scoped_ptr<LayerImpl> root = FakeDrawableLayerImpl::create(1); |
1949 scoped_ptr<LayerImpl> child = FakeDrawableLayerImpl::create(2); | 1954 scoped_ptr<LayerImpl> child = FakeDrawableLayerImpl::create(2); |
1950 child->setPosition(FloatPoint(12, 13)); | 1955 child->setPosition(FloatPoint(12, 13)); |
1951 child->setAnchorPoint(FloatPoint(0, 0)); | 1956 child->setAnchorPoint(FloatPoint(0, 0)); |
1952 child->setBounds(IntSize(14, 15)); | 1957 child->setBounds(IntSize(14, 15)); |
1953 child->setContentBounds(IntSize(14, 15)); | 1958 child->setContentBounds(IntSize(14, 15)); |
1954 child->setDrawsContent(true); | 1959 child->setDrawsContent(true); |
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2214 } | 2219 } |
2215 | 2220 |
2216 // Unlimited texture size. | 2221 // Unlimited texture size. |
2217 virtual void getIntegerv(WGC3Denum pname, WGC3Dint* value) | 2222 virtual void getIntegerv(WGC3Denum pname, WGC3Dint* value) |
2218 { | 2223 { |
2219 if (pname == GL_MAX_TEXTURE_SIZE) | 2224 if (pname == GL_MAX_TEXTURE_SIZE) |
2220 *value = 8192; | 2225 *value = 8192; |
2221 } | 2226 } |
2222 }; | 2227 }; |
2223 | 2228 |
2224 static scoped_ptr<LayerTreeHostImpl> setupLayersForOpacity(bool partialSwap, Lay
erTreeHostImplClient* client) | 2229 static scoped_ptr<LayerTreeHostImpl> setupLayersForOpacity(bool partialSwap, Lay
erTreeHostImplClient* client, Proxy* proxy) |
2225 { | 2230 { |
2226 Settings::setPartialSwapEnabled(partialSwap); | 2231 Settings::setPartialSwapEnabled(partialSwap); |
2227 | 2232 |
2228 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create
(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi
csContext>(); | 2233 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create
(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi
csContext>(); |
2229 | 2234 |
2230 LayerTreeSettings settings; | 2235 LayerTreeSettings settings; |
2231 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, client); | 2236 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, client, proxy); |
2232 myHostImpl->initializeRenderer(context.Pass()); | 2237 myHostImpl->initializeRenderer(context.Pass()); |
2233 myHostImpl->setViewportSize(IntSize(100, 100), IntSize(100, 100)); | 2238 myHostImpl->setViewportSize(IntSize(100, 100), IntSize(100, 100)); |
2234 | 2239 |
2235 /* | 2240 /* |
2236 Layers are created as follows: | 2241 Layers are created as follows: |
2237 | 2242 |
2238 +--------------------+ | 2243 +--------------------+ |
2239 | 1 | | 2244 | 1 | |
2240 | +-----------+ | | 2245 | +-----------+ | |
2241 | | 2 | | | 2246 | | 2 | | |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2284 | 2289 |
2285 child->addChild(grandChild.Pass()); | 2290 child->addChild(grandChild.Pass()); |
2286 root->addChild(child.Pass()); | 2291 root->addChild(child.Pass()); |
2287 | 2292 |
2288 myHostImpl->setRootLayer(root.Pass()); | 2293 myHostImpl->setRootLayer(root.Pass()); |
2289 return myHostImpl.Pass(); | 2294 return myHostImpl.Pass(); |
2290 } | 2295 } |
2291 | 2296 |
2292 TEST_P(LayerTreeHostImplTest, contributingLayerEmptyScissorPartialSwap) | 2297 TEST_P(LayerTreeHostImplTest, contributingLayerEmptyScissorPartialSwap) |
2293 { | 2298 { |
2294 scoped_ptr<LayerTreeHostImpl> myHostImpl = setupLayersForOpacity(true, this)
; | 2299 scoped_ptr<LayerTreeHostImpl> myHostImpl = setupLayersForOpacity(true, this,
&m_proxy); |
2295 | 2300 |
2296 { | 2301 { |
2297 LayerTreeHostImpl::FrameData frame; | 2302 LayerTreeHostImpl::FrameData frame; |
2298 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 2303 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
2299 | 2304 |
2300 // Just for consistency, the most interesting stuff already happened | 2305 // Just for consistency, the most interesting stuff already happened |
2301 myHostImpl->drawLayers(frame); | 2306 myHostImpl->drawLayers(frame); |
2302 myHostImpl->didDrawAllLayers(frame); | 2307 myHostImpl->didDrawAllLayers(frame); |
2303 | 2308 |
2304 // Verify all quads have been computed | 2309 // Verify all quads have been computed |
2305 ASSERT_EQ(2U, frame.renderPasses.size()); | 2310 ASSERT_EQ(2U, frame.renderPasses.size()); |
2306 ASSERT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 2311 ASSERT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
2307 ASSERT_EQ(1U, frame.renderPasses[1]->quadList().size()); | 2312 ASSERT_EQ(1U, frame.renderPasses[1]->quadList().size()); |
2308 EXPECT_EQ(DrawQuad::SolidColor, frame.renderPasses[0]->quadList()[0]->ma
terial()); | 2313 EXPECT_EQ(DrawQuad::SolidColor, frame.renderPasses[0]->quadList()[0]->ma
terial()); |
2309 EXPECT_EQ(DrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->ma
terial()); | 2314 EXPECT_EQ(DrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->ma
terial()); |
2310 } | 2315 } |
2311 } | 2316 } |
2312 | 2317 |
2313 TEST_P(LayerTreeHostImplTest, contributingLayerEmptyScissorNoPartialSwap) | 2318 TEST_P(LayerTreeHostImplTest, contributingLayerEmptyScissorNoPartialSwap) |
2314 { | 2319 { |
2315 scoped_ptr<LayerTreeHostImpl> myHostImpl = setupLayersForOpacity(false, this
); | 2320 scoped_ptr<LayerTreeHostImpl> myHostImpl = setupLayersForOpacity(false, this
, &m_proxy); |
2316 | 2321 |
2317 { | 2322 { |
2318 LayerTreeHostImpl::FrameData frame; | 2323 LayerTreeHostImpl::FrameData frame; |
2319 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 2324 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
2320 | 2325 |
2321 // Just for consistency, the most interesting stuff already happened | 2326 // Just for consistency, the most interesting stuff already happened |
2322 myHostImpl->drawLayers(frame); | 2327 myHostImpl->drawLayers(frame); |
2323 myHostImpl->didDrawAllLayers(frame); | 2328 myHostImpl->didDrawAllLayers(frame); |
2324 | 2329 |
2325 // Verify all quads have been computed | 2330 // Verify all quads have been computed |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2371 m_hostImpl->initializeRenderer(createContext()); | 2376 m_hostImpl->initializeRenderer(createContext()); |
2372 | 2377 |
2373 EXPECT_TRUE(root->didLoseContextCalled()); | 2378 EXPECT_TRUE(root->didLoseContextCalled()); |
2374 EXPECT_TRUE(layer1->didLoseContextCalled()); | 2379 EXPECT_TRUE(layer1->didLoseContextCalled()); |
2375 EXPECT_TRUE(layer2->didLoseContextCalled()); | 2380 EXPECT_TRUE(layer2->didLoseContextCalled()); |
2376 } | 2381 } |
2377 | 2382 |
2378 TEST_P(LayerTreeHostImplTest, finishAllRenderingAfterContextLost) | 2383 TEST_P(LayerTreeHostImplTest, finishAllRenderingAfterContextLost) |
2379 { | 2384 { |
2380 LayerTreeSettings settings; | 2385 LayerTreeSettings settings; |
2381 m_hostImpl = LayerTreeHostImpl::create(settings, this); | 2386 m_hostImpl = LayerTreeHostImpl::create(settings, this, &m_proxy); |
2382 | 2387 |
2383 // The context initialization will fail, but we should still be able to call
finishAllRendering() without any ill effects. | 2388 // The context initialization will fail, but we should still be able to call
finishAllRendering() without any ill effects. |
2384 m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurface::create(scoped
_ptr<WebKit::WebGraphicsContext3D>(new FakeWebGraphicsContext3DMakeCurrentFails)
).PassAs<GraphicsContext>()); | 2389 m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurface::create(scoped
_ptr<WebKit::WebGraphicsContext3D>(new FakeWebGraphicsContext3DMakeCurrentFails)
).PassAs<GraphicsContext>()); |
2385 m_hostImpl->finishAllRendering(); | 2390 m_hostImpl->finishAllRendering(); |
2386 } | 2391 } |
2387 | 2392 |
2388 class FakeWebGraphicsContext3DMakeCurrentFailsEventually : public FakeWebGraphic
sContext3D { | 2393 class FakeWebGraphicsContext3DMakeCurrentFailsEventually : public FakeWebGraphic
sContext3D { |
2389 public: | 2394 public: |
2390 explicit FakeWebGraphicsContext3DMakeCurrentFailsEventually(unsigned succeed
Count) : m_succeedCount(succeedCount) { } | 2395 explicit FakeWebGraphicsContext3DMakeCurrentFailsEventually(unsigned succeed
Count) : m_succeedCount(succeedCount) { } |
2391 virtual bool makeContextCurrent() { | 2396 virtual bool makeContextCurrent() { |
2392 if (!m_succeedCount) | 2397 if (!m_succeedCount) |
2393 return false; | 2398 return false; |
2394 --m_succeedCount; | 2399 --m_succeedCount; |
2395 return true; | 2400 return true; |
2396 } | 2401 } |
2397 | 2402 |
2398 private: | 2403 private: |
2399 unsigned m_succeedCount; | 2404 unsigned m_succeedCount; |
2400 }; | 2405 }; |
2401 | 2406 |
2402 TEST_P(LayerTreeHostImplTest, contextLostDuringInitialize) | 2407 TEST_P(LayerTreeHostImplTest, contextLostDuringInitialize) |
2403 { | 2408 { |
2404 LayerTreeSettings settings; | 2409 LayerTreeSettings settings; |
2405 m_hostImpl = LayerTreeHostImpl::create(settings, this); | 2410 m_hostImpl = LayerTreeHostImpl::create(settings, this, &m_proxy); |
2406 | 2411 |
2407 // Initialize into a known successful state. | 2412 // Initialize into a known successful state. |
2408 EXPECT_TRUE(m_hostImpl->initializeRenderer(createContext())); | 2413 EXPECT_TRUE(m_hostImpl->initializeRenderer(createContext())); |
2409 EXPECT_TRUE(m_hostImpl->context()); | 2414 EXPECT_TRUE(m_hostImpl->context()); |
2410 EXPECT_TRUE(m_hostImpl->renderer()); | 2415 EXPECT_TRUE(m_hostImpl->renderer()); |
2411 EXPECT_TRUE(m_hostImpl->resourceProvider()); | 2416 EXPECT_TRUE(m_hostImpl->resourceProvider()); |
2412 | 2417 |
2413 // We will make the context get lost after a numer of makeContextCurrent | 2418 // We will make the context get lost after a numer of makeContextCurrent |
2414 // calls. The exact number of calls to make it succeed is dependent on the | 2419 // calls. The exact number of calls to make it succeed is dependent on the |
2415 // implementation and doesn't really matter (i.e. can be changed to make the | 2420 // implementation and doesn't really matter (i.e. can be changed to make the |
(...skipping 569 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2985 public: | 2990 public: |
2986 using GLRenderer::releaseRenderPassTextures; | 2991 using GLRenderer::releaseRenderPassTextures; |
2987 }; | 2992 }; |
2988 | 2993 |
2989 TEST_P(LayerTreeHostImplTest, textureCachingWithClipping) | 2994 TEST_P(LayerTreeHostImplTest, textureCachingWithClipping) |
2990 { | 2995 { |
2991 Settings::setPartialSwapEnabled(true); | 2996 Settings::setPartialSwapEnabled(true); |
2992 | 2997 |
2993 LayerTreeSettings settings; | 2998 LayerTreeSettings settings; |
2994 settings.minimumOcclusionTrackingSize = IntSize(); | 2999 settings.minimumOcclusionTrackingSize = IntSize(); |
2995 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this); | 3000 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); |
2996 | 3001 |
2997 LayerImpl* rootPtr; | 3002 LayerImpl* rootPtr; |
2998 LayerImpl* surfaceLayerPtr; | 3003 LayerImpl* surfaceLayerPtr; |
2999 | 3004 |
3000 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create
(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi
csContext>(); | 3005 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create
(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi
csContext>(); |
3001 | 3006 |
3002 IntSize rootSize(100, 100); | 3007 IntSize rootSize(100, 100); |
3003 | 3008 |
3004 myHostImpl->initializeRenderer(context.Pass()); | 3009 myHostImpl->initializeRenderer(context.Pass()); |
3005 myHostImpl->setViewportSize(IntSize(rootSize.width(), rootSize.height()), In
tSize(rootSize.width(), rootSize.height())); | 3010 myHostImpl->setViewportSize(IntSize(rootSize.width(), rootSize.height()), In
tSize(rootSize.width(), rootSize.height())); |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3082 myHostImpl->didDrawAllLayers(frame); | 3087 myHostImpl->didDrawAllLayers(frame); |
3083 } | 3088 } |
3084 } | 3089 } |
3085 | 3090 |
3086 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusion) | 3091 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusion) |
3087 { | 3092 { |
3088 Settings::setPartialSwapEnabled(false); | 3093 Settings::setPartialSwapEnabled(false); |
3089 | 3094 |
3090 LayerTreeSettings settings; | 3095 LayerTreeSettings settings; |
3091 settings.minimumOcclusionTrackingSize = IntSize(); | 3096 settings.minimumOcclusionTrackingSize = IntSize(); |
3092 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this); | 3097 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); |
3093 | 3098 |
3094 // Layers are structure as follows: | 3099 // Layers are structure as follows: |
3095 // | 3100 // |
3096 // R +-- S1 +- L10 (owning) | 3101 // R +-- S1 +- L10 (owning) |
3097 // | +- L11 | 3102 // | +- L11 |
3098 // | +- L12 | 3103 // | +- L12 |
3099 // | | 3104 // | |
3100 // +-- S2 +- L20 (owning) | 3105 // +-- S2 +- L20 (owning) |
3101 // +- L21 | 3106 // +- L21 |
3102 // | 3107 // |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3198 } | 3203 } |
3199 | 3204 |
3200 } | 3205 } |
3201 | 3206 |
3202 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionEarlyOut) | 3207 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionEarlyOut) |
3203 { | 3208 { |
3204 Settings::setPartialSwapEnabled(false); | 3209 Settings::setPartialSwapEnabled(false); |
3205 | 3210 |
3206 LayerTreeSettings settings; | 3211 LayerTreeSettings settings; |
3207 settings.minimumOcclusionTrackingSize = IntSize(); | 3212 settings.minimumOcclusionTrackingSize = IntSize(); |
3208 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this); | 3213 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); |
3209 | 3214 |
3210 // Layers are structure as follows: | 3215 // Layers are structure as follows: |
3211 // | 3216 // |
3212 // R +-- S1 +- L10 (owning, non drawing) | 3217 // R +-- S1 +- L10 (owning, non drawing) |
3213 // | +- L11 (corner, unoccluded) | 3218 // | +- L11 (corner, unoccluded) |
3214 // | +- L12 (corner, unoccluded) | 3219 // | +- L12 (corner, unoccluded) |
3215 // | +- L13 (corner, unoccluded) | 3220 // | +- L13 (corner, unoccluded) |
3216 // | +- L14 (corner, entirely occluded) | 3221 // | +- L14 (corner, entirely occluded) |
3217 // | | 3222 // | |
3218 // +-- S2 +- L20 (owning, drawing) | 3223 // +-- S2 +- L20 (owning, drawing) |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3314 myHostImpl->didDrawAllLayers(frame); | 3319 myHostImpl->didDrawAllLayers(frame); |
3315 } | 3320 } |
3316 } | 3321 } |
3317 | 3322 |
3318 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionExternalOverInternal) | 3323 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionExternalOverInternal) |
3319 { | 3324 { |
3320 Settings::setPartialSwapEnabled(false); | 3325 Settings::setPartialSwapEnabled(false); |
3321 | 3326 |
3322 LayerTreeSettings settings; | 3327 LayerTreeSettings settings; |
3323 settings.minimumOcclusionTrackingSize = IntSize(); | 3328 settings.minimumOcclusionTrackingSize = IntSize(); |
3324 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this); | 3329 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); |
3325 | 3330 |
3326 // Layers are structured as follows: | 3331 // Layers are structured as follows: |
3327 // | 3332 // |
3328 // R +-- S1 +- L10 (owning, drawing) | 3333 // R +-- S1 +- L10 (owning, drawing) |
3329 // | +- L11 (corner, occluded by L12) | 3334 // | +- L11 (corner, occluded by L12) |
3330 // | +- L12 (opposite corner) | 3335 // | +- L12 (opposite corner) |
3331 // | | 3336 // | |
3332 // +-- S2 +- L20 (owning, drawing) | 3337 // +-- S2 +- L20 (owning, drawing) |
3333 // | 3338 // |
3334 | 3339 |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3402 myHostImpl->drawLayers(frame); | 3407 myHostImpl->drawLayers(frame); |
3403 myHostImpl->didDrawAllLayers(frame); | 3408 myHostImpl->didDrawAllLayers(frame); |
3404 } | 3409 } |
3405 } | 3410 } |
3406 | 3411 |
3407 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionExternalNotAligned) | 3412 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionExternalNotAligned) |
3408 { | 3413 { |
3409 Settings::setPartialSwapEnabled(false); | 3414 Settings::setPartialSwapEnabled(false); |
3410 | 3415 |
3411 LayerTreeSettings settings; | 3416 LayerTreeSettings settings; |
3412 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this); | 3417 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); |
3413 | 3418 |
3414 // Layers are structured as follows: | 3419 // Layers are structured as follows: |
3415 // | 3420 // |
3416 // R +-- S1 +- L10 (rotated, drawing) | 3421 // R +-- S1 +- L10 (rotated, drawing) |
3417 // +- L11 (occupies half surface) | 3422 // +- L11 (occupies half surface) |
3418 | 3423 |
3419 LayerImpl* rootPtr; | 3424 LayerImpl* rootPtr; |
3420 LayerImpl* layerS1Ptr; | 3425 LayerImpl* layerS1Ptr; |
3421 | 3426 |
3422 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create
(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi
csContext>(); | 3427 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create
(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi
csContext>(); |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3477 myHostImpl->didDrawAllLayers(frame); | 3482 myHostImpl->didDrawAllLayers(frame); |
3478 } | 3483 } |
3479 } | 3484 } |
3480 | 3485 |
3481 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionPartialSwap) | 3486 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionPartialSwap) |
3482 { | 3487 { |
3483 Settings::setPartialSwapEnabled(true); | 3488 Settings::setPartialSwapEnabled(true); |
3484 | 3489 |
3485 LayerTreeSettings settings; | 3490 LayerTreeSettings settings; |
3486 settings.minimumOcclusionTrackingSize = IntSize(); | 3491 settings.minimumOcclusionTrackingSize = IntSize(); |
3487 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this); | 3492 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); |
3488 | 3493 |
3489 // Layers are structure as follows: | 3494 // Layers are structure as follows: |
3490 // | 3495 // |
3491 // R +-- S1 +- L10 (owning) | 3496 // R +-- S1 +- L10 (owning) |
3492 // | +- L11 | 3497 // | +- L11 |
3493 // | +- L12 | 3498 // | +- L12 |
3494 // | | 3499 // | |
3495 // +-- S2 +- L20 (owning) | 3500 // +-- S2 +- L20 (owning) |
3496 // +- L21 | 3501 // +- L21 |
3497 // | 3502 // |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3590 myHostImpl->didDrawAllLayers(frame); | 3595 myHostImpl->didDrawAllLayers(frame); |
3591 } | 3596 } |
3592 } | 3597 } |
3593 | 3598 |
3594 TEST_P(LayerTreeHostImplTest, textureCachingWithScissor) | 3599 TEST_P(LayerTreeHostImplTest, textureCachingWithScissor) |
3595 { | 3600 { |
3596 Settings::setPartialSwapEnabled(false); | 3601 Settings::setPartialSwapEnabled(false); |
3597 | 3602 |
3598 LayerTreeSettings settings; | 3603 LayerTreeSettings settings; |
3599 settings.minimumOcclusionTrackingSize = IntSize(); | 3604 settings.minimumOcclusionTrackingSize = IntSize(); |
3600 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this); | 3605 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); |
3601 | 3606 |
3602 /* | 3607 /* |
3603 Layers are created as follows: | 3608 Layers are created as follows: |
3604 | 3609 |
3605 +--------------------+ | 3610 +--------------------+ |
3606 | 1 | | 3611 | 1 | |
3607 | +-----------+ | | 3612 | +-----------+ | |
3608 | | 2 | | | 3613 | | 2 | | |
3609 | | +-------------------+ | 3614 | | +-------------------+ |
3610 | | | 3 | | 3615 | | | 3 | |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3697 // We should have a cached texture for surface 2 again even though it was da
maged. | 3702 // We should have a cached texture for surface 2 again even though it was da
maged. |
3698 EXPECT_TRUE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(child
PassId)); | 3703 EXPECT_TRUE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(child
PassId)); |
3699 } | 3704 } |
3700 | 3705 |
3701 TEST_P(LayerTreeHostImplTest, surfaceTextureCaching) | 3706 TEST_P(LayerTreeHostImplTest, surfaceTextureCaching) |
3702 { | 3707 { |
3703 Settings::setPartialSwapEnabled(true); | 3708 Settings::setPartialSwapEnabled(true); |
3704 | 3709 |
3705 LayerTreeSettings settings; | 3710 LayerTreeSettings settings; |
3706 settings.minimumOcclusionTrackingSize = IntSize(); | 3711 settings.minimumOcclusionTrackingSize = IntSize(); |
3707 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this); | 3712 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); |
3708 | 3713 |
3709 LayerImpl* rootPtr; | 3714 LayerImpl* rootPtr; |
3710 LayerImpl* intermediateLayerPtr; | 3715 LayerImpl* intermediateLayerPtr; |
3711 LayerImpl* surfaceLayerPtr; | 3716 LayerImpl* surfaceLayerPtr; |
3712 LayerImpl* childPtr; | 3717 LayerImpl* childPtr; |
3713 | 3718 |
3714 setupLayersForTextureCaching(myHostImpl.get(), rootPtr, intermediateLayerPtr
, surfaceLayerPtr, childPtr, IntSize(100, 100)); | 3719 setupLayersForTextureCaching(myHostImpl.get(), rootPtr, intermediateLayerPtr
, surfaceLayerPtr, childPtr, IntSize(100, 100)); |
3715 | 3720 |
3716 { | 3721 { |
3717 LayerTreeHostImpl::FrameData frame; | 3722 LayerTreeHostImpl::FrameData frame; |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3858 myHostImpl->didDrawAllLayers(frame); | 3863 myHostImpl->didDrawAllLayers(frame); |
3859 } | 3864 } |
3860 } | 3865 } |
3861 | 3866 |
3862 TEST_P(LayerTreeHostImplTest, surfaceTextureCachingNoPartialSwap) | 3867 TEST_P(LayerTreeHostImplTest, surfaceTextureCachingNoPartialSwap) |
3863 { | 3868 { |
3864 Settings::setPartialSwapEnabled(false); | 3869 Settings::setPartialSwapEnabled(false); |
3865 | 3870 |
3866 LayerTreeSettings settings; | 3871 LayerTreeSettings settings; |
3867 settings.minimumOcclusionTrackingSize = IntSize(); | 3872 settings.minimumOcclusionTrackingSize = IntSize(); |
3868 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this); | 3873 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); |
3869 | 3874 |
3870 LayerImpl* rootPtr; | 3875 LayerImpl* rootPtr; |
3871 LayerImpl* intermediateLayerPtr; | 3876 LayerImpl* intermediateLayerPtr; |
3872 LayerImpl* surfaceLayerPtr; | 3877 LayerImpl* surfaceLayerPtr; |
3873 LayerImpl* childPtr; | 3878 LayerImpl* childPtr; |
3874 | 3879 |
3875 setupLayersForTextureCaching(myHostImpl.get(), rootPtr, intermediateLayerPtr
, surfaceLayerPtr, childPtr, IntSize(100, 100)); | 3880 setupLayersForTextureCaching(myHostImpl.get(), rootPtr, intermediateLayerPtr
, surfaceLayerPtr, childPtr, IntSize(100, 100)); |
3876 | 3881 |
3877 { | 3882 { |
3878 LayerTreeHostImpl::FrameData frame; | 3883 LayerTreeHostImpl::FrameData frame; |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4050 EXPECT_FALSE(m_didRequestCommit); | 4055 EXPECT_FALSE(m_didRequestCommit); |
4051 } | 4056 } |
4052 | 4057 |
4053 struct RenderPassRemovalTestData : public LayerTreeHostImpl::FrameData { | 4058 struct RenderPassRemovalTestData : public LayerTreeHostImpl::FrameData { |
4054 ScopedPtrHashMap<RenderPass::Id, TestRenderPass> renderPassCache; | 4059 ScopedPtrHashMap<RenderPass::Id, TestRenderPass> renderPassCache; |
4055 scoped_ptr<SharedQuadState> sharedQuadState; | 4060 scoped_ptr<SharedQuadState> sharedQuadState; |
4056 }; | 4061 }; |
4057 | 4062 |
4058 class TestRenderer : public GLRenderer, public RendererClient { | 4063 class TestRenderer : public GLRenderer, public RendererClient { |
4059 public: | 4064 public: |
4060 static scoped_ptr<TestRenderer> create(ResourceProvider* resourceProvider) | 4065 static scoped_ptr<TestRenderer> create(ResourceProvider* resourceProvider, P
roxy* proxy) |
4061 { | 4066 { |
4062 scoped_ptr<TestRenderer> renderer(new TestRenderer(resourceProvider)); | 4067 scoped_ptr<TestRenderer> renderer(new TestRenderer(resourceProvider, pro
xy)); |
4063 if (!renderer->initialize()) | 4068 if (!renderer->initialize()) |
4064 return scoped_ptr<TestRenderer>(); | 4069 return scoped_ptr<TestRenderer>(); |
4065 | 4070 |
4066 return renderer.Pass(); | 4071 return renderer.Pass(); |
4067 } | 4072 } |
4068 | 4073 |
4069 void clearCachedTextures() { m_textures.clear(); } | 4074 void clearCachedTextures() { m_textures.clear(); } |
4070 void setHaveCachedResourcesForRenderPassId(RenderPass::Id id) { m_textures.i
nsert(id); } | 4075 void setHaveCachedResourcesForRenderPassId(RenderPass::Id id) { m_textures.i
nsert(id); } |
4071 | 4076 |
4072 virtual bool haveCachedResourcesForRenderPassId(RenderPass::Id id) const OVE
RRIDE { return m_textures.count(id); } | 4077 virtual bool haveCachedResourcesForRenderPassId(RenderPass::Id id) const OVE
RRIDE { return m_textures.count(id); } |
4073 | 4078 |
4074 // RendererClient implementation. | 4079 // RendererClient implementation. |
4075 virtual const IntSize& deviceViewportSize() const OVERRIDE { return m_viewpo
rtSize; } | 4080 virtual const IntSize& deviceViewportSize() const OVERRIDE { return m_viewpo
rtSize; } |
4076 virtual const LayerTreeSettings& settings() const OVERRIDE { return m_settin
gs; } | 4081 virtual const LayerTreeSettings& settings() const OVERRIDE { return m_settin
gs; } |
4077 virtual void didLoseContext() OVERRIDE { } | 4082 virtual void didLoseContext() OVERRIDE { } |
4078 virtual void onSwapBuffersComplete() OVERRIDE { } | 4083 virtual void onSwapBuffersComplete() OVERRIDE { } |
4079 virtual void setFullRootLayerDamage() OVERRIDE { } | 4084 virtual void setFullRootLayerDamage() OVERRIDE { } |
4080 virtual void setManagedMemoryPolicy(const ManagedMemoryPolicy& policy) OVERR
IDE { } | 4085 virtual void setManagedMemoryPolicy(const ManagedMemoryPolicy& policy) OVERR
IDE { } |
4081 virtual void enforceManagedMemoryPolicy(const ManagedMemoryPolicy& policy) O
VERRIDE { } | 4086 virtual void enforceManagedMemoryPolicy(const ManagedMemoryPolicy& policy) O
VERRIDE { } |
4082 | 4087 |
4083 protected: | 4088 protected: |
4084 TestRenderer(ResourceProvider* resourceProvider) : GLRenderer(this, resource
Provider) { } | 4089 TestRenderer(ResourceProvider* resourceProvider, Proxy* proxy) : GLRenderer(
this, resourceProvider, proxy->hasImplThread()) { } |
4085 | 4090 |
4086 private: | 4091 private: |
4087 LayerTreeSettings m_settings; | 4092 LayerTreeSettings m_settings; |
4088 IntSize m_viewportSize; | 4093 IntSize m_viewportSize; |
4089 base::hash_set<RenderPass::Id> m_textures; | 4094 base::hash_set<RenderPass::Id> m_textures; |
4090 }; | 4095 }; |
4091 | 4096 |
4092 static void configureRenderPassTestData(const char* testScript, RenderPassRemova
lTestData& testData, TestRenderer* renderer) | 4097 static void configureRenderPassTestData(const char* testScript, RenderPassRemova
lTestData& testData, TestRenderer* renderer) |
4093 { | 4098 { |
4094 renderer->clearCachedTextures(); | 4099 renderer->clearCachedTextures(); |
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4358 dumpRenderPassTestData(testData, actualResult); | 4363 dumpRenderPassTestData(testData, actualResult); |
4359 EXPECT_STREQ(testCase.expectedResult, actualResult) << "In test case: " << t
estCase.name; | 4364 EXPECT_STREQ(testCase.expectedResult, actualResult) << "In test case: " << t
estCase.name; |
4360 } | 4365 } |
4361 | 4366 |
4362 TEST_P(LayerTreeHostImplTest, testRemoveRenderPasses) | 4367 TEST_P(LayerTreeHostImplTest, testRemoveRenderPasses) |
4363 { | 4368 { |
4364 scoped_ptr<GraphicsContext> context(createContext()); | 4369 scoped_ptr<GraphicsContext> context(createContext()); |
4365 ASSERT_TRUE(context->context3D()); | 4370 ASSERT_TRUE(context->context3D()); |
4366 scoped_ptr<ResourceProvider> resourceProvider(ResourceProvider::create(conte
xt.get())); | 4371 scoped_ptr<ResourceProvider> resourceProvider(ResourceProvider::create(conte
xt.get())); |
4367 | 4372 |
4368 scoped_ptr<TestRenderer> renderer(TestRenderer::create(resourceProvider.get(
))); | 4373 scoped_ptr<TestRenderer> renderer(TestRenderer::create(resourceProvider.get(
), &m_proxy)); |
4369 | 4374 |
4370 int testCaseIndex = 0; | 4375 int testCaseIndex = 0; |
4371 while (removeRenderPassesCases[testCaseIndex].name) { | 4376 while (removeRenderPassesCases[testCaseIndex].name) { |
4372 RenderPassRemovalTestData testData; | 4377 RenderPassRemovalTestData testData; |
4373 configureRenderPassTestData(removeRenderPassesCases[testCaseIndex].initS
cript, testData, renderer.get()); | 4378 configureRenderPassTestData(removeRenderPassesCases[testCaseIndex].initS
cript, testData, renderer.get()); |
4374 LayerTreeHostImpl::removeRenderPasses(LayerTreeHostImpl::CullRenderPasse
sWithCachedTextures(*renderer), testData); | 4379 LayerTreeHostImpl::removeRenderPasses(LayerTreeHostImpl::CullRenderPasse
sWithCachedTextures(*renderer), testData); |
4375 verifyRenderPassTestData(removeRenderPassesCases[testCaseIndex], testDat
a); | 4380 verifyRenderPassTestData(removeRenderPassesCases[testCaseIndex], testDat
a); |
4376 testCaseIndex++; | 4381 testCaseIndex++; |
4377 } | 4382 } |
4378 } | 4383 } |
4379 | 4384 |
4380 INSTANTIATE_TEST_CASE_P(LayerTreeHostImplTests, | 4385 INSTANTIATE_TEST_CASE_P(LayerTreeHostImplTests, |
4381 LayerTreeHostImplTest, | 4386 LayerTreeHostImplTest, |
4382 ::testing::Values(false, true)); | 4387 ::testing::Values(false, true)); |
4383 | 4388 |
4384 } // namespace | 4389 } // namespace |
OLD | NEW |