OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "config.h" | 5 #include "config.h" |
6 | 6 |
7 #include "cc/layer_tree_host_impl.h" | 7 #include "cc/layer_tree_host_impl.h" |
8 | 8 |
9 #include "base/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/quad_sink.h" | 18 #include "cc/quad_sink.h" |
19 #include "cc/render_pass_draw_quad.h" | 19 #include "cc/render_pass_draw_quad.h" |
20 #include "cc/scrollbar_geometry_fixed_thumb.h" | 20 #include "cc/scrollbar_geometry_fixed_thumb.h" |
21 #include "cc/scrollbar_layer_impl.h" | 21 #include "cc/scrollbar_layer_impl.h" |
22 #include "cc/settings.h" | 22 #include "cc/settings.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_proxy.h" | |
27 #include "cc/test/fake_web_compositor_output_surface.h" | 26 #include "cc/test/fake_web_compositor_output_surface.h" |
28 #include "cc/test/fake_web_graphics_context_3d.h" | 27 #include "cc/test/fake_web_graphics_context_3d.h" |
29 #include "cc/test/fake_web_scrollbar_theme_geometry.h" | 28 #include "cc/test/fake_web_scrollbar_theme_geometry.h" |
30 #include "cc/test/geometry_test_utils.h" | 29 #include "cc/test/geometry_test_utils.h" |
31 #include "cc/test/layer_test_common.h" | 30 #include "cc/test/layer_test_common.h" |
32 #include "cc/test/render_pass_test_common.h" | 31 #include "cc/test/render_pass_test_common.h" |
33 #include "cc/test/test_common.h" | 32 #include "cc/test/test_common.h" |
34 #include "cc/texture_draw_quad.h" | 33 #include "cc/texture_draw_quad.h" |
35 #include "cc/texture_layer_impl.h" | 34 #include "cc/texture_layer_impl.h" |
36 #include "cc/tile_draw_quad.h" | 35 #include "cc/tile_draw_quad.h" |
(...skipping 20 matching lines...) Expand all Loading... |
57 using ::testing::_; | 56 using ::testing::_; |
58 | 57 |
59 namespace { | 58 namespace { |
60 | 59 |
61 // This test is parametrized to run all tests with the | 60 // This test is parametrized to run all tests with the |
62 // Settings::pageScalePinchZoomEnabled field enabled and disabled. | 61 // Settings::pageScalePinchZoomEnabled field enabled and disabled. |
63 class LayerTreeHostImplTest : public testing::TestWithParam<bool>, | 62 class LayerTreeHostImplTest : public testing::TestWithParam<bool>, |
64 public LayerTreeHostImplClient { | 63 public LayerTreeHostImplClient { |
65 public: | 64 public: |
66 LayerTreeHostImplTest() | 65 LayerTreeHostImplTest() |
67 : m_proxy(scoped_ptr<Thread>(NULL)) | 66 : m_onCanDrawStateChangedCalled(false) |
68 , m_alwaysImplThread(&m_proxy) | |
69 , m_alwaysMainThreadBlocked(&m_proxy) | |
70 , m_onCanDrawStateChangedCalled(false) | |
71 , m_didRequestCommit(false) | 67 , m_didRequestCommit(false) |
72 , m_didRequestRedraw(false) | 68 , m_didRequestRedraw(false) |
73 , m_reduceMemoryResult(true) | 69 , m_reduceMemoryResult(true) |
74 { | 70 { |
75 media::InitializeMediaLibraryForTesting(); | 71 media::InitializeMediaLibraryForTesting(); |
76 } | 72 } |
77 | 73 |
78 virtual void SetUp() | 74 virtual void SetUp() |
79 { | 75 { |
80 Settings::setPageScalePinchZoomEnabled(GetParam()); | 76 Settings::setPageScalePinchZoomEnabled(GetParam()); |
81 LayerTreeSettings settings; | 77 LayerTreeSettings settings; |
82 settings.minimumOcclusionTrackingSize = gfx::Size(); | 78 settings.minimumOcclusionTrackingSize = gfx::Size(); |
83 | 79 |
84 m_hostImpl = LayerTreeHostImpl::create(settings, this, &m_proxy); | 80 m_hostImpl = LayerTreeHostImpl::create(settings, this); |
85 m_hostImpl->initializeRenderer(createContext()); | 81 m_hostImpl->initializeRenderer(createContext()); |
86 m_hostImpl->setViewportSize(gfx::Size(10, 10), gfx::Size(10, 10)); | 82 m_hostImpl->setViewportSize(gfx::Size(10, 10), gfx::Size(10, 10)); |
87 } | 83 } |
88 | 84 |
89 virtual void TearDown() | 85 virtual void TearDown() |
90 { | 86 { |
91 } | 87 } |
92 | 88 |
93 virtual void didLoseContextOnImplThread() OVERRIDE { } | 89 virtual void didLoseContextOnImplThread() OVERRIDE { } |
94 virtual void onSwapBuffersCompleteOnImplThread() OVERRIDE { } | 90 virtual void onSwapBuffersCompleteOnImplThread() OVERRIDE { } |
95 virtual void onVSyncParametersChanged(base::TimeTicks, base::TimeDelta) OVER
RIDE { } | 91 virtual void onVSyncParametersChanged(base::TimeTicks, base::TimeDelta) OVER
RIDE { } |
96 virtual void onCanDrawStateChanged(bool canDraw) OVERRIDE { m_onCanDrawState
ChangedCalled = true; } | 92 virtual void onCanDrawStateChanged(bool canDraw) OVERRIDE { m_onCanDrawState
ChangedCalled = true; } |
97 virtual void setNeedsRedrawOnImplThread() OVERRIDE { m_didRequestRedraw = tr
ue; } | 93 virtual void setNeedsRedrawOnImplThread() OVERRIDE { m_didRequestRedraw = tr
ue; } |
98 virtual void setNeedsCommitOnImplThread() OVERRIDE { m_didRequestCommit = tr
ue; } | 94 virtual void setNeedsCommitOnImplThread() OVERRIDE { m_didRequestCommit = tr
ue; } |
99 virtual void postAnimationEventsToMainThreadOnImplThread(scoped_ptr<Animatio
nEventsVector>, base::Time wallClockTime) OVERRIDE { } | 95 virtual void postAnimationEventsToMainThreadOnImplThread(scoped_ptr<Animatio
nEventsVector>, base::Time wallClockTime) OVERRIDE { } |
100 virtual bool reduceContentsTextureMemoryOnImplThread(size_t limitBytes, int
priorityCutoff) OVERRIDE { return m_reduceMemoryResult; } | 96 virtual bool reduceContentsTextureMemoryOnImplThread(size_t limitBytes, int
priorityCutoff) OVERRIDE { return m_reduceMemoryResult; } |
101 virtual void sendManagedMemoryStats() OVERRIDE { } | 97 virtual void sendManagedMemoryStats() OVERRIDE { } |
102 | 98 |
103 void setReduceMemoryResult(bool reduceMemoryResult) { m_reduceMemoryResult =
reduceMemoryResult; } | 99 void setReduceMemoryResult(bool reduceMemoryResult) { m_reduceMemoryResult =
reduceMemoryResult; } |
104 | 100 |
105 scoped_ptr<LayerTreeHostImpl> createLayerTreeHost(bool partialSwap, scoped_p
tr<GraphicsContext> graphicsContext, scoped_ptr<LayerImpl> root) | 101 scoped_ptr<LayerTreeHostImpl> createLayerTreeHost(bool partialSwap, scoped_p
tr<GraphicsContext> graphicsContext, scoped_ptr<LayerImpl> root) |
106 { | 102 { |
107 Settings::setPartialSwapEnabled(partialSwap); | 103 Settings::setPartialSwapEnabled(partialSwap); |
108 | 104 |
109 LayerTreeSettings settings; | 105 LayerTreeSettings settings; |
110 settings.minimumOcclusionTrackingSize = gfx::Size(); | 106 settings.minimumOcclusionTrackingSize = gfx::Size(); |
111 | 107 |
112 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(set
tings, this, &m_proxy); | 108 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(set
tings, this); |
113 | 109 |
114 myHostImpl->initializeRenderer(graphicsContext.Pass()); | 110 myHostImpl->initializeRenderer(graphicsContext.Pass()); |
115 myHostImpl->setViewportSize(gfx::Size(10, 10), gfx::Size(10, 10)); | 111 myHostImpl->setViewportSize(gfx::Size(10, 10), gfx::Size(10, 10)); |
116 | 112 |
117 root->setAnchorPoint(gfx::PointF(0, 0)); | 113 root->setAnchorPoint(gfx::PointF(0, 0)); |
118 root->setPosition(gfx::PointF(0, 0)); | 114 root->setPosition(gfx::PointF(0, 0)); |
119 root->setBounds(gfx::Size(10, 10)); | 115 root->setBounds(gfx::Size(10, 10)); |
120 root->setContentBounds(gfx::Size(10, 10)); | 116 root->setContentBounds(gfx::Size(10, 10)); |
121 root->setVisibleContentRect(gfx::Rect(0, 0, 10, 10)); | 117 root->setVisibleContentRect(gfx::Rect(0, 0, 10, 10)); |
122 root->setDrawsContent(true); | 118 root->setDrawsContent(true); |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
186 m_hostImpl->drawLayers(frame); | 182 m_hostImpl->drawLayers(frame); |
187 m_hostImpl->didDrawAllLayers(frame); | 183 m_hostImpl->didDrawAllLayers(frame); |
188 } | 184 } |
189 | 185 |
190 protected: | 186 protected: |
191 scoped_ptr<GraphicsContext> createContext() | 187 scoped_ptr<GraphicsContext> createContext() |
192 { | 188 { |
193 return FakeWebCompositorOutputSurface::create(scoped_ptr<WebKit::WebGrap
hicsContext3D>(new FakeWebGraphicsContext3D)).PassAs<GraphicsContext>(); | 189 return FakeWebCompositorOutputSurface::create(scoped_ptr<WebKit::WebGrap
hicsContext3D>(new FakeWebGraphicsContext3D)).PassAs<GraphicsContext>(); |
194 } | 190 } |
195 | 191 |
196 FakeProxy m_proxy; | |
197 DebugScopedSetImplThread m_alwaysImplThread; | 192 DebugScopedSetImplThread m_alwaysImplThread; |
198 DebugScopedSetMainThreadBlocked m_alwaysMainThreadBlocked; | 193 DebugScopedSetMainThreadBlocked m_alwaysMainThreadBlocked; |
199 | 194 |
200 scoped_ptr<LayerTreeHostImpl> m_hostImpl; | 195 scoped_ptr<LayerTreeHostImpl> m_hostImpl; |
201 bool m_onCanDrawStateChangedCalled; | 196 bool m_onCanDrawStateChangedCalled; |
202 bool m_didRequestCommit; | 197 bool m_didRequestCommit; |
203 bool m_didRequestRedraw; | 198 bool m_didRequestRedraw; |
204 bool m_reduceMemoryResult; | 199 bool m_reduceMemoryResult; |
205 ScopedSettings m_scopedSettings; | 200 ScopedSettings m_scopedSettings; |
206 }; | 201 }; |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
350 | 345 |
351 TEST_P(LayerTreeHostImplTest, scrollWithoutRootLayer) | 346 TEST_P(LayerTreeHostImplTest, scrollWithoutRootLayer) |
352 { | 347 { |
353 // We should not crash when trying to scroll an empty layer tree. | 348 // We should not crash when trying to scroll an empty layer tree. |
354 EXPECT_EQ(m_hostImpl->scrollBegin(gfx::Point(0, 0), InputHandlerClient::Whee
l), InputHandlerClient::ScrollIgnored); | 349 EXPECT_EQ(m_hostImpl->scrollBegin(gfx::Point(0, 0), InputHandlerClient::Whee
l), InputHandlerClient::ScrollIgnored); |
355 } | 350 } |
356 | 351 |
357 TEST_P(LayerTreeHostImplTest, scrollWithoutRenderer) | 352 TEST_P(LayerTreeHostImplTest, scrollWithoutRenderer) |
358 { | 353 { |
359 LayerTreeSettings settings; | 354 LayerTreeSettings settings; |
360 m_hostImpl = LayerTreeHostImpl::create(settings, this, &m_proxy); | 355 m_hostImpl = LayerTreeHostImpl::create(settings, this); |
361 | 356 |
362 // Initialization will fail here. | 357 // Initialization will fail here. |
363 m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurface::create(scoped
_ptr<WebKit::WebGraphicsContext3D>(new FakeWebGraphicsContext3DMakeCurrentFails)
).PassAs<GraphicsContext>()); | 358 m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurface::create(scoped
_ptr<WebKit::WebGraphicsContext3D>(new FakeWebGraphicsContext3DMakeCurrentFails)
).PassAs<GraphicsContext>()); |
364 m_hostImpl->setViewportSize(gfx::Size(10, 10), gfx::Size(10, 10)); | 359 m_hostImpl->setViewportSize(gfx::Size(10, 10), gfx::Size(10, 10)); |
365 | 360 |
366 setupScrollAndContentsLayers(gfx::Size(100, 100)); | 361 setupScrollAndContentsLayers(gfx::Size(100, 100)); |
367 | 362 |
368 // We should not crash when trying to scroll after the renderer initializati
on fails. | 363 // We should not crash when trying to scroll after the renderer initializati
on fails. |
369 EXPECT_EQ(m_hostImpl->scrollBegin(gfx::Point(0, 0), InputHandlerClient::Whee
l), InputHandlerClient::ScrollIgnored); | 364 EXPECT_EQ(m_hostImpl->scrollBegin(gfx::Point(0, 0), InputHandlerClient::Whee
l), InputHandlerClient::ScrollIgnored); |
370 } | 365 } |
(...skipping 1575 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1946 // where it should request to swap only the subBuffer that is damaged. | 1941 // where it should request to swap only the subBuffer that is damaged. |
1947 TEST_P(LayerTreeHostImplTest, partialSwapReceivesDamageRect) | 1942 TEST_P(LayerTreeHostImplTest, partialSwapReceivesDamageRect) |
1948 { | 1943 { |
1949 scoped_ptr<GraphicsContext> outputSurface = FakeWebCompositorOutputSurface::
create(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapTrackerContext)).
PassAs<GraphicsContext>(); | 1944 scoped_ptr<GraphicsContext> outputSurface = FakeWebCompositorOutputSurface::
create(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapTrackerContext)).
PassAs<GraphicsContext>(); |
1950 PartialSwapTrackerContext* partialSwapTracker = static_cast<PartialSwapTrack
erContext*>(outputSurface->context3D()); | 1945 PartialSwapTrackerContext* partialSwapTracker = static_cast<PartialSwapTrack
erContext*>(outputSurface->context3D()); |
1951 | 1946 |
1952 // This test creates its own LayerTreeHostImpl, so | 1947 // This test creates its own LayerTreeHostImpl, so |
1953 // that we can force partial swap enabled. | 1948 // that we can force partial swap enabled. |
1954 LayerTreeSettings settings; | 1949 LayerTreeSettings settings; |
1955 Settings::setPartialSwapEnabled(true); | 1950 Settings::setPartialSwapEnabled(true); |
1956 scoped_ptr<LayerTreeHostImpl> layerTreeHostImpl = LayerTreeHostImpl::create(
settings, this, &m_proxy); | 1951 scoped_ptr<LayerTreeHostImpl> layerTreeHostImpl = LayerTreeHostImpl::create(
settings, this); |
1957 layerTreeHostImpl->initializeRenderer(outputSurface.Pass()); | 1952 layerTreeHostImpl->initializeRenderer(outputSurface.Pass()); |
1958 layerTreeHostImpl->setViewportSize(gfx::Size(500, 500), gfx::Size(500, 500))
; | 1953 layerTreeHostImpl->setViewportSize(gfx::Size(500, 500), gfx::Size(500, 500))
; |
1959 | 1954 |
1960 scoped_ptr<LayerImpl> root = FakeDrawableLayerImpl::create(1); | 1955 scoped_ptr<LayerImpl> root = FakeDrawableLayerImpl::create(1); |
1961 scoped_ptr<LayerImpl> child = FakeDrawableLayerImpl::create(2); | 1956 scoped_ptr<LayerImpl> child = FakeDrawableLayerImpl::create(2); |
1962 child->setPosition(gfx::PointF(12, 13)); | 1957 child->setPosition(gfx::PointF(12, 13)); |
1963 child->setAnchorPoint(gfx::PointF(0, 0)); | 1958 child->setAnchorPoint(gfx::PointF(0, 0)); |
1964 child->setBounds(gfx::Size(14, 15)); | 1959 child->setBounds(gfx::Size(14, 15)); |
1965 child->setContentBounds(gfx::Size(14, 15)); | 1960 child->setContentBounds(gfx::Size(14, 15)); |
1966 child->setDrawsContent(true); | 1961 child->setDrawsContent(true); |
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2226 } | 2221 } |
2227 | 2222 |
2228 // Unlimited texture size. | 2223 // Unlimited texture size. |
2229 virtual void getIntegerv(WGC3Denum pname, WGC3Dint* value) | 2224 virtual void getIntegerv(WGC3Denum pname, WGC3Dint* value) |
2230 { | 2225 { |
2231 if (pname == GL_MAX_TEXTURE_SIZE) | 2226 if (pname == GL_MAX_TEXTURE_SIZE) |
2232 *value = 8192; | 2227 *value = 8192; |
2233 } | 2228 } |
2234 }; | 2229 }; |
2235 | 2230 |
2236 static scoped_ptr<LayerTreeHostImpl> setupLayersForOpacity(bool partialSwap, Lay
erTreeHostImplClient* client, Proxy* proxy) | 2231 static scoped_ptr<LayerTreeHostImpl> setupLayersForOpacity(bool partialSwap, Lay
erTreeHostImplClient* client) |
2237 { | 2232 { |
2238 Settings::setPartialSwapEnabled(partialSwap); | 2233 Settings::setPartialSwapEnabled(partialSwap); |
2239 | 2234 |
2240 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create
(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi
csContext>(); | 2235 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create
(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi
csContext>(); |
2241 | 2236 |
2242 LayerTreeSettings settings; | 2237 LayerTreeSettings settings; |
2243 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, client, proxy); | 2238 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, client); |
2244 myHostImpl->initializeRenderer(context.Pass()); | 2239 myHostImpl->initializeRenderer(context.Pass()); |
2245 myHostImpl->setViewportSize(gfx::Size(100, 100), gfx::Size(100, 100)); | 2240 myHostImpl->setViewportSize(gfx::Size(100, 100), gfx::Size(100, 100)); |
2246 | 2241 |
2247 /* | 2242 /* |
2248 Layers are created as follows: | 2243 Layers are created as follows: |
2249 | 2244 |
2250 +--------------------+ | 2245 +--------------------+ |
2251 | 1 | | 2246 | 1 | |
2252 | +-----------+ | | 2247 | +-----------+ | |
2253 | | 2 | | | 2248 | | 2 | | |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2296 | 2291 |
2297 child->addChild(grandChild.Pass()); | 2292 child->addChild(grandChild.Pass()); |
2298 root->addChild(child.Pass()); | 2293 root->addChild(child.Pass()); |
2299 | 2294 |
2300 myHostImpl->setRootLayer(root.Pass()); | 2295 myHostImpl->setRootLayer(root.Pass()); |
2301 return myHostImpl.Pass(); | 2296 return myHostImpl.Pass(); |
2302 } | 2297 } |
2303 | 2298 |
2304 TEST_P(LayerTreeHostImplTest, contributingLayerEmptyScissorPartialSwap) | 2299 TEST_P(LayerTreeHostImplTest, contributingLayerEmptyScissorPartialSwap) |
2305 { | 2300 { |
2306 scoped_ptr<LayerTreeHostImpl> myHostImpl = setupLayersForOpacity(true, this,
&m_proxy); | 2301 scoped_ptr<LayerTreeHostImpl> myHostImpl = setupLayersForOpacity(true, this)
; |
2307 | 2302 |
2308 { | 2303 { |
2309 LayerTreeHostImpl::FrameData frame; | 2304 LayerTreeHostImpl::FrameData frame; |
2310 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 2305 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
2311 | 2306 |
2312 // Just for consistency, the most interesting stuff already happened | 2307 // Just for consistency, the most interesting stuff already happened |
2313 myHostImpl->drawLayers(frame); | 2308 myHostImpl->drawLayers(frame); |
2314 myHostImpl->didDrawAllLayers(frame); | 2309 myHostImpl->didDrawAllLayers(frame); |
2315 | 2310 |
2316 // Verify all quads have been computed | 2311 // Verify all quads have been computed |
2317 ASSERT_EQ(2U, frame.renderPasses.size()); | 2312 ASSERT_EQ(2U, frame.renderPasses.size()); |
2318 ASSERT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 2313 ASSERT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
2319 ASSERT_EQ(1U, frame.renderPasses[1]->quadList().size()); | 2314 ASSERT_EQ(1U, frame.renderPasses[1]->quadList().size()); |
2320 EXPECT_EQ(DrawQuad::SolidColor, frame.renderPasses[0]->quadList()[0]->ma
terial()); | 2315 EXPECT_EQ(DrawQuad::SolidColor, frame.renderPasses[0]->quadList()[0]->ma
terial()); |
2321 EXPECT_EQ(DrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->ma
terial()); | 2316 EXPECT_EQ(DrawQuad::RenderPass, frame.renderPasses[1]->quadList()[0]->ma
terial()); |
2322 } | 2317 } |
2323 } | 2318 } |
2324 | 2319 |
2325 TEST_P(LayerTreeHostImplTest, contributingLayerEmptyScissorNoPartialSwap) | 2320 TEST_P(LayerTreeHostImplTest, contributingLayerEmptyScissorNoPartialSwap) |
2326 { | 2321 { |
2327 scoped_ptr<LayerTreeHostImpl> myHostImpl = setupLayersForOpacity(false, this
, &m_proxy); | 2322 scoped_ptr<LayerTreeHostImpl> myHostImpl = setupLayersForOpacity(false, this
); |
2328 | 2323 |
2329 { | 2324 { |
2330 LayerTreeHostImpl::FrameData frame; | 2325 LayerTreeHostImpl::FrameData frame; |
2331 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 2326 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
2332 | 2327 |
2333 // Just for consistency, the most interesting stuff already happened | 2328 // Just for consistency, the most interesting stuff already happened |
2334 myHostImpl->drawLayers(frame); | 2329 myHostImpl->drawLayers(frame); |
2335 myHostImpl->didDrawAllLayers(frame); | 2330 myHostImpl->didDrawAllLayers(frame); |
2336 | 2331 |
2337 // Verify all quads have been computed | 2332 // Verify all quads have been computed |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2383 m_hostImpl->initializeRenderer(createContext()); | 2378 m_hostImpl->initializeRenderer(createContext()); |
2384 | 2379 |
2385 EXPECT_TRUE(root->didLoseContextCalled()); | 2380 EXPECT_TRUE(root->didLoseContextCalled()); |
2386 EXPECT_TRUE(layer1->didLoseContextCalled()); | 2381 EXPECT_TRUE(layer1->didLoseContextCalled()); |
2387 EXPECT_TRUE(layer2->didLoseContextCalled()); | 2382 EXPECT_TRUE(layer2->didLoseContextCalled()); |
2388 } | 2383 } |
2389 | 2384 |
2390 TEST_P(LayerTreeHostImplTest, finishAllRenderingAfterContextLost) | 2385 TEST_P(LayerTreeHostImplTest, finishAllRenderingAfterContextLost) |
2391 { | 2386 { |
2392 LayerTreeSettings settings; | 2387 LayerTreeSettings settings; |
2393 m_hostImpl = LayerTreeHostImpl::create(settings, this, &m_proxy); | 2388 m_hostImpl = LayerTreeHostImpl::create(settings, this); |
2394 | 2389 |
2395 // The context initialization will fail, but we should still be able to call
finishAllRendering() without any ill effects. | 2390 // The context initialization will fail, but we should still be able to call
finishAllRendering() without any ill effects. |
2396 m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurface::create(scoped
_ptr<WebKit::WebGraphicsContext3D>(new FakeWebGraphicsContext3DMakeCurrentFails)
).PassAs<GraphicsContext>()); | 2391 m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurface::create(scoped
_ptr<WebKit::WebGraphicsContext3D>(new FakeWebGraphicsContext3DMakeCurrentFails)
).PassAs<GraphicsContext>()); |
2397 m_hostImpl->finishAllRendering(); | 2392 m_hostImpl->finishAllRendering(); |
2398 } | 2393 } |
2399 | 2394 |
2400 class FakeWebGraphicsContext3DMakeCurrentFailsEventually : public FakeWebGraphic
sContext3D { | 2395 class FakeWebGraphicsContext3DMakeCurrentFailsEventually : public FakeWebGraphic
sContext3D { |
2401 public: | 2396 public: |
2402 explicit FakeWebGraphicsContext3DMakeCurrentFailsEventually(unsigned succeed
Count) : m_succeedCount(succeedCount) { } | 2397 explicit FakeWebGraphicsContext3DMakeCurrentFailsEventually(unsigned succeed
Count) : m_succeedCount(succeedCount) { } |
2403 virtual bool makeContextCurrent() { | 2398 virtual bool makeContextCurrent() { |
2404 if (!m_succeedCount) | 2399 if (!m_succeedCount) |
2405 return false; | 2400 return false; |
2406 --m_succeedCount; | 2401 --m_succeedCount; |
2407 return true; | 2402 return true; |
2408 } | 2403 } |
2409 | 2404 |
2410 private: | 2405 private: |
2411 unsigned m_succeedCount; | 2406 unsigned m_succeedCount; |
2412 }; | 2407 }; |
2413 | 2408 |
2414 TEST_P(LayerTreeHostImplTest, contextLostDuringInitialize) | 2409 TEST_P(LayerTreeHostImplTest, contextLostDuringInitialize) |
2415 { | 2410 { |
2416 LayerTreeSettings settings; | 2411 LayerTreeSettings settings; |
2417 m_hostImpl = LayerTreeHostImpl::create(settings, this, &m_proxy); | 2412 m_hostImpl = LayerTreeHostImpl::create(settings, this); |
2418 | 2413 |
2419 // Initialize into a known successful state. | 2414 // Initialize into a known successful state. |
2420 EXPECT_TRUE(m_hostImpl->initializeRenderer(createContext())); | 2415 EXPECT_TRUE(m_hostImpl->initializeRenderer(createContext())); |
2421 EXPECT_TRUE(m_hostImpl->context()); | 2416 EXPECT_TRUE(m_hostImpl->context()); |
2422 EXPECT_TRUE(m_hostImpl->renderer()); | 2417 EXPECT_TRUE(m_hostImpl->renderer()); |
2423 EXPECT_TRUE(m_hostImpl->resourceProvider()); | 2418 EXPECT_TRUE(m_hostImpl->resourceProvider()); |
2424 | 2419 |
2425 // We will make the context get lost after a numer of makeContextCurrent | 2420 // We will make the context get lost after a numer of makeContextCurrent |
2426 // calls. The exact number of calls to make it succeed is dependent on the | 2421 // calls. The exact number of calls to make it succeed is dependent on the |
2427 // implementation and doesn't really matter (i.e. can be changed to make the | 2422 // implementation and doesn't really matter (i.e. can be changed to make the |
(...skipping 590 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3018 public: | 3013 public: |
3019 using GLRenderer::releaseRenderPassTextures; | 3014 using GLRenderer::releaseRenderPassTextures; |
3020 }; | 3015 }; |
3021 | 3016 |
3022 TEST_P(LayerTreeHostImplTest, textureCachingWithClipping) | 3017 TEST_P(LayerTreeHostImplTest, textureCachingWithClipping) |
3023 { | 3018 { |
3024 Settings::setPartialSwapEnabled(true); | 3019 Settings::setPartialSwapEnabled(true); |
3025 | 3020 |
3026 LayerTreeSettings settings; | 3021 LayerTreeSettings settings; |
3027 settings.minimumOcclusionTrackingSize = gfx::Size(); | 3022 settings.minimumOcclusionTrackingSize = gfx::Size(); |
3028 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); | 3023 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this); |
3029 | 3024 |
3030 LayerImpl* rootPtr; | 3025 LayerImpl* rootPtr; |
3031 LayerImpl* surfaceLayerPtr; | 3026 LayerImpl* surfaceLayerPtr; |
3032 | 3027 |
3033 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create
(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi
csContext>(); | 3028 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create
(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi
csContext>(); |
3034 | 3029 |
3035 gfx::Size rootSize(100, 100); | 3030 gfx::Size rootSize(100, 100); |
3036 | 3031 |
3037 myHostImpl->initializeRenderer(context.Pass()); | 3032 myHostImpl->initializeRenderer(context.Pass()); |
3038 myHostImpl->setViewportSize(gfx::Size(rootSize.width(), rootSize.height()),
gfx::Size(rootSize.width(), rootSize.height())); | 3033 myHostImpl->setViewportSize(gfx::Size(rootSize.width(), rootSize.height()),
gfx::Size(rootSize.width(), rootSize.height())); |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3115 myHostImpl->didDrawAllLayers(frame); | 3110 myHostImpl->didDrawAllLayers(frame); |
3116 } | 3111 } |
3117 } | 3112 } |
3118 | 3113 |
3119 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusion) | 3114 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusion) |
3120 { | 3115 { |
3121 Settings::setPartialSwapEnabled(false); | 3116 Settings::setPartialSwapEnabled(false); |
3122 | 3117 |
3123 LayerTreeSettings settings; | 3118 LayerTreeSettings settings; |
3124 settings.minimumOcclusionTrackingSize = gfx::Size(); | 3119 settings.minimumOcclusionTrackingSize = gfx::Size(); |
3125 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); | 3120 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this); |
3126 | 3121 |
3127 // Layers are structure as follows: | 3122 // Layers are structure as follows: |
3128 // | 3123 // |
3129 // R +-- S1 +- L10 (owning) | 3124 // R +-- S1 +- L10 (owning) |
3130 // | +- L11 | 3125 // | +- L11 |
3131 // | +- L12 | 3126 // | +- L12 |
3132 // | | 3127 // | |
3133 // +-- S2 +- L20 (owning) | 3128 // +-- S2 +- L20 (owning) |
3134 // +- L21 | 3129 // +- L21 |
3135 // | 3130 // |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3231 } | 3226 } |
3232 | 3227 |
3233 } | 3228 } |
3234 | 3229 |
3235 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionEarlyOut) | 3230 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionEarlyOut) |
3236 { | 3231 { |
3237 Settings::setPartialSwapEnabled(false); | 3232 Settings::setPartialSwapEnabled(false); |
3238 | 3233 |
3239 LayerTreeSettings settings; | 3234 LayerTreeSettings settings; |
3240 settings.minimumOcclusionTrackingSize = gfx::Size(); | 3235 settings.minimumOcclusionTrackingSize = gfx::Size(); |
3241 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); | 3236 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this); |
3242 | 3237 |
3243 // Layers are structure as follows: | 3238 // Layers are structure as follows: |
3244 // | 3239 // |
3245 // R +-- S1 +- L10 (owning, non drawing) | 3240 // R +-- S1 +- L10 (owning, non drawing) |
3246 // | +- L11 (corner, unoccluded) | 3241 // | +- L11 (corner, unoccluded) |
3247 // | +- L12 (corner, unoccluded) | 3242 // | +- L12 (corner, unoccluded) |
3248 // | +- L13 (corner, unoccluded) | 3243 // | +- L13 (corner, unoccluded) |
3249 // | +- L14 (corner, entirely occluded) | 3244 // | +- L14 (corner, entirely occluded) |
3250 // | | 3245 // | |
3251 // +-- S2 +- L20 (owning, drawing) | 3246 // +-- S2 +- L20 (owning, drawing) |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3347 myHostImpl->didDrawAllLayers(frame); | 3342 myHostImpl->didDrawAllLayers(frame); |
3348 } | 3343 } |
3349 } | 3344 } |
3350 | 3345 |
3351 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionExternalOverInternal) | 3346 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionExternalOverInternal) |
3352 { | 3347 { |
3353 Settings::setPartialSwapEnabled(false); | 3348 Settings::setPartialSwapEnabled(false); |
3354 | 3349 |
3355 LayerTreeSettings settings; | 3350 LayerTreeSettings settings; |
3356 settings.minimumOcclusionTrackingSize = gfx::Size(); | 3351 settings.minimumOcclusionTrackingSize = gfx::Size(); |
3357 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); | 3352 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this); |
3358 | 3353 |
3359 // Layers are structured as follows: | 3354 // Layers are structured as follows: |
3360 // | 3355 // |
3361 // R +-- S1 +- L10 (owning, drawing) | 3356 // R +-- S1 +- L10 (owning, drawing) |
3362 // | +- L11 (corner, occluded by L12) | 3357 // | +- L11 (corner, occluded by L12) |
3363 // | +- L12 (opposite corner) | 3358 // | +- L12 (opposite corner) |
3364 // | | 3359 // | |
3365 // +-- S2 +- L20 (owning, drawing) | 3360 // +-- S2 +- L20 (owning, drawing) |
3366 // | 3361 // |
3367 | 3362 |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3435 myHostImpl->drawLayers(frame); | 3430 myHostImpl->drawLayers(frame); |
3436 myHostImpl->didDrawAllLayers(frame); | 3431 myHostImpl->didDrawAllLayers(frame); |
3437 } | 3432 } |
3438 } | 3433 } |
3439 | 3434 |
3440 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionExternalNotAligned) | 3435 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionExternalNotAligned) |
3441 { | 3436 { |
3442 Settings::setPartialSwapEnabled(false); | 3437 Settings::setPartialSwapEnabled(false); |
3443 | 3438 |
3444 LayerTreeSettings settings; | 3439 LayerTreeSettings settings; |
3445 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); | 3440 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this); |
3446 | 3441 |
3447 // Layers are structured as follows: | 3442 // Layers are structured as follows: |
3448 // | 3443 // |
3449 // R +-- S1 +- L10 (rotated, drawing) | 3444 // R +-- S1 +- L10 (rotated, drawing) |
3450 // +- L11 (occupies half surface) | 3445 // +- L11 (occupies half surface) |
3451 | 3446 |
3452 LayerImpl* rootPtr; | 3447 LayerImpl* rootPtr; |
3453 LayerImpl* layerS1Ptr; | 3448 LayerImpl* layerS1Ptr; |
3454 | 3449 |
3455 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create
(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi
csContext>(); | 3450 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... |
3510 myHostImpl->didDrawAllLayers(frame); | 3505 myHostImpl->didDrawAllLayers(frame); |
3511 } | 3506 } |
3512 } | 3507 } |
3513 | 3508 |
3514 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionPartialSwap) | 3509 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionPartialSwap) |
3515 { | 3510 { |
3516 Settings::setPartialSwapEnabled(true); | 3511 Settings::setPartialSwapEnabled(true); |
3517 | 3512 |
3518 LayerTreeSettings settings; | 3513 LayerTreeSettings settings; |
3519 settings.minimumOcclusionTrackingSize = gfx::Size(); | 3514 settings.minimumOcclusionTrackingSize = gfx::Size(); |
3520 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); | 3515 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this); |
3521 | 3516 |
3522 // Layers are structure as follows: | 3517 // Layers are structure as follows: |
3523 // | 3518 // |
3524 // R +-- S1 +- L10 (owning) | 3519 // R +-- S1 +- L10 (owning) |
3525 // | +- L11 | 3520 // | +- L11 |
3526 // | +- L12 | 3521 // | +- L12 |
3527 // | | 3522 // | |
3528 // +-- S2 +- L20 (owning) | 3523 // +-- S2 +- L20 (owning) |
3529 // +- L21 | 3524 // +- L21 |
3530 // | 3525 // |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3623 myHostImpl->didDrawAllLayers(frame); | 3618 myHostImpl->didDrawAllLayers(frame); |
3624 } | 3619 } |
3625 } | 3620 } |
3626 | 3621 |
3627 TEST_P(LayerTreeHostImplTest, textureCachingWithScissor) | 3622 TEST_P(LayerTreeHostImplTest, textureCachingWithScissor) |
3628 { | 3623 { |
3629 Settings::setPartialSwapEnabled(false); | 3624 Settings::setPartialSwapEnabled(false); |
3630 | 3625 |
3631 LayerTreeSettings settings; | 3626 LayerTreeSettings settings; |
3632 settings.minimumOcclusionTrackingSize = gfx::Size(); | 3627 settings.minimumOcclusionTrackingSize = gfx::Size(); |
3633 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); | 3628 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this); |
3634 | 3629 |
3635 /* | 3630 /* |
3636 Layers are created as follows: | 3631 Layers are created as follows: |
3637 | 3632 |
3638 +--------------------+ | 3633 +--------------------+ |
3639 | 1 | | 3634 | 1 | |
3640 | +-----------+ | | 3635 | +-----------+ | |
3641 | | 2 | | | 3636 | | 2 | | |
3642 | | +-------------------+ | 3637 | | +-------------------+ |
3643 | | | 3 | | 3638 | | | 3 | |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3730 // We should have a cached texture for surface 2 again even though it was da
maged. | 3725 // We should have a cached texture for surface 2 again even though it was da
maged. |
3731 EXPECT_TRUE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(child
PassId)); | 3726 EXPECT_TRUE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(child
PassId)); |
3732 } | 3727 } |
3733 | 3728 |
3734 TEST_P(LayerTreeHostImplTest, surfaceTextureCaching) | 3729 TEST_P(LayerTreeHostImplTest, surfaceTextureCaching) |
3735 { | 3730 { |
3736 Settings::setPartialSwapEnabled(true); | 3731 Settings::setPartialSwapEnabled(true); |
3737 | 3732 |
3738 LayerTreeSettings settings; | 3733 LayerTreeSettings settings; |
3739 settings.minimumOcclusionTrackingSize = gfx::Size(); | 3734 settings.minimumOcclusionTrackingSize = gfx::Size(); |
3740 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); | 3735 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this); |
3741 | 3736 |
3742 LayerImpl* rootPtr; | 3737 LayerImpl* rootPtr; |
3743 LayerImpl* intermediateLayerPtr; | 3738 LayerImpl* intermediateLayerPtr; |
3744 LayerImpl* surfaceLayerPtr; | 3739 LayerImpl* surfaceLayerPtr; |
3745 LayerImpl* childPtr; | 3740 LayerImpl* childPtr; |
3746 | 3741 |
3747 setupLayersForTextureCaching(myHostImpl.get(), rootPtr, intermediateLayerPtr
, surfaceLayerPtr, childPtr, gfx::Size(100, 100)); | 3742 setupLayersForTextureCaching(myHostImpl.get(), rootPtr, intermediateLayerPtr
, surfaceLayerPtr, childPtr, gfx::Size(100, 100)); |
3748 | 3743 |
3749 { | 3744 { |
3750 LayerTreeHostImpl::FrameData frame; | 3745 LayerTreeHostImpl::FrameData frame; |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3891 myHostImpl->didDrawAllLayers(frame); | 3886 myHostImpl->didDrawAllLayers(frame); |
3892 } | 3887 } |
3893 } | 3888 } |
3894 | 3889 |
3895 TEST_P(LayerTreeHostImplTest, surfaceTextureCachingNoPartialSwap) | 3890 TEST_P(LayerTreeHostImplTest, surfaceTextureCachingNoPartialSwap) |
3896 { | 3891 { |
3897 Settings::setPartialSwapEnabled(false); | 3892 Settings::setPartialSwapEnabled(false); |
3898 | 3893 |
3899 LayerTreeSettings settings; | 3894 LayerTreeSettings settings; |
3900 settings.minimumOcclusionTrackingSize = gfx::Size(); | 3895 settings.minimumOcclusionTrackingSize = gfx::Size(); |
3901 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); | 3896 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this); |
3902 | 3897 |
3903 LayerImpl* rootPtr; | 3898 LayerImpl* rootPtr; |
3904 LayerImpl* intermediateLayerPtr; | 3899 LayerImpl* intermediateLayerPtr; |
3905 LayerImpl* surfaceLayerPtr; | 3900 LayerImpl* surfaceLayerPtr; |
3906 LayerImpl* childPtr; | 3901 LayerImpl* childPtr; |
3907 | 3902 |
3908 setupLayersForTextureCaching(myHostImpl.get(), rootPtr, intermediateLayerPtr
, surfaceLayerPtr, childPtr, gfx::Size(100, 100)); | 3903 setupLayersForTextureCaching(myHostImpl.get(), rootPtr, intermediateLayerPtr
, surfaceLayerPtr, childPtr, gfx::Size(100, 100)); |
3909 | 3904 |
3910 { | 3905 { |
3911 LayerTreeHostImpl::FrameData frame; | 3906 LayerTreeHostImpl::FrameData frame; |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4083 EXPECT_FALSE(m_didRequestCommit); | 4078 EXPECT_FALSE(m_didRequestCommit); |
4084 } | 4079 } |
4085 | 4080 |
4086 struct RenderPassRemovalTestData : public LayerTreeHostImpl::FrameData { | 4081 struct RenderPassRemovalTestData : public LayerTreeHostImpl::FrameData { |
4087 ScopedPtrHashMap<RenderPass::Id, TestRenderPass> renderPassCache; | 4082 ScopedPtrHashMap<RenderPass::Id, TestRenderPass> renderPassCache; |
4088 scoped_ptr<SharedQuadState> sharedQuadState; | 4083 scoped_ptr<SharedQuadState> sharedQuadState; |
4089 }; | 4084 }; |
4090 | 4085 |
4091 class TestRenderer : public GLRenderer, public RendererClient { | 4086 class TestRenderer : public GLRenderer, public RendererClient { |
4092 public: | 4087 public: |
4093 static scoped_ptr<TestRenderer> create(ResourceProvider* resourceProvider, P
roxy* proxy) | 4088 static scoped_ptr<TestRenderer> create(ResourceProvider* resourceProvider) |
4094 { | 4089 { |
4095 scoped_ptr<TestRenderer> renderer(new TestRenderer(resourceProvider, pro
xy)); | 4090 scoped_ptr<TestRenderer> renderer(new TestRenderer(resourceProvider)); |
4096 if (!renderer->initialize()) | 4091 if (!renderer->initialize()) |
4097 return scoped_ptr<TestRenderer>(); | 4092 return scoped_ptr<TestRenderer>(); |
4098 | 4093 |
4099 return renderer.Pass(); | 4094 return renderer.Pass(); |
4100 } | 4095 } |
4101 | 4096 |
4102 void clearCachedTextures() { m_textures.clear(); } | 4097 void clearCachedTextures() { m_textures.clear(); } |
4103 void setHaveCachedResourcesForRenderPassId(RenderPass::Id id) { m_textures.i
nsert(id); } | 4098 void setHaveCachedResourcesForRenderPassId(RenderPass::Id id) { m_textures.i
nsert(id); } |
4104 | 4099 |
4105 virtual bool haveCachedResourcesForRenderPassId(RenderPass::Id id) const OVE
RRIDE { return m_textures.count(id); } | 4100 virtual bool haveCachedResourcesForRenderPassId(RenderPass::Id id) const OVE
RRIDE { return m_textures.count(id); } |
4106 | 4101 |
4107 // RendererClient implementation. | 4102 // RendererClient implementation. |
4108 virtual const gfx::Size& deviceViewportSize() const OVERRIDE { return m_view
portSize; } | 4103 virtual const gfx::Size& deviceViewportSize() const OVERRIDE { return m_view
portSize; } |
4109 virtual const LayerTreeSettings& settings() const OVERRIDE { return m_settin
gs; } | 4104 virtual const LayerTreeSettings& settings() const OVERRIDE { return m_settin
gs; } |
4110 virtual void didLoseContext() OVERRIDE { } | 4105 virtual void didLoseContext() OVERRIDE { } |
4111 virtual void onSwapBuffersComplete() OVERRIDE { } | 4106 virtual void onSwapBuffersComplete() OVERRIDE { } |
4112 virtual void setFullRootLayerDamage() OVERRIDE { } | 4107 virtual void setFullRootLayerDamage() OVERRIDE { } |
4113 virtual void setManagedMemoryPolicy(const ManagedMemoryPolicy& policy) OVERR
IDE { } | 4108 virtual void setManagedMemoryPolicy(const ManagedMemoryPolicy& policy) OVERR
IDE { } |
4114 virtual void enforceManagedMemoryPolicy(const ManagedMemoryPolicy& policy) O
VERRIDE { } | 4109 virtual void enforceManagedMemoryPolicy(const ManagedMemoryPolicy& policy) O
VERRIDE { } |
4115 virtual bool hasImplThread() const OVERRIDE { return false; } | |
4116 | 4110 |
4117 protected: | 4111 protected: |
4118 TestRenderer(ResourceProvider* resourceProvider, Proxy* proxy) : GLRenderer(
this, resourceProvider) { } | 4112 TestRenderer(ResourceProvider* resourceProvider) : GLRenderer(this, resource
Provider) { } |
4119 | 4113 |
4120 private: | 4114 private: |
4121 LayerTreeSettings m_settings; | 4115 LayerTreeSettings m_settings; |
4122 gfx::Size m_viewportSize; | 4116 gfx::Size m_viewportSize; |
4123 base::hash_set<RenderPass::Id> m_textures; | 4117 base::hash_set<RenderPass::Id> m_textures; |
4124 }; | 4118 }; |
4125 | 4119 |
4126 static void configureRenderPassTestData(const char* testScript, RenderPassRemova
lTestData& testData, TestRenderer* renderer) | 4120 static void configureRenderPassTestData(const char* testScript, RenderPassRemova
lTestData& testData, TestRenderer* renderer) |
4127 { | 4121 { |
4128 renderer->clearCachedTextures(); | 4122 renderer->clearCachedTextures(); |
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4392 dumpRenderPassTestData(testData, actualResult); | 4386 dumpRenderPassTestData(testData, actualResult); |
4393 EXPECT_STREQ(testCase.expectedResult, actualResult) << "In test case: " << t
estCase.name; | 4387 EXPECT_STREQ(testCase.expectedResult, actualResult) << "In test case: " << t
estCase.name; |
4394 } | 4388 } |
4395 | 4389 |
4396 TEST_P(LayerTreeHostImplTest, testRemoveRenderPasses) | 4390 TEST_P(LayerTreeHostImplTest, testRemoveRenderPasses) |
4397 { | 4391 { |
4398 scoped_ptr<GraphicsContext> context(createContext()); | 4392 scoped_ptr<GraphicsContext> context(createContext()); |
4399 ASSERT_TRUE(context->context3D()); | 4393 ASSERT_TRUE(context->context3D()); |
4400 scoped_ptr<ResourceProvider> resourceProvider(ResourceProvider::create(conte
xt.get())); | 4394 scoped_ptr<ResourceProvider> resourceProvider(ResourceProvider::create(conte
xt.get())); |
4401 | 4395 |
4402 scoped_ptr<TestRenderer> renderer(TestRenderer::create(resourceProvider.get(
), &m_proxy)); | 4396 scoped_ptr<TestRenderer> renderer(TestRenderer::create(resourceProvider.get(
))); |
4403 | 4397 |
4404 int testCaseIndex = 0; | 4398 int testCaseIndex = 0; |
4405 while (removeRenderPassesCases[testCaseIndex].name) { | 4399 while (removeRenderPassesCases[testCaseIndex].name) { |
4406 RenderPassRemovalTestData testData; | 4400 RenderPassRemovalTestData testData; |
4407 configureRenderPassTestData(removeRenderPassesCases[testCaseIndex].initS
cript, testData, renderer.get()); | 4401 configureRenderPassTestData(removeRenderPassesCases[testCaseIndex].initS
cript, testData, renderer.get()); |
4408 LayerTreeHostImpl::removeRenderPasses(LayerTreeHostImpl::CullRenderPasse
sWithCachedTextures(*renderer), testData); | 4402 LayerTreeHostImpl::removeRenderPasses(LayerTreeHostImpl::CullRenderPasse
sWithCachedTextures(*renderer), testData); |
4409 verifyRenderPassTestData(removeRenderPassesCases[testCaseIndex], testDat
a); | 4403 verifyRenderPassTestData(removeRenderPassesCases[testCaseIndex], testDat
a); |
4410 testCaseIndex++; | 4404 testCaseIndex++; |
4411 } | 4405 } |
4412 } | 4406 } |
4413 | 4407 |
4414 INSTANTIATE_TEST_CASE_P(LayerTreeHostImplTests, | 4408 INSTANTIATE_TEST_CASE_P(LayerTreeHostImplTests, |
4415 LayerTreeHostImplTest, | 4409 LayerTreeHostImplTest, |
4416 ::testing::Values(false, true)); | 4410 ::testing::Values(false, true)); |
4417 | 4411 |
4418 } // namespace | 4412 } // namespace |
OLD | NEW |