Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(185)

Side by Side Diff: cc/layer_tree_host_impl_unittest.cc

Issue 11413106: cc: Make RenderPass into a struct-like class. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « cc/layer_tree_host_impl.cc ('k') | cc/quad_culler.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « cc/layer_tree_host_impl.cc ('k') | cc/quad_culler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698