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

Side by Side Diff: cc/layers/delegated_renderer_layer_impl_unittest.cc

Issue 23891003: cc: Be robust against invalid RenderPassDrawQuads. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 3 months 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
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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/layers/delegated_renderer_layer_impl.h" 5 #include "cc/layers/delegated_renderer_layer_impl.h"
6 6
7 #include "cc/base/scoped_ptr_vector.h" 7 #include "cc/base/scoped_ptr_vector.h"
8 #include "cc/debug/test_web_graphics_context_3d.h" 8 #include "cc/debug/test_web_graphics_context_3d.h"
9 #include "cc/layers/append_quads_data.h" 9 #include "cc/layers/append_quads_data.h"
10 #include "cc/layers/quad_sink.h" 10 #include "cc/layers/quad_sink.h"
(...skipping 1227 matching lines...) Expand 10 before | Expand all | Expand 10 after
1238 // layer owns a surface, then it does not have a clip rect of its own. 1238 // layer owns a surface, then it does not have a clip rect of its own.
1239 EXPECT_EQ(gfx::Rect(5, 5, 40, 40).ToString(), 1239 EXPECT_EQ(gfx::Rect(5, 5, 40, 40).ToString(),
1240 root_delegated_shared_quad_state->clip_rect.ToString()); 1240 root_delegated_shared_quad_state->clip_rect.ToString());
1241 // Quads came with a clip rect. 1241 // Quads came with a clip rect.
1242 EXPECT_TRUE(root_delegated_shared_quad_state->is_clipped); 1242 EXPECT_TRUE(root_delegated_shared_quad_state->is_clipped);
1243 1243
1244 host_impl_->DrawLayers(&frame, base::TimeTicks::Now()); 1244 host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
1245 host_impl_->DidDrawAllLayers(frame); 1245 host_impl_->DidDrawAllLayers(frame);
1246 } 1246 }
1247 1247
1248 TEST_F(DelegatedRendererLayerImplTest, InvalidRenderPassDrawQuad) {
1249 scoped_ptr<LayerImpl> root_layer = SolidColorLayerImpl::Create(
1250 host_impl_->active_tree(), 1).PassAs<LayerImpl>();
piman 2013/09/04 19:03:12 nit: this one doesn't draw content, right? Should
danakj 2013/09/05 16:46:55 Oh, ya. That's a great idea. Thank you.
1251 scoped_ptr<FakeDelegatedRendererLayerImpl> delegated_renderer_layer =
1252 FakeDelegatedRendererLayerImpl::Create(host_impl_->active_tree(), 4);
1253
1254 host_impl_->SetViewportSize(gfx::Size(100, 100));
1255 root_layer->SetBounds(gfx::Size(100, 100));
1256
1257 delegated_renderer_layer->SetPosition(gfx::Point(3, 3));
1258 delegated_renderer_layer->SetBounds(gfx::Size(10, 10));
1259 delegated_renderer_layer->SetContentBounds(gfx::Size(10, 10));
1260 delegated_renderer_layer->SetDrawsContent(true);
1261
1262 ScopedPtrVector<RenderPass> delegated_render_passes;
1263 TestRenderPass* pass1 = AddRenderPass(
1264 &delegated_render_passes,
1265 RenderPass::Id(9, 6),
1266 gfx::Rect(0, 0, 10, 10),
1267 gfx::Transform());
1268 AddQuad(pass1, gfx::Rect(0, 0, 6, 6), 33u);
1269
1270 // This render pass isn't part of the frame.
1271 scoped_ptr<TestRenderPass> missing_pass(TestRenderPass::Create());
1272 missing_pass->SetNew(RenderPass::Id(9, 7),
1273 gfx::Rect(7, 7, 7, 7),
1274 gfx::Rect(7, 7, 7, 7),
1275 gfx::Transform());
1276
1277 // But a render pass quad refers to it.
1278 AddRenderPassQuad(pass1, missing_pass.get());
1279
1280 delegated_renderer_layer->SetFrameDataForRenderPasses(
1281 &delegated_render_passes);
1282
1283 // The RenderPasses should be taken by the layer.
1284 EXPECT_EQ(0u, delegated_render_passes.size());
1285
1286 root_layer->AddChild(delegated_renderer_layer.PassAs<LayerImpl>());
1287 host_impl_->active_tree()->SetRootLayer(root_layer.Pass());
1288
1289 LayerTreeHostImpl::FrameData frame;
1290 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
1291
1292 // The DelegatedRendererLayerImpl should drop the bad RenderPassDrawQuad.
1293 ASSERT_EQ(1u, frame.render_passes.size());
1294 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size());
1295 EXPECT_EQ(DrawQuad::SOLID_COLOR,
1296 frame.render_passes[0]->quad_list[0]->material);
1297
1298 host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
1299 host_impl_->DidDrawAllLayers(frame);
1300 }
1301
1248 } // namespace 1302 } // namespace
1249 } // namespace cc 1303 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698