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

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: missing-render-pass: nits 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
« no previous file with comments | « cc/layers/delegated_renderer_layer_impl.cc ('k') | cc/test/render_pass_test_utils.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 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 = LayerImpl::Create(
1250 host_impl_->active_tree(), 1).PassAs<LayerImpl>();
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
1256 delegated_renderer_layer->SetPosition(gfx::Point(3, 3));
1257 delegated_renderer_layer->SetBounds(gfx::Size(10, 10));
1258 delegated_renderer_layer->SetContentBounds(gfx::Size(10, 10));
1259 delegated_renderer_layer->SetDrawsContent(true);
1260
1261 ScopedPtrVector<RenderPass> delegated_render_passes;
1262 TestRenderPass* pass1 = AddRenderPass(
1263 &delegated_render_passes,
1264 RenderPass::Id(9, 6),
1265 gfx::Rect(0, 0, 10, 10),
1266 gfx::Transform());
1267 AddQuad(pass1, gfx::Rect(0, 0, 6, 6), 33u);
1268
1269 // This render pass isn't part of the frame.
1270 scoped_ptr<TestRenderPass> missing_pass(TestRenderPass::Create());
1271 missing_pass->SetNew(RenderPass::Id(9, 7),
1272 gfx::Rect(7, 7, 7, 7),
1273 gfx::Rect(7, 7, 7, 7),
1274 gfx::Transform());
1275
1276 // But a render pass quad refers to it.
1277 AddRenderPassQuad(pass1, missing_pass.get());
1278
1279 delegated_renderer_layer->SetFrameDataForRenderPasses(
1280 &delegated_render_passes);
1281
1282 // The RenderPasses should be taken by the layer.
1283 EXPECT_EQ(0u, delegated_render_passes.size());
1284
1285 root_layer->AddChild(delegated_renderer_layer.PassAs<LayerImpl>());
1286 host_impl_->active_tree()->SetRootLayer(root_layer.Pass());
1287
1288 LayerTreeHostImpl::FrameData frame;
1289 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
1290
1291 // The DelegatedRendererLayerImpl should drop the bad RenderPassDrawQuad.
1292 ASSERT_EQ(1u, frame.render_passes.size());
1293 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size());
1294 EXPECT_EQ(DrawQuad::SOLID_COLOR,
1295 frame.render_passes[0]->quad_list[0]->material);
1296
1297 host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
1298 host_impl_->DidDrawAllLayers(frame);
1299 }
1300
1248 } // namespace 1301 } // namespace
1249 } // namespace cc 1302 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layers/delegated_renderer_layer_impl.cc ('k') | cc/test/render_pass_test_utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698