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

Side by Side Diff: cc/layer_tree_host_impl_unittest.cc

Issue 11583005: cc: Make occlusion tracker always work in target space. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase+nits Created 8 years 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 | « no previous file | cc/layer_tree_host_unittest.cc » ('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 3122 matching lines...) Expand 10 before | Expand all | Expand 10 after
3133 3133
3134 // Child of the surface layer will produce some quads 3134 // Child of the surface layer will produce some quads
3135 addDrawingLayerTo(surfaceLayerPtr, 4, gfx::Rect(5, 5, rootSize.width() - 25, rootSize.height() - 25), &childPtr); 3135 addDrawingLayerTo(surfaceLayerPtr, 4, gfx::Rect(5, 5, rootSize.width() - 25, rootSize.height() - 25), &childPtr);
3136 } 3136 }
3137 3137
3138 class GLRendererWithReleaseTextures : public GLRenderer { 3138 class GLRendererWithReleaseTextures : public GLRenderer {
3139 public: 3139 public:
3140 using GLRenderer::releaseRenderPassTextures; 3140 using GLRenderer::releaseRenderPassTextures;
3141 }; 3141 };
3142 3142
3143 TEST_P(LayerTreeHostImplTest, textureCachingWithClipping)
3144 {
3145 LayerTreeSettings settings;
3146 settings.minimumOcclusionTrackingSize = gfx::Size();
3147 settings.partialSwapEnabled = true;
3148 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting s, this, &m_proxy);
3149
3150 LayerImpl* rootPtr;
3151 LayerImpl* surfaceLayerPtr;
3152
3153 scoped_ptr<OutputSurface> outputSurface = FakeOutputSurface::Create3d(scoped _ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<OutputSurface >();
3154
3155 gfx::Size rootSize(100, 100);
3156
3157 myHostImpl->initializeRenderer(outputSurface.Pass());
3158 myHostImpl->setViewportSize(gfx::Size(rootSize.width(), rootSize.height()), gfx::Size(rootSize.width(), rootSize.height()));
3159
3160 scoped_ptr<LayerImpl> root = LayerImpl::create(myHostImpl->activeTree(), 1);
3161 rootPtr = root.get();
3162
3163 root->setAnchorPoint(gfx::PointF(0, 0));
3164 root->setPosition(gfx::PointF(0, 0));
3165 root->setBounds(rootSize);
3166 root->setContentBounds(rootSize);
3167 root->setDrawsContent(true);
3168 root->setMasksToBounds(true);
3169 myHostImpl->setRootLayer(root.Pass());
3170
3171 addDrawingLayerTo(rootPtr, 3, gfx::Rect(0, 0, rootSize.width(), rootSize.hei ght()), &surfaceLayerPtr);
3172 surfaceLayerPtr->setDrawsContent(false);
3173
3174 // Surface layer is the layer that changes its opacity
3175 // It will contain other layers that draw content.
3176 surfaceLayerPtr->setOpacity(0.5f);
3177 surfaceLayerPtr->setForceRenderSurface(true); // This will cause it to have a surface
3178
3179 addDrawingLayerTo(surfaceLayerPtr, 4, gfx::Rect(0, 0, 100, 3), 0);
3180 addDrawingLayerTo(surfaceLayerPtr, 5, gfx::Rect(0, 97, 100, 3), 0);
3181
3182 // Rotation will put part of the child ouside the bounds of the root layer.
3183 // Nevertheless, the child layers should be drawn.
3184 gfx::Transform transform = surfaceLayerPtr->transform();
3185 transform.Translate(50, 50);
3186 transform.Rotate(35);
3187 transform.Translate(-50, -50);
3188 surfaceLayerPtr->setTransform(transform);
3189
3190 {
3191 LayerTreeHostImpl::FrameData frame;
3192 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3193
3194 // Must receive two render passes, each with one quad
3195 ASSERT_EQ(2U, frame.renderPasses.size());
3196 EXPECT_EQ(2U, frame.renderPasses[0]->quad_list.size());
3197 ASSERT_EQ(1U, frame.renderPasses[1]->quad_list.size());
3198
3199 // Verify that the child layers are being clipped.
3200 gfx::Rect quadVisibleRect = frame.renderPasses[0]->quad_list[0]->visible _rect;
3201 EXPECT_LT(quadVisibleRect.width(), 100);
3202
3203 quadVisibleRect = frame.renderPasses[0]->quad_list[1]->visible_rect;
3204 EXPECT_LT(quadVisibleRect.width(), 100);
3205
3206 // Verify that the render surface texture is *not* clipped.
3207 EXPECT_RECT_EQ(gfx::Rect(0, 0, 100, 100), frame.renderPasses[0]->output_ rect);
3208
3209 EXPECT_EQ(DrawQuad::RENDER_PASS, frame.renderPasses[1]->quad_list[0]->ma terial);
3210 const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame. renderPasses[1]->quad_list[0]);
3211 EXPECT_FALSE(quad->contents_changed_since_last_frame.IsEmpty());
3212
3213 myHostImpl->drawLayers(frame);
3214 myHostImpl->didDrawAllLayers(frame);
3215 }
3216
3217 transform = surfaceLayerPtr->transform();
3218 transform.Translate(50, 50);
3219 transform.Rotate(-35);
3220 transform.Translate(-50, -50);
3221 surfaceLayerPtr->setTransform(transform);
3222
3223 // The surface is now aligned again, and the clipped parts are exposed.
3224 // Since the layers were clipped, even though the render surface size
3225 // was not changed, the texture should not be saved.
3226 {
3227 LayerTreeHostImpl::FrameData frame;
3228 EXPECT_TRUE(myHostImpl->prepareToDraw(frame));
3229
3230 // Must receive two render passes, each with one quad
3231 ASSERT_EQ(2U, frame.renderPasses.size());
3232 EXPECT_EQ(2U, frame.renderPasses[0]->quad_list.size());
3233 ASSERT_EQ(1U, frame.renderPasses[1]->quad_list.size());
3234
3235 myHostImpl->drawLayers(frame);
3236 myHostImpl->didDrawAllLayers(frame);
3237 }
3238 }
3239
3240 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusion) 3143 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusion)
3241 { 3144 {
3242 LayerTreeSettings settings; 3145 LayerTreeSettings settings;
3243 settings.minimumOcclusionTrackingSize = gfx::Size(); 3146 settings.minimumOcclusionTrackingSize = gfx::Size();
3244 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting s, this, &m_proxy); 3147 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting s, this, &m_proxy);
3245 3148
3246 // Layers are structure as follows: 3149 // Layers are structure as follows:
3247 // 3150 //
3248 // R +-- S1 +- L10 (owning) 3151 // R +-- S1 +- L10 (owning)
3249 // | +- L11 3152 // | +- L11
(...skipping 1671 matching lines...) Expand 10 before | Expand all | Expand 10 after
4921 gfx::Rect noDamage = gfx::Rect(m_hostImpl->deviceViewportSize()); 4824 gfx::Rect noDamage = gfx::Rect(m_hostImpl->deviceViewportSize());
4922 drawFrameAndTestDamage(noDamage); 4825 drawFrameAndTestDamage(noDamage);
4923 } 4826 }
4924 4827
4925 INSTANTIATE_TEST_CASE_P(LayerTreeHostImplTests, 4828 INSTANTIATE_TEST_CASE_P(LayerTreeHostImplTests,
4926 LayerTreeHostImplTest, 4829 LayerTreeHostImplTest,
4927 ::testing::Values(false, true)); 4830 ::testing::Values(false, true));
4928 4831
4929 } // namespace 4832 } // namespace
4930 } // namespace cc 4833 } // namespace cc
OLDNEW
« no previous file with comments | « no previous file | cc/layer_tree_host_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698