OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "cc/layer_tree_host_impl.h" | 5 #include "cc/layer_tree_host_impl.h" |
6 | 6 |
7 #include <cmath> | 7 #include <cmath> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 1850 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1861 child->setBounds(layerRect.size()); | 1861 child->setBounds(layerRect.size()); |
1862 child->setContentBounds(layerRect.size()); | 1862 child->setContentBounds(layerRect.size()); |
1863 child->setQuadRect(gfx::Rect(gfx::Point(), layerRect.size())); | 1863 child->setQuadRect(gfx::Rect(gfx::Point(), layerRect.size())); |
1864 child->setQuadVisibleRect(gfx::Rect(gfx::Point(), layerRect.size())); | 1864 child->setQuadVisibleRect(gfx::Rect(gfx::Point(), layerRect.size())); |
1865 | 1865 |
1866 LayerTreeHostImpl::FrameData frame; | 1866 LayerTreeHostImpl::FrameData frame; |
1867 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); | 1867 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
1868 ASSERT_EQ(1u, frame.renderPasses.size()); | 1868 ASSERT_EQ(1u, frame.renderPasses.size()); |
1869 | 1869 |
1870 size_t numGutterQuads = 0; | 1870 size_t numGutterQuads = 0; |
1871 for (size_t i = 0; i < frame.renderPasses[0]->quadList().size(); ++i) | 1871 for (size_t i = 0; i < frame.renderPasses[0]->quad_list.size(); ++i) |
1872 numGutterQuads += (frame.renderPasses[0]->quadList()[i]->material ==
DrawQuad::SOLID_COLOR) ? 1 : 0; | 1872 numGutterQuads += (frame.renderPasses[0]->quad_list[i]->material ==
DrawQuad::SOLID_COLOR) ? 1 : 0; |
1873 EXPECT_EQ(0u, numGutterQuads); | 1873 EXPECT_EQ(0u, numGutterQuads); |
1874 EXPECT_EQ(1u, frame.renderPasses[0]->quadList().size()); | 1874 EXPECT_EQ(1u, frame.renderPasses[0]->quad_list.size()); |
1875 | 1875 |
1876 verifyQuadsExactlyCoverRect(frame.renderPasses[0]->quadList(), gfx::Rect
(gfx::Point(), viewportSize)); | 1876 verifyQuadsExactlyCoverRect(frame.renderPasses[0]->quad_list, gfx::Rect(
gfx::Point(), viewportSize)); |
1877 m_hostImpl->didDrawAllLayers(frame); | 1877 m_hostImpl->didDrawAllLayers(frame); |
1878 } | 1878 } |
1879 | 1879 |
1880 // Empty visible content area (fullscreen gutter rect) | 1880 // Empty visible content area (fullscreen gutter rect) |
1881 { | 1881 { |
1882 gfx::Rect layerRect(0, 0, 0, 0); | 1882 gfx::Rect layerRect(0, 0, 0, 0); |
1883 child->setPosition(layerRect.origin()); | 1883 child->setPosition(layerRect.origin()); |
1884 child->setBounds(layerRect.size()); | 1884 child->setBounds(layerRect.size()); |
1885 child->setContentBounds(layerRect.size()); | 1885 child->setContentBounds(layerRect.size()); |
1886 child->setQuadRect(gfx::Rect(gfx::Point(), layerRect.size())); | 1886 child->setQuadRect(gfx::Rect(gfx::Point(), layerRect.size())); |
1887 child->setQuadVisibleRect(gfx::Rect(gfx::Point(), layerRect.size())); | 1887 child->setQuadVisibleRect(gfx::Rect(gfx::Point(), layerRect.size())); |
1888 | 1888 |
1889 LayerTreeHostImpl::FrameData frame; | 1889 LayerTreeHostImpl::FrameData frame; |
1890 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); | 1890 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
1891 ASSERT_EQ(1u, frame.renderPasses.size()); | 1891 ASSERT_EQ(1u, frame.renderPasses.size()); |
1892 m_hostImpl->didDrawAllLayers(frame); | 1892 m_hostImpl->didDrawAllLayers(frame); |
1893 | 1893 |
1894 size_t numGutterQuads = 0; | 1894 size_t numGutterQuads = 0; |
1895 for (size_t i = 0; i < frame.renderPasses[0]->quadList().size(); ++i) | 1895 for (size_t i = 0; i < frame.renderPasses[0]->quad_list.size(); ++i) |
1896 numGutterQuads += (frame.renderPasses[0]->quadList()[i]->material ==
DrawQuad::SOLID_COLOR) ? 1 : 0; | 1896 numGutterQuads += (frame.renderPasses[0]->quad_list[i]->material ==
DrawQuad::SOLID_COLOR) ? 1 : 0; |
1897 EXPECT_EQ(1u, numGutterQuads); | 1897 EXPECT_EQ(1u, numGutterQuads); |
1898 EXPECT_EQ(1u, frame.renderPasses[0]->quadList().size()); | 1898 EXPECT_EQ(1u, frame.renderPasses[0]->quad_list.size()); |
1899 | 1899 |
1900 verifyQuadsExactlyCoverRect(frame.renderPasses[0]->quadList(), gfx::Rect
(gfx::Point(), viewportSize)); | 1900 verifyQuadsExactlyCoverRect(frame.renderPasses[0]->quad_list, gfx::Rect(
gfx::Point(), viewportSize)); |
1901 m_hostImpl->didDrawAllLayers(frame); | 1901 m_hostImpl->didDrawAllLayers(frame); |
1902 } | 1902 } |
1903 | 1903 |
1904 // Content area in middle of clip rect (four surrounding gutter rects) | 1904 // Content area in middle of clip rect (four surrounding gutter rects) |
1905 { | 1905 { |
1906 gfx::Rect layerRect(500, 500, 200, 200); | 1906 gfx::Rect layerRect(500, 500, 200, 200); |
1907 child->setPosition(layerRect.origin()); | 1907 child->setPosition(layerRect.origin()); |
1908 child->setBounds(layerRect.size()); | 1908 child->setBounds(layerRect.size()); |
1909 child->setContentBounds(layerRect.size()); | 1909 child->setContentBounds(layerRect.size()); |
1910 child->setQuadRect(gfx::Rect(gfx::Point(), layerRect.size())); | 1910 child->setQuadRect(gfx::Rect(gfx::Point(), layerRect.size())); |
1911 child->setQuadVisibleRect(gfx::Rect(gfx::Point(), layerRect.size())); | 1911 child->setQuadVisibleRect(gfx::Rect(gfx::Point(), layerRect.size())); |
1912 | 1912 |
1913 LayerTreeHostImpl::FrameData frame; | 1913 LayerTreeHostImpl::FrameData frame; |
1914 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); | 1914 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
1915 ASSERT_EQ(1u, frame.renderPasses.size()); | 1915 ASSERT_EQ(1u, frame.renderPasses.size()); |
1916 | 1916 |
1917 size_t numGutterQuads = 0; | 1917 size_t numGutterQuads = 0; |
1918 for (size_t i = 0; i < frame.renderPasses[0]->quadList().size(); ++i) | 1918 for (size_t i = 0; i < frame.renderPasses[0]->quad_list.size(); ++i) |
1919 numGutterQuads += (frame.renderPasses[0]->quadList()[i]->material ==
DrawQuad::SOLID_COLOR) ? 1 : 0; | 1919 numGutterQuads += (frame.renderPasses[0]->quad_list[i]->material ==
DrawQuad::SOLID_COLOR) ? 1 : 0; |
1920 EXPECT_EQ(4u, numGutterQuads); | 1920 EXPECT_EQ(4u, numGutterQuads); |
1921 EXPECT_EQ(5u, frame.renderPasses[0]->quadList().size()); | 1921 EXPECT_EQ(5u, frame.renderPasses[0]->quad_list.size()); |
1922 | 1922 |
1923 verifyQuadsExactlyCoverRect(frame.renderPasses[0]->quadList(), gfx::Rect
(gfx::Point(), viewportSize)); | 1923 verifyQuadsExactlyCoverRect(frame.renderPasses[0]->quad_list, gfx::Rect(
gfx::Point(), viewportSize)); |
1924 m_hostImpl->didDrawAllLayers(frame); | 1924 m_hostImpl->didDrawAllLayers(frame); |
1925 } | 1925 } |
1926 | 1926 |
1927 } | 1927 } |
1928 | 1928 |
1929 | 1929 |
1930 class ReshapeTrackerContext: public FakeWebGraphicsContext3D { | 1930 class ReshapeTrackerContext: public FakeWebGraphicsContext3D { |
1931 public: | 1931 public: |
1932 ReshapeTrackerContext() : m_reshapeCalled(false) { } | 1932 ReshapeTrackerContext() : m_reshapeCalled(false) { } |
1933 | 1933 |
(...skipping 425 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2359 { | 2359 { |
2360 LayerTreeHostImpl::FrameData frame; | 2360 LayerTreeHostImpl::FrameData frame; |
2361 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 2361 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
2362 | 2362 |
2363 // Just for consistency, the most interesting stuff already happened | 2363 // Just for consistency, the most interesting stuff already happened |
2364 myHostImpl->drawLayers(frame); | 2364 myHostImpl->drawLayers(frame); |
2365 myHostImpl->didDrawAllLayers(frame); | 2365 myHostImpl->didDrawAllLayers(frame); |
2366 | 2366 |
2367 // Verify all quads have been computed | 2367 // Verify all quads have been computed |
2368 ASSERT_EQ(2U, frame.renderPasses.size()); | 2368 ASSERT_EQ(2U, frame.renderPasses.size()); |
2369 ASSERT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 2369 ASSERT_EQ(1U, frame.renderPasses[0]->quad_list.size()); |
2370 ASSERT_EQ(1U, frame.renderPasses[1]->quadList().size()); | 2370 ASSERT_EQ(1U, frame.renderPasses[1]->quad_list.size()); |
2371 EXPECT_EQ(DrawQuad::SOLID_COLOR, frame.renderPasses[0]->quadList()[0]->m
aterial); | 2371 EXPECT_EQ(DrawQuad::SOLID_COLOR, frame.renderPasses[0]->quad_list[0]->ma
terial); |
2372 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quadList()[0]->m
aterial); | 2372 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quad_list[0]->ma
terial); |
2373 } | 2373 } |
2374 } | 2374 } |
2375 | 2375 |
2376 TEST_P(LayerTreeHostImplTest, contributingLayerEmptyScissorNoPartialSwap) | 2376 TEST_P(LayerTreeHostImplTest, contributingLayerEmptyScissorNoPartialSwap) |
2377 { | 2377 { |
2378 scoped_ptr<LayerTreeHostImpl> myHostImpl = setupLayersForOpacity(false, this
, &m_proxy); | 2378 scoped_ptr<LayerTreeHostImpl> myHostImpl = setupLayersForOpacity(false, this
, &m_proxy); |
2379 | 2379 |
2380 { | 2380 { |
2381 LayerTreeHostImpl::FrameData frame; | 2381 LayerTreeHostImpl::FrameData frame; |
2382 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 2382 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
2383 | 2383 |
2384 // Just for consistency, the most interesting stuff already happened | 2384 // Just for consistency, the most interesting stuff already happened |
2385 myHostImpl->drawLayers(frame); | 2385 myHostImpl->drawLayers(frame); |
2386 myHostImpl->didDrawAllLayers(frame); | 2386 myHostImpl->didDrawAllLayers(frame); |
2387 | 2387 |
2388 // Verify all quads have been computed | 2388 // Verify all quads have been computed |
2389 ASSERT_EQ(2U, frame.renderPasses.size()); | 2389 ASSERT_EQ(2U, frame.renderPasses.size()); |
2390 ASSERT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 2390 ASSERT_EQ(1U, frame.renderPasses[0]->quad_list.size()); |
2391 ASSERT_EQ(1U, frame.renderPasses[1]->quadList().size()); | 2391 ASSERT_EQ(1U, frame.renderPasses[1]->quad_list.size()); |
2392 EXPECT_EQ(DrawQuad::SOLID_COLOR, frame.renderPasses[0]->quadList()[0]->m
aterial); | 2392 EXPECT_EQ(DrawQuad::SOLID_COLOR, frame.renderPasses[0]->quad_list[0]->ma
terial); |
2393 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quadList()[0]->m
aterial); | 2393 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quad_list[0]->ma
terial); |
2394 } | 2394 } |
2395 } | 2395 } |
2396 | 2396 |
2397 // Make sure that context lost notifications are propagated through the tree. | 2397 // Make sure that context lost notifications are propagated through the tree. |
2398 class ContextLostNotificationCheckLayer : public LayerImpl { | 2398 class ContextLostNotificationCheckLayer : public LayerImpl { |
2399 public: | 2399 public: |
2400 static scoped_ptr<LayerImpl> create(int id) { return scoped_ptr<LayerImpl>(n
ew ContextLostNotificationCheckLayer(id)); } | 2400 static scoped_ptr<LayerImpl> create(int id) { return scoped_ptr<LayerImpl>(n
ew ContextLostNotificationCheckLayer(id)); } |
2401 | 2401 |
2402 virtual void didLoseContext() OVERRIDE | 2402 virtual void didLoseContext() OVERRIDE |
2403 { | 2403 { |
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2707 explicit FakeScrollbarLayerImpl(int id) | 2707 explicit FakeScrollbarLayerImpl(int id) |
2708 : ScrollbarLayerImpl(id) | 2708 : ScrollbarLayerImpl(id) |
2709 { | 2709 { |
2710 } | 2710 } |
2711 }; | 2711 }; |
2712 | 2712 |
2713 static inline scoped_ptr<RenderPass> createRenderPassWithResource(ResourceProvid
er* provider) | 2713 static inline scoped_ptr<RenderPass> createRenderPassWithResource(ResourceProvid
er* provider) |
2714 { | 2714 { |
2715 ResourceProvider::ResourceId resourceId = provider->createResource(0, gfx::S
ize(1, 1), GL_RGBA, ResourceProvider::TextureUsageAny); | 2715 ResourceProvider::ResourceId resourceId = provider->createResource(0, gfx::S
ize(1, 1), GL_RGBA, ResourceProvider::TextureUsageAny); |
2716 | 2716 |
2717 scoped_ptr<TestRenderPass> pass = TestRenderPass::create(RenderPass::Id(1, 1
), gfx::Rect(0, 0, 1, 1), WebTransformationMatrix()); | 2717 scoped_ptr<TestRenderPass> pass = TestRenderPass::Create(); |
| 2718 pass->SetNew(RenderPass::Id(1, 1), gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1,
1), WebTransformationMatrix()); |
2718 scoped_ptr<SharedQuadState> sharedState = SharedQuadState::Create(); | 2719 scoped_ptr<SharedQuadState> sharedState = SharedQuadState::Create(); |
2719 sharedState->SetAll(WebTransformationMatrix(), gfx::Rect(0, 0, 1, 1), gfx::R
ect(0, 0, 1, 1), 1); | 2720 sharedState->SetAll(WebTransformationMatrix(), gfx::Rect(0, 0, 1, 1), gfx::R
ect(0, 0, 1, 1), 1); |
2720 scoped_ptr<TextureDrawQuad> quad = TextureDrawQuad::Create(); | 2721 scoped_ptr<TextureDrawQuad> quad = TextureDrawQuad::Create(); |
2721 quad->SetNew(sharedState.get(), gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)
, resourceId, false, gfx::RectF(0, 0, 1, 1), false); | 2722 quad->SetNew(sharedState.get(), gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)
, resourceId, false, gfx::RectF(0, 0, 1, 1), false); |
2722 | 2723 |
2723 pass->appendSharedQuadState(sharedState.Pass()); | 2724 pass->AppendSharedQuadState(sharedState.Pass()); |
2724 pass->appendQuad(quad.PassAs<DrawQuad>()); | 2725 pass->AppendQuad(quad.PassAs<DrawQuad>()); |
2725 | 2726 |
2726 return pass.PassAs<RenderPass>(); | 2727 return pass.PassAs<RenderPass>(); |
2727 } | 2728 } |
2728 | 2729 |
2729 TEST_P(LayerTreeHostImplTest, dontUseOldResourcesAfterLostContext) | 2730 TEST_P(LayerTreeHostImplTest, dontUseOldResourcesAfterLostContext) |
2730 { | 2731 { |
2731 int layerId = 1; | 2732 int layerId = 1; |
2732 | 2733 |
2733 scoped_ptr<LayerImpl> rootLayer(LayerImpl::create(layerId++)); | 2734 scoped_ptr<LayerImpl> rootLayer(LayerImpl::create(layerId++)); |
2734 rootLayer->setBounds(gfx::Size(10, 10)); | 2735 rootLayer->setBounds(gfx::Size(10, 10)); |
(...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3141 transform.rotate(35); | 3142 transform.rotate(35); |
3142 transform.translate(-50, -50); | 3143 transform.translate(-50, -50); |
3143 surfaceLayerPtr->setTransform(transform); | 3144 surfaceLayerPtr->setTransform(transform); |
3144 | 3145 |
3145 { | 3146 { |
3146 LayerTreeHostImpl::FrameData frame; | 3147 LayerTreeHostImpl::FrameData frame; |
3147 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3148 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
3148 | 3149 |
3149 // Must receive two render passes, each with one quad | 3150 // Must receive two render passes, each with one quad |
3150 ASSERT_EQ(2U, frame.renderPasses.size()); | 3151 ASSERT_EQ(2U, frame.renderPasses.size()); |
3151 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size()); | 3152 EXPECT_EQ(2U, frame.renderPasses[0]->quad_list.size()); |
3152 ASSERT_EQ(1U, frame.renderPasses[1]->quadList().size()); | 3153 ASSERT_EQ(1U, frame.renderPasses[1]->quad_list.size()); |
3153 | 3154 |
3154 // Verify that the child layers are being clipped. | 3155 // Verify that the child layers are being clipped. |
3155 gfx::Rect quadVisibleRect = frame.renderPasses[0]->quadList()[0]->visibl
e_rect; | 3156 gfx::Rect quadVisibleRect = frame.renderPasses[0]->quad_list[0]->visible
_rect; |
3156 EXPECT_LT(quadVisibleRect.width(), 100); | 3157 EXPECT_LT(quadVisibleRect.width(), 100); |
3157 | 3158 |
3158 quadVisibleRect = frame.renderPasses[0]->quadList()[1]->visible_rect; | 3159 quadVisibleRect = frame.renderPasses[0]->quad_list[1]->visible_rect; |
3159 EXPECT_LT(quadVisibleRect.width(), 100); | 3160 EXPECT_LT(quadVisibleRect.width(), 100); |
3160 | 3161 |
3161 // Verify that the render surface texture is *not* clipped. | 3162 // Verify that the render surface texture is *not* clipped. |
3162 EXPECT_RECT_EQ(gfx::Rect(0, 0, 100, 100), frame.renderPasses[0]->outputR
ect()); | 3163 EXPECT_RECT_EQ(gfx::Rect(0, 0, 100, 100), frame.renderPasses[0]->output_
rect); |
3163 | 3164 |
3164 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quadList()[0]->m
aterial); | 3165 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quad_list[0]->ma
terial); |
3165 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame.
renderPasses[1]->quadList()[0]); | 3166 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame.
renderPasses[1]->quad_list[0]); |
3166 EXPECT_FALSE(quad->contents_changed_since_last_frame.IsEmpty()); | 3167 EXPECT_FALSE(quad->contents_changed_since_last_frame.IsEmpty()); |
3167 | 3168 |
3168 myHostImpl->drawLayers(frame); | 3169 myHostImpl->drawLayers(frame); |
3169 myHostImpl->didDrawAllLayers(frame); | 3170 myHostImpl->didDrawAllLayers(frame); |
3170 } | 3171 } |
3171 | 3172 |
3172 transform = surfaceLayerPtr->transform(); | 3173 transform = surfaceLayerPtr->transform(); |
3173 transform.translate(50, 50); | 3174 transform.translate(50, 50); |
3174 transform.rotate(-35); | 3175 transform.rotate(-35); |
3175 transform.translate(-50, -50); | 3176 transform.translate(-50, -50); |
3176 surfaceLayerPtr->setTransform(transform); | 3177 surfaceLayerPtr->setTransform(transform); |
3177 | 3178 |
3178 // The surface is now aligned again, and the clipped parts are exposed. | 3179 // The surface is now aligned again, and the clipped parts are exposed. |
3179 // Since the layers were clipped, even though the render surface size | 3180 // Since the layers were clipped, even though the render surface size |
3180 // was not changed, the texture should not be saved. | 3181 // was not changed, the texture should not be saved. |
3181 { | 3182 { |
3182 LayerTreeHostImpl::FrameData frame; | 3183 LayerTreeHostImpl::FrameData frame; |
3183 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3184 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
3184 | 3185 |
3185 // Must receive two render passes, each with one quad | 3186 // Must receive two render passes, each with one quad |
3186 ASSERT_EQ(2U, frame.renderPasses.size()); | 3187 ASSERT_EQ(2U, frame.renderPasses.size()); |
3187 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size()); | 3188 EXPECT_EQ(2U, frame.renderPasses[0]->quad_list.size()); |
3188 ASSERT_EQ(1U, frame.renderPasses[1]->quadList().size()); | 3189 ASSERT_EQ(1U, frame.renderPasses[1]->quad_list.size()); |
3189 | 3190 |
3190 myHostImpl->drawLayers(frame); | 3191 myHostImpl->drawLayers(frame); |
3191 myHostImpl->didDrawAllLayers(frame); | 3192 myHostImpl->didDrawAllLayers(frame); |
3192 } | 3193 } |
3193 } | 3194 } |
3194 | 3195 |
3195 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusion) | 3196 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusion) |
3196 { | 3197 { |
3197 LayerTreeSettings settings; | 3198 LayerTreeSettings settings; |
3198 settings.minimumOcclusionTrackingSize = gfx::Size(); | 3199 settings.minimumOcclusionTrackingSize = gfx::Size(); |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3247 | 3248 |
3248 // Initial draw - must receive all quads | 3249 // Initial draw - must receive all quads |
3249 { | 3250 { |
3250 LayerTreeHostImpl::FrameData frame; | 3251 LayerTreeHostImpl::FrameData frame; |
3251 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3252 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
3252 | 3253 |
3253 // Must receive 3 render passes. | 3254 // Must receive 3 render passes. |
3254 // For Root, there are 2 quads; for S1, there are 2 quads (1 is occluded
); for S2, there is 2 quads. | 3255 // For Root, there are 2 quads; for S1, there are 2 quads (1 is occluded
); for S2, there is 2 quads. |
3255 ASSERT_EQ(3U, frame.renderPasses.size()); | 3256 ASSERT_EQ(3U, frame.renderPasses.size()); |
3256 | 3257 |
3257 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size()); | 3258 EXPECT_EQ(2U, frame.renderPasses[0]->quad_list.size()); |
3258 EXPECT_EQ(2U, frame.renderPasses[1]->quadList().size()); | 3259 EXPECT_EQ(2U, frame.renderPasses[1]->quad_list.size()); |
3259 EXPECT_EQ(2U, frame.renderPasses[2]->quadList().size()); | 3260 EXPECT_EQ(2U, frame.renderPasses[2]->quad_list.size()); |
3260 | 3261 |
3261 myHostImpl->drawLayers(frame); | 3262 myHostImpl->drawLayers(frame); |
3262 myHostImpl->didDrawAllLayers(frame); | 3263 myHostImpl->didDrawAllLayers(frame); |
3263 } | 3264 } |
3264 | 3265 |
3265 // "Unocclude" surface S1 and repeat draw. | 3266 // "Unocclude" surface S1 and repeat draw. |
3266 // Must remove S2's render pass since it's cached; | 3267 // Must remove S2's render pass since it's cached; |
3267 // Must keep S1 quads because texture contained external occlusion. | 3268 // Must keep S1 quads because texture contained external occlusion. |
3268 WebTransformationMatrix transform = layerS2Ptr->transform(); | 3269 WebTransformationMatrix transform = layerS2Ptr->transform(); |
3269 transform.translate(150, 150); | 3270 transform.translate(150, 150); |
3270 layerS2Ptr->setTransform(transform); | 3271 layerS2Ptr->setTransform(transform); |
3271 { | 3272 { |
3272 LayerTreeHostImpl::FrameData frame; | 3273 LayerTreeHostImpl::FrameData frame; |
3273 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3274 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
3274 | 3275 |
3275 // Must receive 2 render passes. | 3276 // Must receive 2 render passes. |
3276 // For Root, there are 2 quads | 3277 // For Root, there are 2 quads |
3277 // For S1, the number of quads depends on what got unoccluded, so not as
serted beyond being positive. | 3278 // For S1, the number of quads depends on what got unoccluded, so not as
serted beyond being positive. |
3278 // For S2, there is no render pass | 3279 // For S2, there is no render pass |
3279 ASSERT_EQ(2U, frame.renderPasses.size()); | 3280 ASSERT_EQ(2U, frame.renderPasses.size()); |
3280 | 3281 |
3281 EXPECT_GT(frame.renderPasses[0]->quadList().size(), 0U); | 3282 EXPECT_GT(frame.renderPasses[0]->quad_list.size(), 0U); |
3282 EXPECT_EQ(2U, frame.renderPasses[1]->quadList().size()); | 3283 EXPECT_EQ(2U, frame.renderPasses[1]->quad_list.size()); |
3283 | 3284 |
3284 myHostImpl->drawLayers(frame); | 3285 myHostImpl->drawLayers(frame); |
3285 myHostImpl->didDrawAllLayers(frame); | 3286 myHostImpl->didDrawAllLayers(frame); |
3286 } | 3287 } |
3287 | 3288 |
3288 // "Re-occlude" surface S1 and repeat draw. | 3289 // "Re-occlude" surface S1 and repeat draw. |
3289 // Must remove S1's render pass since it is now available in full. | 3290 // Must remove S1's render pass since it is now available in full. |
3290 // S2 has no change so must also be removed. | 3291 // S2 has no change so must also be removed. |
3291 transform = layerS2Ptr->transform(); | 3292 transform = layerS2Ptr->transform(); |
3292 transform.translate(-15, -15); | 3293 transform.translate(-15, -15); |
3293 layerS2Ptr->setTransform(transform); | 3294 layerS2Ptr->setTransform(transform); |
3294 { | 3295 { |
3295 LayerTreeHostImpl::FrameData frame; | 3296 LayerTreeHostImpl::FrameData frame; |
3296 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3297 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
3297 | 3298 |
3298 // Must receive 1 render pass - for the root. | 3299 // Must receive 1 render pass - for the root. |
3299 ASSERT_EQ(1U, frame.renderPasses.size()); | 3300 ASSERT_EQ(1U, frame.renderPasses.size()); |
3300 | 3301 |
3301 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size()); | 3302 EXPECT_EQ(2U, frame.renderPasses[0]->quad_list.size()); |
3302 | 3303 |
3303 myHostImpl->drawLayers(frame); | 3304 myHostImpl->drawLayers(frame); |
3304 myHostImpl->didDrawAllLayers(frame); | 3305 myHostImpl->didDrawAllLayers(frame); |
3305 } | 3306 } |
3306 | 3307 |
3307 } | 3308 } |
3308 | 3309 |
3309 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionEarlyOut) | 3310 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionEarlyOut) |
3310 { | 3311 { |
3311 LayerTreeSettings settings; | 3312 LayerTreeSettings settings; |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3360 | 3361 |
3361 // Initial draw - must receive all quads | 3362 // Initial draw - must receive all quads |
3362 { | 3363 { |
3363 LayerTreeHostImpl::FrameData frame; | 3364 LayerTreeHostImpl::FrameData frame; |
3364 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3365 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
3365 | 3366 |
3366 // Must receive 3 render passes. | 3367 // Must receive 3 render passes. |
3367 // For Root, there are 2 quads; for S1, there are 3 quads; for S2, there
is 1 quad. | 3368 // For Root, there are 2 quads; for S1, there are 3 quads; for S2, there
is 1 quad. |
3368 ASSERT_EQ(3U, frame.renderPasses.size()); | 3369 ASSERT_EQ(3U, frame.renderPasses.size()); |
3369 | 3370 |
3370 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3371 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size()); |
3371 | 3372 |
3372 // L14 is culled, so only 3 quads. | 3373 // L14 is culled, so only 3 quads. |
3373 EXPECT_EQ(3U, frame.renderPasses[1]->quadList().size()); | 3374 EXPECT_EQ(3U, frame.renderPasses[1]->quad_list.size()); |
3374 EXPECT_EQ(2U, frame.renderPasses[2]->quadList().size()); | 3375 EXPECT_EQ(2U, frame.renderPasses[2]->quad_list.size()); |
3375 | 3376 |
3376 myHostImpl->drawLayers(frame); | 3377 myHostImpl->drawLayers(frame); |
3377 myHostImpl->didDrawAllLayers(frame); | 3378 myHostImpl->didDrawAllLayers(frame); |
3378 } | 3379 } |
3379 | 3380 |
3380 // "Unocclude" surface S1 and repeat draw. | 3381 // "Unocclude" surface S1 and repeat draw. |
3381 // Must remove S2's render pass since it's cached; | 3382 // Must remove S2's render pass since it's cached; |
3382 // Must keep S1 quads because texture contained external occlusion. | 3383 // Must keep S1 quads because texture contained external occlusion. |
3383 WebTransformationMatrix transform = layerS2Ptr->transform(); | 3384 WebTransformationMatrix transform = layerS2Ptr->transform(); |
3384 transform.translate(100, 100); | 3385 transform.translate(100, 100); |
3385 layerS2Ptr->setTransform(transform); | 3386 layerS2Ptr->setTransform(transform); |
3386 { | 3387 { |
3387 LayerTreeHostImpl::FrameData frame; | 3388 LayerTreeHostImpl::FrameData frame; |
3388 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3389 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
3389 | 3390 |
3390 // Must receive 2 render passes. | 3391 // Must receive 2 render passes. |
3391 // For Root, there are 2 quads | 3392 // For Root, there are 2 quads |
3392 // For S1, the number of quads depends on what got unoccluded, so not as
serted beyond being positive. | 3393 // For S1, the number of quads depends on what got unoccluded, so not as
serted beyond being positive. |
3393 // For S2, there is no render pass | 3394 // For S2, there is no render pass |
3394 ASSERT_EQ(2U, frame.renderPasses.size()); | 3395 ASSERT_EQ(2U, frame.renderPasses.size()); |
3395 | 3396 |
3396 EXPECT_GT(frame.renderPasses[0]->quadList().size(), 0U); | 3397 EXPECT_GT(frame.renderPasses[0]->quad_list.size(), 0U); |
3397 EXPECT_EQ(2U, frame.renderPasses[1]->quadList().size()); | 3398 EXPECT_EQ(2U, frame.renderPasses[1]->quad_list.size()); |
3398 | 3399 |
3399 myHostImpl->drawLayers(frame); | 3400 myHostImpl->drawLayers(frame); |
3400 myHostImpl->didDrawAllLayers(frame); | 3401 myHostImpl->didDrawAllLayers(frame); |
3401 } | 3402 } |
3402 | 3403 |
3403 // "Re-occlude" surface S1 and repeat draw. | 3404 // "Re-occlude" surface S1 and repeat draw. |
3404 // Must remove S1's render pass since it is now available in full. | 3405 // Must remove S1's render pass since it is now available in full. |
3405 // S2 has no change so must also be removed. | 3406 // S2 has no change so must also be removed. |
3406 transform = layerS2Ptr->transform(); | 3407 transform = layerS2Ptr->transform(); |
3407 transform.translate(-15, -15); | 3408 transform.translate(-15, -15); |
3408 layerS2Ptr->setTransform(transform); | 3409 layerS2Ptr->setTransform(transform); |
3409 { | 3410 { |
3410 LayerTreeHostImpl::FrameData frame; | 3411 LayerTreeHostImpl::FrameData frame; |
3411 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3412 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
3412 | 3413 |
3413 // Must receive 1 render pass - for the root. | 3414 // Must receive 1 render pass - for the root. |
3414 ASSERT_EQ(1U, frame.renderPasses.size()); | 3415 ASSERT_EQ(1U, frame.renderPasses.size()); |
3415 | 3416 |
3416 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size()); | 3417 EXPECT_EQ(2U, frame.renderPasses[0]->quad_list.size()); |
3417 | 3418 |
3418 myHostImpl->drawLayers(frame); | 3419 myHostImpl->drawLayers(frame); |
3419 myHostImpl->didDrawAllLayers(frame); | 3420 myHostImpl->didDrawAllLayers(frame); |
3420 } | 3421 } |
3421 } | 3422 } |
3422 | 3423 |
3423 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionExternalOverInternal) | 3424 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionExternalOverInternal) |
3424 { | 3425 { |
3425 LayerTreeSettings settings; | 3426 LayerTreeSettings settings; |
3426 settings.minimumOcclusionTrackingSize = gfx::Size(); | 3427 settings.minimumOcclusionTrackingSize = gfx::Size(); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3468 | 3469 |
3469 // Initial draw - must receive all quads | 3470 // Initial draw - must receive all quads |
3470 { | 3471 { |
3471 LayerTreeHostImpl::FrameData frame; | 3472 LayerTreeHostImpl::FrameData frame; |
3472 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3473 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
3473 | 3474 |
3474 // Must receive 3 render passes. | 3475 // Must receive 3 render passes. |
3475 // For Root, there are 2 quads; for S1, there are 3 quads; for S2, there
is 1 quad. | 3476 // For Root, there are 2 quads; for S1, there are 3 quads; for S2, there
is 1 quad. |
3476 ASSERT_EQ(3U, frame.renderPasses.size()); | 3477 ASSERT_EQ(3U, frame.renderPasses.size()); |
3477 | 3478 |
3478 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3479 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size()); |
3479 EXPECT_EQ(3U, frame.renderPasses[1]->quadList().size()); | 3480 EXPECT_EQ(3U, frame.renderPasses[1]->quad_list.size()); |
3480 EXPECT_EQ(2U, frame.renderPasses[2]->quadList().size()); | 3481 EXPECT_EQ(2U, frame.renderPasses[2]->quad_list.size()); |
3481 | 3482 |
3482 myHostImpl->drawLayers(frame); | 3483 myHostImpl->drawLayers(frame); |
3483 myHostImpl->didDrawAllLayers(frame); | 3484 myHostImpl->didDrawAllLayers(frame); |
3484 } | 3485 } |
3485 | 3486 |
3486 // "Unocclude" surface S1 and repeat draw. | 3487 // "Unocclude" surface S1 and repeat draw. |
3487 // Must remove S2's render pass since it's cached; | 3488 // Must remove S2's render pass since it's cached; |
3488 // Must keep S1 quads because texture contained external occlusion. | 3489 // Must keep S1 quads because texture contained external occlusion. |
3489 WebTransformationMatrix transform = layerS2Ptr->transform(); | 3490 WebTransformationMatrix transform = layerS2Ptr->transform(); |
3490 transform.translate(300, 0); | 3491 transform.translate(300, 0); |
3491 layerS2Ptr->setTransform(transform); | 3492 layerS2Ptr->setTransform(transform); |
3492 { | 3493 { |
3493 LayerTreeHostImpl::FrameData frame; | 3494 LayerTreeHostImpl::FrameData frame; |
3494 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3495 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
3495 | 3496 |
3496 // Must receive 2 render passes. | 3497 // Must receive 2 render passes. |
3497 // For Root, there are 2 quads | 3498 // For Root, there are 2 quads |
3498 // For S1, the number of quads depends on what got unoccluded, so not as
serted beyond being positive. | 3499 // For S1, the number of quads depends on what got unoccluded, so not as
serted beyond being positive. |
3499 // For S2, there is no render pass | 3500 // For S2, there is no render pass |
3500 ASSERT_EQ(2U, frame.renderPasses.size()); | 3501 ASSERT_EQ(2U, frame.renderPasses.size()); |
3501 | 3502 |
3502 EXPECT_GT(frame.renderPasses[0]->quadList().size(), 0U); | 3503 EXPECT_GT(frame.renderPasses[0]->quad_list.size(), 0U); |
3503 EXPECT_EQ(2U, frame.renderPasses[1]->quadList().size()); | 3504 EXPECT_EQ(2U, frame.renderPasses[1]->quad_list.size()); |
3504 | 3505 |
3505 myHostImpl->drawLayers(frame); | 3506 myHostImpl->drawLayers(frame); |
3506 myHostImpl->didDrawAllLayers(frame); | 3507 myHostImpl->didDrawAllLayers(frame); |
3507 } | 3508 } |
3508 } | 3509 } |
3509 | 3510 |
3510 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionExternalNotAligned) | 3511 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionExternalNotAligned) |
3511 { | 3512 { |
3512 LayerTreeSettings settings; | 3513 LayerTreeSettings settings; |
3513 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); | 3514 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3549 addDrawingLayerTo(layerS1Ptr, 3, gfx::Rect(200, 0, 200, 400), 0); // L11 | 3550 addDrawingLayerTo(layerS1Ptr, 3, gfx::Rect(200, 0, 200, 400), 0); // L11 |
3550 | 3551 |
3551 // Initial draw - must receive all quads | 3552 // Initial draw - must receive all quads |
3552 { | 3553 { |
3553 LayerTreeHostImpl::FrameData frame; | 3554 LayerTreeHostImpl::FrameData frame; |
3554 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3555 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
3555 | 3556 |
3556 // Must receive 2 render passes. | 3557 // Must receive 2 render passes. |
3557 ASSERT_EQ(2U, frame.renderPasses.size()); | 3558 ASSERT_EQ(2U, frame.renderPasses.size()); |
3558 | 3559 |
3559 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size()); | 3560 EXPECT_EQ(2U, frame.renderPasses[0]->quad_list.size()); |
3560 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); | 3561 EXPECT_EQ(1U, frame.renderPasses[1]->quad_list.size()); |
3561 | 3562 |
3562 myHostImpl->drawLayers(frame); | 3563 myHostImpl->drawLayers(frame); |
3563 myHostImpl->didDrawAllLayers(frame); | 3564 myHostImpl->didDrawAllLayers(frame); |
3564 } | 3565 } |
3565 | 3566 |
3566 // Change opacity and draw. Verify we used cached texture. | 3567 // Change opacity and draw. Verify we used cached texture. |
3567 layerS1Ptr->setOpacity(0.2f); | 3568 layerS1Ptr->setOpacity(0.2f); |
3568 { | 3569 { |
3569 LayerTreeHostImpl::FrameData frame; | 3570 LayerTreeHostImpl::FrameData frame; |
3570 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3571 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
3571 | 3572 |
3572 // One render pass must be gone due to cached texture. | 3573 // One render pass must be gone due to cached texture. |
3573 ASSERT_EQ(1U, frame.renderPasses.size()); | 3574 ASSERT_EQ(1U, frame.renderPasses.size()); |
3574 | 3575 |
3575 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3576 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size()); |
3576 | 3577 |
3577 myHostImpl->drawLayers(frame); | 3578 myHostImpl->drawLayers(frame); |
3578 myHostImpl->didDrawAllLayers(frame); | 3579 myHostImpl->didDrawAllLayers(frame); |
3579 } | 3580 } |
3580 } | 3581 } |
3581 | 3582 |
3582 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionPartialSwap) | 3583 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionPartialSwap) |
3583 { | 3584 { |
3584 LayerTreeSettings settings; | 3585 LayerTreeSettings settings; |
3585 settings.minimumOcclusionTrackingSize = gfx::Size(); | 3586 settings.minimumOcclusionTrackingSize = gfx::Size(); |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3635 | 3636 |
3636 // Initial draw - must receive all quads | 3637 // Initial draw - must receive all quads |
3637 { | 3638 { |
3638 LayerTreeHostImpl::FrameData frame; | 3639 LayerTreeHostImpl::FrameData frame; |
3639 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3640 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
3640 | 3641 |
3641 // Must receive 3 render passes. | 3642 // Must receive 3 render passes. |
3642 // For Root, there are 2 quads; for S1, there are 2 quads (one is occlud
ed); for S2, there is 2 quads. | 3643 // For Root, there are 2 quads; for S1, there are 2 quads (one is occlud
ed); for S2, there is 2 quads. |
3643 ASSERT_EQ(3U, frame.renderPasses.size()); | 3644 ASSERT_EQ(3U, frame.renderPasses.size()); |
3644 | 3645 |
3645 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size()); | 3646 EXPECT_EQ(2U, frame.renderPasses[0]->quad_list.size()); |
3646 EXPECT_EQ(2U, frame.renderPasses[1]->quadList().size()); | 3647 EXPECT_EQ(2U, frame.renderPasses[1]->quad_list.size()); |
3647 EXPECT_EQ(2U, frame.renderPasses[2]->quadList().size()); | 3648 EXPECT_EQ(2U, frame.renderPasses[2]->quad_list.size()); |
3648 | 3649 |
3649 myHostImpl->drawLayers(frame); | 3650 myHostImpl->drawLayers(frame); |
3650 myHostImpl->didDrawAllLayers(frame); | 3651 myHostImpl->didDrawAllLayers(frame); |
3651 } | 3652 } |
3652 | 3653 |
3653 // "Unocclude" surface S1 and repeat draw. | 3654 // "Unocclude" surface S1 and repeat draw. |
3654 // Must remove S2's render pass since it's cached; | 3655 // Must remove S2's render pass since it's cached; |
3655 // Must keep S1 quads because texture contained external occlusion. | 3656 // Must keep S1 quads because texture contained external occlusion. |
3656 WebTransformationMatrix transform = layerS2Ptr->transform(); | 3657 WebTransformationMatrix transform = layerS2Ptr->transform(); |
3657 transform.translate(150, 150); | 3658 transform.translate(150, 150); |
3658 layerS2Ptr->setTransform(transform); | 3659 layerS2Ptr->setTransform(transform); |
3659 { | 3660 { |
3660 LayerTreeHostImpl::FrameData frame; | 3661 LayerTreeHostImpl::FrameData frame; |
3661 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3662 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
3662 | 3663 |
3663 // Must receive 2 render passes. | 3664 // Must receive 2 render passes. |
3664 // For Root, there are 2 quads. | 3665 // For Root, there are 2 quads. |
3665 // For S1, there are 2 quads. | 3666 // For S1, there are 2 quads. |
3666 // For S2, there is no render pass | 3667 // For S2, there is no render pass |
3667 ASSERT_EQ(2U, frame.renderPasses.size()); | 3668 ASSERT_EQ(2U, frame.renderPasses.size()); |
3668 | 3669 |
3669 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size()); | 3670 EXPECT_EQ(2U, frame.renderPasses[0]->quad_list.size()); |
3670 EXPECT_EQ(2U, frame.renderPasses[1]->quadList().size()); | 3671 EXPECT_EQ(2U, frame.renderPasses[1]->quad_list.size()); |
3671 | 3672 |
3672 myHostImpl->drawLayers(frame); | 3673 myHostImpl->drawLayers(frame); |
3673 myHostImpl->didDrawAllLayers(frame); | 3674 myHostImpl->didDrawAllLayers(frame); |
3674 } | 3675 } |
3675 | 3676 |
3676 // "Re-occlude" surface S1 and repeat draw. | 3677 // "Re-occlude" surface S1 and repeat draw. |
3677 // Must remove S1's render pass since it is now available in full. | 3678 // Must remove S1's render pass since it is now available in full. |
3678 // S2 has no change so must also be removed. | 3679 // S2 has no change so must also be removed. |
3679 transform = layerS2Ptr->transform(); | 3680 transform = layerS2Ptr->transform(); |
3680 transform.translate(-15, -15); | 3681 transform.translate(-15, -15); |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3809 LayerImpl* childPtr; | 3810 LayerImpl* childPtr; |
3810 | 3811 |
3811 setupLayersForTextureCaching(myHostImpl.get(), rootPtr, intermediateLayerPtr
, surfaceLayerPtr, childPtr, gfx::Size(100, 100)); | 3812 setupLayersForTextureCaching(myHostImpl.get(), rootPtr, intermediateLayerPtr
, surfaceLayerPtr, childPtr, gfx::Size(100, 100)); |
3812 | 3813 |
3813 { | 3814 { |
3814 LayerTreeHostImpl::FrameData frame; | 3815 LayerTreeHostImpl::FrameData frame; |
3815 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3816 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
3816 | 3817 |
3817 // Must receive two render passes, each with one quad | 3818 // Must receive two render passes, each with one quad |
3818 ASSERT_EQ(2U, frame.renderPasses.size()); | 3819 ASSERT_EQ(2U, frame.renderPasses.size()); |
3819 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3820 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size()); |
3820 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); | 3821 EXPECT_EQ(1U, frame.renderPasses[1]->quad_list.size()); |
3821 | 3822 |
3822 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quadList()[0]->m
aterial); | 3823 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quad_list[0]->ma
terial); |
3823 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame.
renderPasses[1]->quadList()[0]); | 3824 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame.
renderPasses[1]->quad_list[0]); |
3824 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id
); | 3825 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id
); |
3825 EXPECT_FALSE(targetPass->damageRect().IsEmpty()); | 3826 EXPECT_FALSE(targetPass->damage_rect.IsEmpty()); |
3826 | 3827 |
3827 myHostImpl->drawLayers(frame); | 3828 myHostImpl->drawLayers(frame); |
3828 myHostImpl->didDrawAllLayers(frame); | 3829 myHostImpl->didDrawAllLayers(frame); |
3829 } | 3830 } |
3830 | 3831 |
3831 // Draw without any change | 3832 // Draw without any change |
3832 { | 3833 { |
3833 LayerTreeHostImpl::FrameData frame; | 3834 LayerTreeHostImpl::FrameData frame; |
3834 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3835 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
3835 | 3836 |
3836 // Must receive one render pass, as the other one should be culled | 3837 // Must receive one render pass, as the other one should be culled |
3837 ASSERT_EQ(1U, frame.renderPasses.size()); | 3838 ASSERT_EQ(1U, frame.renderPasses.size()); |
3838 | 3839 |
3839 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3840 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size()); |
3840 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[0]->quadList()[0]->m
aterial); | 3841 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[0]->quad_list[0]->ma
terial); |
3841 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame.
renderPasses[0]->quadList()[0]); | 3842 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame.
renderPasses[0]->quad_list[0]); |
3842 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id
); | 3843 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id
); |
3843 EXPECT_TRUE(targetPass->damageRect().IsEmpty()); | 3844 EXPECT_TRUE(targetPass->damage_rect.IsEmpty()); |
3844 | 3845 |
3845 myHostImpl->drawLayers(frame); | 3846 myHostImpl->drawLayers(frame); |
3846 myHostImpl->didDrawAllLayers(frame); | 3847 myHostImpl->didDrawAllLayers(frame); |
3847 } | 3848 } |
3848 | 3849 |
3849 // Change opacity and draw | 3850 // Change opacity and draw |
3850 surfaceLayerPtr->setOpacity(0.6f); | 3851 surfaceLayerPtr->setOpacity(0.6f); |
3851 { | 3852 { |
3852 LayerTreeHostImpl::FrameData frame; | 3853 LayerTreeHostImpl::FrameData frame; |
3853 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3854 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
3854 | 3855 |
3855 // Must receive one render pass, as the other one should be culled | 3856 // Must receive one render pass, as the other one should be culled |
3856 ASSERT_EQ(1U, frame.renderPasses.size()); | 3857 ASSERT_EQ(1U, frame.renderPasses.size()); |
3857 | 3858 |
3858 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3859 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size()); |
3859 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[0]->quadList()[0]->m
aterial); | 3860 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[0]->quad_list[0]->ma
terial); |
3860 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame.
renderPasses[0]->quadList()[0]); | 3861 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame.
renderPasses[0]->quad_list[0]); |
3861 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id
); | 3862 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id
); |
3862 EXPECT_TRUE(targetPass->damageRect().IsEmpty()); | 3863 EXPECT_TRUE(targetPass->damage_rect.IsEmpty()); |
3863 | 3864 |
3864 myHostImpl->drawLayers(frame); | 3865 myHostImpl->drawLayers(frame); |
3865 myHostImpl->didDrawAllLayers(frame); | 3866 myHostImpl->didDrawAllLayers(frame); |
3866 } | 3867 } |
3867 | 3868 |
3868 // Change less benign property and draw - should have contents changed flag | 3869 // Change less benign property and draw - should have contents changed flag |
3869 surfaceLayerPtr->setStackingOrderChanged(true); | 3870 surfaceLayerPtr->setStackingOrderChanged(true); |
3870 { | 3871 { |
3871 LayerTreeHostImpl::FrameData frame; | 3872 LayerTreeHostImpl::FrameData frame; |
3872 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3873 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
3873 | 3874 |
3874 // Must receive two render passes, each with one quad | 3875 // Must receive two render passes, each with one quad |
3875 ASSERT_EQ(2U, frame.renderPasses.size()); | 3876 ASSERT_EQ(2U, frame.renderPasses.size()); |
3876 | 3877 |
3877 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3878 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size()); |
3878 EXPECT_EQ(DrawQuad::SOLID_COLOR, frame.renderPasses[0]->quadList()[0]->m
aterial); | 3879 EXPECT_EQ(DrawQuad::SOLID_COLOR, frame.renderPasses[0]->quad_list[0]->ma
terial); |
3879 | 3880 |
3880 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quadList()[0]->m
aterial); | 3881 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quad_list[0]->ma
terial); |
3881 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame.
renderPasses[1]->quadList()[0]); | 3882 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame.
renderPasses[1]->quad_list[0]); |
3882 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id
); | 3883 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id
); |
3883 EXPECT_FALSE(targetPass->damageRect().IsEmpty()); | 3884 EXPECT_FALSE(targetPass->damage_rect.IsEmpty()); |
3884 | 3885 |
3885 myHostImpl->drawLayers(frame); | 3886 myHostImpl->drawLayers(frame); |
3886 myHostImpl->didDrawAllLayers(frame); | 3887 myHostImpl->didDrawAllLayers(frame); |
3887 } | 3888 } |
3888 | 3889 |
3889 // Change opacity again, and evict the cached surface texture. | 3890 // Change opacity again, and evict the cached surface texture. |
3890 surfaceLayerPtr->setOpacity(0.5f); | 3891 surfaceLayerPtr->setOpacity(0.5f); |
3891 static_cast<GLRendererWithReleaseTextures*>(myHostImpl->renderer())->release
RenderPassTextures(); | 3892 static_cast<GLRendererWithReleaseTextures*>(myHostImpl->renderer())->release
RenderPassTextures(); |
3892 | 3893 |
3893 // Change opacity and draw | 3894 // Change opacity and draw |
3894 surfaceLayerPtr->setOpacity(0.6f); | 3895 surfaceLayerPtr->setOpacity(0.6f); |
3895 { | 3896 { |
3896 LayerTreeHostImpl::FrameData frame; | 3897 LayerTreeHostImpl::FrameData frame; |
3897 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3898 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
3898 | 3899 |
3899 // Must receive two render passes | 3900 // Must receive two render passes |
3900 ASSERT_EQ(2U, frame.renderPasses.size()); | 3901 ASSERT_EQ(2U, frame.renderPasses.size()); |
3901 | 3902 |
3902 // Even though not enough properties changed, the entire thing must be | 3903 // Even though not enough properties changed, the entire thing must be |
3903 // redrawn as we don't have cached textures | 3904 // redrawn as we don't have cached textures |
3904 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3905 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size()); |
3905 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); | 3906 EXPECT_EQ(1U, frame.renderPasses[1]->quad_list.size()); |
3906 | 3907 |
3907 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quadList()[0]->m
aterial); | 3908 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quad_list[0]->ma
terial); |
3908 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame.
renderPasses[1]->quadList()[0]); | 3909 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame.
renderPasses[1]->quad_list[0]); |
3909 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id
); | 3910 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id
); |
3910 EXPECT_TRUE(targetPass->damageRect().IsEmpty()); | 3911 EXPECT_TRUE(targetPass->damage_rect.IsEmpty()); |
3911 | 3912 |
3912 // Was our surface evicted? | 3913 // Was our surface evicted? |
3913 EXPECT_FALSE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(
targetPass->id())); | 3914 EXPECT_FALSE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(
targetPass->id)); |
3914 | 3915 |
3915 myHostImpl->drawLayers(frame); | 3916 myHostImpl->drawLayers(frame); |
3916 myHostImpl->didDrawAllLayers(frame); | 3917 myHostImpl->didDrawAllLayers(frame); |
3917 } | 3918 } |
3918 | 3919 |
3919 // Draw without any change, to make sure the state is clear | 3920 // Draw without any change, to make sure the state is clear |
3920 { | 3921 { |
3921 LayerTreeHostImpl::FrameData frame; | 3922 LayerTreeHostImpl::FrameData frame; |
3922 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3923 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
3923 | 3924 |
3924 // Must receive one render pass, as the other one should be culled | 3925 // Must receive one render pass, as the other one should be culled |
3925 ASSERT_EQ(1U, frame.renderPasses.size()); | 3926 ASSERT_EQ(1U, frame.renderPasses.size()); |
3926 | 3927 |
3927 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3928 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size()); |
3928 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[0]->quadList()[0]->m
aterial); | 3929 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[0]->quad_list[0]->ma
terial); |
3929 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame.
renderPasses[0]->quadList()[0]); | 3930 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame.
renderPasses[0]->quad_list[0]); |
3930 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id
); | 3931 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id
); |
3931 EXPECT_TRUE(targetPass->damageRect().IsEmpty()); | 3932 EXPECT_TRUE(targetPass->damage_rect.IsEmpty()); |
3932 | 3933 |
3933 myHostImpl->drawLayers(frame); | 3934 myHostImpl->drawLayers(frame); |
3934 myHostImpl->didDrawAllLayers(frame); | 3935 myHostImpl->didDrawAllLayers(frame); |
3935 } | 3936 } |
3936 | 3937 |
3937 // Change location of the intermediate layer | 3938 // Change location of the intermediate layer |
3938 WebTransformationMatrix transform = intermediateLayerPtr->transform(); | 3939 WebTransformationMatrix transform = intermediateLayerPtr->transform(); |
3939 transform.setM41(1.0001); | 3940 transform.setM41(1.0001); |
3940 intermediateLayerPtr->setTransform(transform); | 3941 intermediateLayerPtr->setTransform(transform); |
3941 { | 3942 { |
3942 LayerTreeHostImpl::FrameData frame; | 3943 LayerTreeHostImpl::FrameData frame; |
3943 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3944 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
3944 | 3945 |
3945 // Must receive one render pass, as the other one should be culled. | 3946 // Must receive one render pass, as the other one should be culled. |
3946 ASSERT_EQ(1U, frame.renderPasses.size()); | 3947 ASSERT_EQ(1U, frame.renderPasses.size()); |
3947 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3948 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size()); |
3948 | 3949 |
3949 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[0]->quadList()[0]->m
aterial); | 3950 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[0]->quad_list[0]->ma
terial); |
3950 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame.
renderPasses[0]->quadList()[0]); | 3951 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame.
renderPasses[0]->quad_list[0]); |
3951 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id
); | 3952 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id
); |
3952 EXPECT_TRUE(targetPass->damageRect().IsEmpty()); | 3953 EXPECT_TRUE(targetPass->damage_rect.IsEmpty()); |
3953 | 3954 |
3954 myHostImpl->drawLayers(frame); | 3955 myHostImpl->drawLayers(frame); |
3955 myHostImpl->didDrawAllLayers(frame); | 3956 myHostImpl->didDrawAllLayers(frame); |
3956 } | 3957 } |
3957 } | 3958 } |
3958 | 3959 |
3959 TEST_P(LayerTreeHostImplTest, surfaceTextureCachingNoPartialSwap) | 3960 TEST_P(LayerTreeHostImplTest, surfaceTextureCachingNoPartialSwap) |
3960 { | 3961 { |
3961 LayerTreeSettings settings; | 3962 LayerTreeSettings settings; |
3962 settings.minimumOcclusionTrackingSize = gfx::Size(); | 3963 settings.minimumOcclusionTrackingSize = gfx::Size(); |
3963 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); | 3964 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); |
3964 | 3965 |
3965 LayerImpl* rootPtr; | 3966 LayerImpl* rootPtr; |
3966 LayerImpl* intermediateLayerPtr; | 3967 LayerImpl* intermediateLayerPtr; |
3967 LayerImpl* surfaceLayerPtr; | 3968 LayerImpl* surfaceLayerPtr; |
3968 LayerImpl* childPtr; | 3969 LayerImpl* childPtr; |
3969 | 3970 |
3970 setupLayersForTextureCaching(myHostImpl.get(), rootPtr, intermediateLayerPtr
, surfaceLayerPtr, childPtr, gfx::Size(100, 100)); | 3971 setupLayersForTextureCaching(myHostImpl.get(), rootPtr, intermediateLayerPtr
, surfaceLayerPtr, childPtr, gfx::Size(100, 100)); |
3971 | 3972 |
3972 { | 3973 { |
3973 LayerTreeHostImpl::FrameData frame; | 3974 LayerTreeHostImpl::FrameData frame; |
3974 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3975 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
3975 | 3976 |
3976 // Must receive two render passes, each with one quad | 3977 // Must receive two render passes, each with one quad |
3977 ASSERT_EQ(2U, frame.renderPasses.size()); | 3978 ASSERT_EQ(2U, frame.renderPasses.size()); |
3978 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3979 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size()); |
3979 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); | 3980 EXPECT_EQ(1U, frame.renderPasses[1]->quad_list.size()); |
3980 | 3981 |
3981 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quadList()[0]->m
aterial); | 3982 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quad_list[0]->ma
terial); |
3982 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame.
renderPasses[1]->quadList()[0]); | 3983 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame.
renderPasses[1]->quad_list[0]); |
3983 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id
); | 3984 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id
); |
3984 EXPECT_FALSE(targetPass->damageRect().IsEmpty()); | 3985 EXPECT_FALSE(targetPass->damage_rect.IsEmpty()); |
3985 | 3986 |
3986 EXPECT_FALSE(frame.renderPasses[0]->damageRect().IsEmpty()); | 3987 EXPECT_FALSE(frame.renderPasses[0]->damage_rect.IsEmpty()); |
3987 EXPECT_FALSE(frame.renderPasses[1]->damageRect().IsEmpty()); | 3988 EXPECT_FALSE(frame.renderPasses[1]->damage_rect.IsEmpty()); |
3988 | 3989 |
3989 EXPECT_FALSE(frame.renderPasses[0]->hasOcclusionFromOutsideTargetSurface
()); | 3990 EXPECT_FALSE(frame.renderPasses[0]->has_occlusion_from_outside_target_su
rface); |
3990 EXPECT_FALSE(frame.renderPasses[1]->hasOcclusionFromOutsideTargetSurface
()); | 3991 EXPECT_FALSE(frame.renderPasses[1]->has_occlusion_from_outside_target_su
rface); |
3991 | 3992 |
3992 myHostImpl->drawLayers(frame); | 3993 myHostImpl->drawLayers(frame); |
3993 myHostImpl->didDrawAllLayers(frame); | 3994 myHostImpl->didDrawAllLayers(frame); |
3994 } | 3995 } |
3995 | 3996 |
3996 // Draw without any change | 3997 // Draw without any change |
3997 { | 3998 { |
3998 LayerTreeHostImpl::FrameData frame; | 3999 LayerTreeHostImpl::FrameData frame; |
3999 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 4000 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
4000 | 4001 |
4001 // Even though there was no change, we set the damage to entire viewport
. | 4002 // Even though there was no change, we set the damage to entire viewport
. |
4002 // One of the passes should be culled as a result, since contents didn't
change | 4003 // One of the passes should be culled as a result, since contents didn't
change |
4003 // and we have cached texture. | 4004 // and we have cached texture. |
4004 ASSERT_EQ(1U, frame.renderPasses.size()); | 4005 ASSERT_EQ(1U, frame.renderPasses.size()); |
4005 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 4006 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size()); |
4006 | 4007 |
4007 EXPECT_TRUE(frame.renderPasses[0]->damageRect().IsEmpty()); | 4008 EXPECT_TRUE(frame.renderPasses[0]->damage_rect.IsEmpty()); |
4008 | 4009 |
4009 myHostImpl->drawLayers(frame); | 4010 myHostImpl->drawLayers(frame); |
4010 myHostImpl->didDrawAllLayers(frame); | 4011 myHostImpl->didDrawAllLayers(frame); |
4011 } | 4012 } |
4012 | 4013 |
4013 // Change opacity and draw | 4014 // Change opacity and draw |
4014 surfaceLayerPtr->setOpacity(0.6f); | 4015 surfaceLayerPtr->setOpacity(0.6f); |
4015 { | 4016 { |
4016 LayerTreeHostImpl::FrameData frame; | 4017 LayerTreeHostImpl::FrameData frame; |
4017 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 4018 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
4018 | 4019 |
4019 // Must receive one render pass, as the other one should be culled | 4020 // Must receive one render pass, as the other one should be culled |
4020 ASSERT_EQ(1U, frame.renderPasses.size()); | 4021 ASSERT_EQ(1U, frame.renderPasses.size()); |
4021 | 4022 |
4022 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 4023 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size()); |
4023 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[0]->quadList()[0]->m
aterial); | 4024 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[0]->quad_list[0]->ma
terial); |
4024 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame.
renderPasses[0]->quadList()[0]); | 4025 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame.
renderPasses[0]->quad_list[0]); |
4025 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id
); | 4026 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id
); |
4026 EXPECT_TRUE(targetPass->damageRect().IsEmpty()); | 4027 EXPECT_TRUE(targetPass->damage_rect.IsEmpty()); |
4027 | 4028 |
4028 myHostImpl->drawLayers(frame); | 4029 myHostImpl->drawLayers(frame); |
4029 myHostImpl->didDrawAllLayers(frame); | 4030 myHostImpl->didDrawAllLayers(frame); |
4030 } | 4031 } |
4031 | 4032 |
4032 // Change less benign property and draw - should have contents changed flag | 4033 // Change less benign property and draw - should have contents changed flag |
4033 surfaceLayerPtr->setStackingOrderChanged(true); | 4034 surfaceLayerPtr->setStackingOrderChanged(true); |
4034 { | 4035 { |
4035 LayerTreeHostImpl::FrameData frame; | 4036 LayerTreeHostImpl::FrameData frame; |
4036 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 4037 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
4037 | 4038 |
4038 // Must receive two render passes, each with one quad | 4039 // Must receive two render passes, each with one quad |
4039 ASSERT_EQ(2U, frame.renderPasses.size()); | 4040 ASSERT_EQ(2U, frame.renderPasses.size()); |
4040 | 4041 |
4041 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 4042 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size()); |
4042 EXPECT_EQ(DrawQuad::SOLID_COLOR, frame.renderPasses[0]->quadList()[0]->m
aterial); | 4043 EXPECT_EQ(DrawQuad::SOLID_COLOR, frame.renderPasses[0]->quad_list[0]->ma
terial); |
4043 | 4044 |
4044 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quadList()[0]->m
aterial); | 4045 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quad_list[0]->ma
terial); |
4045 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame.
renderPasses[1]->quadList()[0]); | 4046 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame.
renderPasses[1]->quad_list[0]); |
4046 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id
); | 4047 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id
); |
4047 EXPECT_FALSE(targetPass->damageRect().IsEmpty()); | 4048 EXPECT_FALSE(targetPass->damage_rect.IsEmpty()); |
4048 | 4049 |
4049 myHostImpl->drawLayers(frame); | 4050 myHostImpl->drawLayers(frame); |
4050 myHostImpl->didDrawAllLayers(frame); | 4051 myHostImpl->didDrawAllLayers(frame); |
4051 } | 4052 } |
4052 | 4053 |
4053 // Change opacity again, and evict the cached surface texture. | 4054 // Change opacity again, and evict the cached surface texture. |
4054 surfaceLayerPtr->setOpacity(0.5f); | 4055 surfaceLayerPtr->setOpacity(0.5f); |
4055 static_cast<GLRendererWithReleaseTextures*>(myHostImpl->renderer())->release
RenderPassTextures(); | 4056 static_cast<GLRendererWithReleaseTextures*>(myHostImpl->renderer())->release
RenderPassTextures(); |
4056 | 4057 |
4057 // Change opacity and draw | 4058 // Change opacity and draw |
4058 surfaceLayerPtr->setOpacity(0.6f); | 4059 surfaceLayerPtr->setOpacity(0.6f); |
4059 { | 4060 { |
4060 LayerTreeHostImpl::FrameData frame; | 4061 LayerTreeHostImpl::FrameData frame; |
4061 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 4062 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
4062 | 4063 |
4063 // Must receive two render passes | 4064 // Must receive two render passes |
4064 ASSERT_EQ(2U, frame.renderPasses.size()); | 4065 ASSERT_EQ(2U, frame.renderPasses.size()); |
4065 | 4066 |
4066 // Even though not enough properties changed, the entire thing must be | 4067 // Even though not enough properties changed, the entire thing must be |
4067 // redrawn as we don't have cached textures | 4068 // redrawn as we don't have cached textures |
4068 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 4069 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size()); |
4069 EXPECT_EQ(1U, frame.renderPasses[1]->quadList().size()); | 4070 EXPECT_EQ(1U, frame.renderPasses[1]->quad_list.size()); |
4070 | 4071 |
4071 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quadList()[0]->m
aterial); | 4072 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quad_list[0]->ma
terial); |
4072 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame.
renderPasses[1]->quadList()[0]); | 4073 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame.
renderPasses[1]->quad_list[0]); |
4073 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id
); | 4074 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id
); |
4074 EXPECT_TRUE(targetPass->damageRect().IsEmpty()); | 4075 EXPECT_TRUE(targetPass->damage_rect.IsEmpty()); |
4075 | 4076 |
4076 // Was our surface evicted? | 4077 // Was our surface evicted? |
4077 EXPECT_FALSE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(
targetPass->id())); | 4078 EXPECT_FALSE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(
targetPass->id)); |
4078 | 4079 |
4079 myHostImpl->drawLayers(frame); | 4080 myHostImpl->drawLayers(frame); |
4080 myHostImpl->didDrawAllLayers(frame); | 4081 myHostImpl->didDrawAllLayers(frame); |
4081 } | 4082 } |
4082 | 4083 |
4083 // Draw without any change, to make sure the state is clear | 4084 // Draw without any change, to make sure the state is clear |
4084 { | 4085 { |
4085 LayerTreeHostImpl::FrameData frame; | 4086 LayerTreeHostImpl::FrameData frame; |
4086 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 4087 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
4087 | 4088 |
4088 // Even though there was no change, we set the damage to entire viewport
. | 4089 // Even though there was no change, we set the damage to entire viewport
. |
4089 // One of the passes should be culled as a result, since contents didn't
change | 4090 // One of the passes should be culled as a result, since contents didn't
change |
4090 // and we have cached texture. | 4091 // and we have cached texture. |
4091 ASSERT_EQ(1U, frame.renderPasses.size()); | 4092 ASSERT_EQ(1U, frame.renderPasses.size()); |
4092 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 4093 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size()); |
4093 | 4094 |
4094 myHostImpl->drawLayers(frame); | 4095 myHostImpl->drawLayers(frame); |
4095 myHostImpl->didDrawAllLayers(frame); | 4096 myHostImpl->didDrawAllLayers(frame); |
4096 } | 4097 } |
4097 | 4098 |
4098 // Change location of the intermediate layer | 4099 // Change location of the intermediate layer |
4099 WebTransformationMatrix transform = intermediateLayerPtr->transform(); | 4100 WebTransformationMatrix transform = intermediateLayerPtr->transform(); |
4100 transform.setM41(1.0001); | 4101 transform.setM41(1.0001); |
4101 intermediateLayerPtr->setTransform(transform); | 4102 intermediateLayerPtr->setTransform(transform); |
4102 { | 4103 { |
4103 LayerTreeHostImpl::FrameData frame; | 4104 LayerTreeHostImpl::FrameData frame; |
4104 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 4105 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
4105 | 4106 |
4106 // Must receive one render pass, as the other one should be culled. | 4107 // Must receive one render pass, as the other one should be culled. |
4107 ASSERT_EQ(1U, frame.renderPasses.size()); | 4108 ASSERT_EQ(1U, frame.renderPasses.size()); |
4108 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 4109 EXPECT_EQ(1U, frame.renderPasses[0]->quad_list.size()); |
4109 | 4110 |
4110 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[0]->quadList()[0]->m
aterial); | 4111 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[0]->quad_list[0]->ma
terial); |
4111 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame.
renderPasses[0]->quadList()[0]); | 4112 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame.
renderPasses[0]->quad_list[0]); |
4112 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id
); | 4113 RenderPass* targetPass = frame.renderPassesById.get(quad->render_pass_id
); |
4113 EXPECT_TRUE(targetPass->damageRect().IsEmpty()); | 4114 EXPECT_TRUE(targetPass->damage_rect.IsEmpty()); |
4114 | 4115 |
4115 myHostImpl->drawLayers(frame); | 4116 myHostImpl->drawLayers(frame); |
4116 myHostImpl->didDrawAllLayers(frame); | 4117 myHostImpl->didDrawAllLayers(frame); |
4117 } | 4118 } |
4118 } | 4119 } |
4119 | 4120 |
4120 TEST_P(LayerTreeHostImplTest, releaseContentsTextureShouldTriggerCommit) | 4121 TEST_P(LayerTreeHostImplTest, releaseContentsTextureShouldTriggerCommit) |
4121 { | 4122 { |
4122 setReduceMemoryResult(false); | 4123 setReduceMemoryResult(false); |
4123 | 4124 |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4190 renderer->clearCachedTextures(); | 4191 renderer->clearCachedTextures(); |
4191 | 4192 |
4192 // One shared state for all quads - we don't need the correct details | 4193 // One shared state for all quads - we don't need the correct details |
4193 testData.sharedQuadState = SharedQuadState::Create(); | 4194 testData.sharedQuadState = SharedQuadState::Create(); |
4194 testData.sharedQuadState->SetAll(WebTransformationMatrix(), gfx::Rect(), gfx
::Rect(), 1.0); | 4195 testData.sharedQuadState->SetAll(WebTransformationMatrix(), gfx::Rect(), gfx
::Rect(), 1.0); |
4195 | 4196 |
4196 const char* currentChar = testScript; | 4197 const char* currentChar = testScript; |
4197 | 4198 |
4198 // Pre-create root pass | 4199 // Pre-create root pass |
4199 RenderPass::Id rootRenderPassId = RenderPass::Id(testScript[0], testScript[1
]); | 4200 RenderPass::Id rootRenderPassId = RenderPass::Id(testScript[0], testScript[1
]); |
4200 testData.renderPassCache.add(rootRenderPassId, TestRenderPass::create(rootRe
nderPassId, gfx::Rect(), WebTransformationMatrix())); | 4201 scoped_ptr<TestRenderPass> pass = TestRenderPass::Create(); |
| 4202 pass->SetNew(rootRenderPassId, gfx::Rect(), gfx::Rect(), WebTransformationMa
trix()); |
| 4203 testData.renderPassCache.add(rootRenderPassId, pass.Pass()); |
4201 while (*currentChar) { | 4204 while (*currentChar) { |
4202 int layerId = *currentChar; | 4205 int layerId = *currentChar; |
4203 currentChar++; | 4206 currentChar++; |
4204 ASSERT_TRUE(currentChar); | 4207 ASSERT_TRUE(currentChar); |
4205 int index = *currentChar; | 4208 int index = *currentChar; |
4206 currentChar++; | 4209 currentChar++; |
4207 | 4210 |
4208 RenderPass::Id renderPassId = RenderPass::Id(layerId, index); | 4211 RenderPass::Id renderPassId = RenderPass::Id(layerId, index); |
4209 | 4212 |
4210 bool isReplica = false; | 4213 bool isReplica = false; |
4211 if (!testData.renderPassCache.contains(renderPassId)) | 4214 if (!testData.renderPassCache.contains(renderPassId)) |
4212 isReplica = true; | 4215 isReplica = true; |
4213 | 4216 |
4214 scoped_ptr<TestRenderPass> renderPass = testData.renderPassCache.take(re
nderPassId); | 4217 scoped_ptr<TestRenderPass> renderPass = testData.renderPassCache.take(re
nderPassId); |
4215 | 4218 |
4216 // Cycle through quad data and create all quads | 4219 // Cycle through quad data and create all quads |
4217 while (*currentChar && *currentChar != '\n') { | 4220 while (*currentChar && *currentChar != '\n') { |
4218 if (*currentChar == 's') { | 4221 if (*currentChar == 's') { |
4219 // Solid color draw quad | 4222 // Solid color draw quad |
4220 scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create
(); | 4223 scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create
(); |
4221 quad->SetNew(testData.sharedQuadState.get(), gfx::Rect(0, 0, 10,
10), SK_ColorWHITE); | 4224 quad->SetNew(testData.sharedQuadState.get(), gfx::Rect(0, 0, 10,
10), SK_ColorWHITE); |
4222 | 4225 |
4223 renderPass->appendQuad(quad.PassAs<DrawQuad>()); | 4226 renderPass->AppendQuad(quad.PassAs<DrawQuad>()); |
4224 currentChar++; | 4227 currentChar++; |
4225 } else if ((*currentChar >= 'A') && (*currentChar <= 'Z')) { | 4228 } else if ((*currentChar >= 'A') && (*currentChar <= 'Z')) { |
4226 // RenderPass draw quad | 4229 // RenderPass draw quad |
4227 int layerId = *currentChar; | 4230 int layerId = *currentChar; |
4228 currentChar++; | 4231 currentChar++; |
4229 ASSERT_TRUE(currentChar); | 4232 ASSERT_TRUE(currentChar); |
4230 int index = *currentChar; | 4233 int index = *currentChar; |
4231 currentChar++; | 4234 currentChar++; |
4232 RenderPass::Id newRenderPassId = RenderPass::Id(layerId, index); | 4235 RenderPass::Id newRenderPassId = RenderPass::Id(layerId, index); |
4233 ASSERT_NE(rootRenderPassId, newRenderPassId); | 4236 ASSERT_NE(rootRenderPassId, newRenderPassId); |
(...skipping 14 matching lines...) Expand all Loading... |
4248 currentChar++; | 4251 currentChar++; |
4249 } | 4252 } |
4250 if (*currentChar == ']') | 4253 if (*currentChar == ']') |
4251 currentChar++; | 4254 currentChar++; |
4252 } | 4255 } |
4253 | 4256 |
4254 if (testData.renderPassCache.find(newRenderPassId) == testData.r
enderPassCache.end()) { | 4257 if (testData.renderPassCache.find(newRenderPassId) == testData.r
enderPassCache.end()) { |
4255 if (hasTexture) | 4258 if (hasTexture) |
4256 renderer->setHaveCachedResourcesForRenderPassId(newRende
rPassId); | 4259 renderer->setHaveCachedResourcesForRenderPassId(newRende
rPassId); |
4257 | 4260 |
4258 testData.renderPassCache.add(newRenderPassId, TestRenderPass
::create(newRenderPassId, gfx::Rect(), WebTransformationMatrix())); | 4261 scoped_ptr<TestRenderPass> pass = TestRenderPass::Create(); |
| 4262 pass->SetNew(newRenderPassId, gfx::Rect(), gfx::Rect(), WebT
ransformationMatrix()); |
| 4263 testData.renderPassCache.add(newRenderPassId, pass.Pass()); |
4259 } | 4264 } |
4260 | 4265 |
4261 gfx::Rect quadRect = gfx::Rect(0, 0, 1, 1); | 4266 gfx::Rect quadRect = gfx::Rect(0, 0, 1, 1); |
4262 gfx::Rect contentsChangedRect = contentsChanged ? quadRect : gfx
::Rect(); | 4267 gfx::Rect contentsChangedRect = contentsChanged ? quadRect : gfx
::Rect(); |
4263 scoped_ptr<RenderPassDrawQuad> quad = RenderPassDrawQuad::Create
(); | 4268 scoped_ptr<RenderPassDrawQuad> quad = RenderPassDrawQuad::Create
(); |
4264 quad->SetNew(testData.sharedQuadState.get(), quadRect, newRender
PassId, isReplica, 1, contentsChangedRect, 1, 1, 0, 0); | 4269 quad->SetNew(testData.sharedQuadState.get(), quadRect, newRender
PassId, isReplica, 1, contentsChangedRect, 1, 1, 0, 0); |
4265 renderPass->appendQuad(quad.PassAs<DrawQuad>()); | 4270 renderPass->AppendQuad(quad.PassAs<DrawQuad>()); |
4266 } | 4271 } |
4267 } | 4272 } |
4268 testData.renderPasses.insert(testData.renderPasses.begin(), renderPass.g
et()); | 4273 testData.renderPasses.insert(testData.renderPasses.begin(), renderPass.g
et()); |
4269 testData.renderPassesById.add(renderPassId, renderPass.PassAs<RenderPass
>()); | 4274 testData.renderPassesById.add(renderPassId, renderPass.PassAs<RenderPass
>()); |
4270 if (*currentChar) | 4275 if (*currentChar) |
4271 currentChar++; | 4276 currentChar++; |
4272 } | 4277 } |
4273 } | 4278 } |
4274 | 4279 |
4275 void dumpRenderPassTestData(const RenderPassRemovalTestData& testData, char* buf
fer) | 4280 void dumpRenderPassTestData(const RenderPassRemovalTestData& testData, char* buf
fer) |
4276 { | 4281 { |
4277 char* pos = buffer; | 4282 char* pos = buffer; |
4278 for (RenderPassList::const_reverse_iterator it = testData.renderPasses.rbegi
n(); it != testData.renderPasses.rend(); ++it) { | 4283 for (RenderPassList::const_reverse_iterator it = testData.renderPasses.rbegi
n(); it != testData.renderPasses.rend(); ++it) { |
4279 const RenderPass* currentPass = *it; | 4284 const RenderPass* currentPass = *it; |
4280 *pos = currentPass->id().layerId; | 4285 *pos = currentPass->id.layer_id; |
4281 pos++; | 4286 pos++; |
4282 *pos = currentPass->id().index; | 4287 *pos = currentPass->id.index; |
4283 pos++; | 4288 pos++; |
4284 | 4289 |
4285 QuadList::const_iterator quadListIterator = currentPass->quadList().begi
n(); | 4290 QuadList::const_iterator quadListIterator = currentPass->quad_list.begin
(); |
4286 while (quadListIterator != currentPass->quadList().end()) { | 4291 while (quadListIterator != currentPass->quad_list.end()) { |
4287 DrawQuad* currentQuad = *quadListIterator; | 4292 DrawQuad* currentQuad = *quadListIterator; |
4288 switch (currentQuad->material) { | 4293 switch (currentQuad->material) { |
4289 case DrawQuad::SOLID_COLOR: | 4294 case DrawQuad::SOLID_COLOR: |
4290 *pos = 's'; | 4295 *pos = 's'; |
4291 pos++; | 4296 pos++; |
4292 break; | 4297 break; |
4293 case DrawQuad::RENDER_PASS: | 4298 case DrawQuad::RENDER_PASS: |
4294 *pos = RenderPassDrawQuad::MaterialCast(currentQuad)->render_pas
s_id.layerId; | 4299 *pos = RenderPassDrawQuad::MaterialCast(currentQuad)->render_pas
s_id.layer_id; |
4295 pos++; | 4300 pos++; |
4296 *pos = RenderPassDrawQuad::MaterialCast(currentQuad)->render_pas
s_id.index; | 4301 *pos = RenderPassDrawQuad::MaterialCast(currentQuad)->render_pas
s_id.index; |
4297 pos++; | 4302 pos++; |
4298 break; | 4303 break; |
4299 default: | 4304 default: |
4300 *pos = 'x'; | 4305 *pos = 'x'; |
4301 pos++; | 4306 pos++; |
4302 break; | 4307 break; |
4303 } | 4308 } |
4304 | 4309 |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4475 testCaseIndex++; | 4480 testCaseIndex++; |
4476 } | 4481 } |
4477 } | 4482 } |
4478 | 4483 |
4479 INSTANTIATE_TEST_CASE_P(LayerTreeHostImplTests, | 4484 INSTANTIATE_TEST_CASE_P(LayerTreeHostImplTests, |
4480 LayerTreeHostImplTest, | 4485 LayerTreeHostImplTest, |
4481 ::testing::Values(false, true)); | 4486 ::testing::Values(false, true)); |
4482 | 4487 |
4483 } // namespace | 4488 } // namespace |
4484 } // namespace cc | 4489 } // namespace cc |
OLD | NEW |