| 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 |