render_pass_unittest.cc revision 116680a4aac90f2aa7413d9095a592090648e557
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/quads/render_pass.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/base/math_util.h" 890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "cc/base/scoped_ptr_vector.h" 990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "cc/output/copy_output_request.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/quads/checkerboard_draw_quad.h" 114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "cc/quads/render_pass_draw_quad.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/test/geometry_test_utils.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/test/render_pass_test_common.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/skia/include/effects/SkBlurImageFilter.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/transform.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using cc::TestRenderPass; 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc { 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct RenderPassSize { 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // If you add a new field to this class, make sure to add it to the 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Copy() tests. 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderPass::Id id; 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) QuadList quad_list; 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SharedQuadStateList shared_quad_state_list; 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Transform transform_to_root_target; 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect output_rect; 31c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch gfx::Rect damage_rect; 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool has_transparent_background; 3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ScopedPtrVector<CopyOutputRequest> copy_callbacks; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)static void CompareRenderPassLists(const RenderPassList& expected_list, 371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const RenderPassList& actual_list) { 381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(expected_list.size(), actual_list.size()); 391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for (size_t i = 0; i < actual_list.size(); ++i) { 401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) RenderPass* expected = expected_list[i]; 411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) RenderPass* actual = actual_list[i]; 421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(expected->id, actual->id); 441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_RECT_EQ(expected->output_rect, actual->output_rect); 451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(expected->transform_to_root_target, 461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) actual->transform_to_root_target); 471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_RECT_EQ(expected->damage_rect, actual->damage_rect); 481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(expected->has_transparent_background, 491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) actual->has_transparent_background); 501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(expected->shared_quad_state_list.size(), 521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) actual->shared_quad_state_list.size()); 531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(expected->quad_list.size(), actual->quad_list.size()); 541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for (size_t i = 0; i < expected->quad_list.size(); ++i) { 561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(expected->quad_list[i]->rect.ToString(), 571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) actual->quad_list[i]->rect.ToString()); 581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ( 591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) expected->quad_list[i]->shared_quad_state->content_bounds.ToString(), 601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) actual->quad_list[i]->shared_quad_state->content_bounds.ToString()); 611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(RenderPassTest, CopyShouldBeIdenticalExceptIdAndQuads) { 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderPass::Id id(3, 2); 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect output_rect(45, 22, 120, 13); 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Transform transform_to_root = 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Transform(1.0, 0.5, 0.5, -0.5, -1.0, 0.0); 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect damage_rect(56, 123, 19, 43); 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool has_transparent_background = true; 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<TestRenderPass> pass = TestRenderPass::Create(); 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pass->SetAll(id, 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) output_rect, 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) damage_rect, 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) transform_to_root, 78effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch has_transparent_background); 797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) pass->copy_requests.push_back(CopyOutputRequest::CreateEmptyRequest()); 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Stick a quad in the pass, this should not get copied. 82010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); 83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) shared_state->SetAll(gfx::Transform(), 84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Size(), 85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Rect(), 86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Rect(), 87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) false, 88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1, 896d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) SkXfermode::kSrcOver_Mode, 906d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 0); 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CheckerboardDrawQuad* checkerboard_quad = 93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pass->CreateAndAppendDrawQuad<CheckerboardDrawQuad>(); 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) checkerboard_quad->SetNew( 95a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) pass->shared_quad_state_list.back(), gfx::Rect(), gfx::Rect(), SkColor()); 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderPass::Id new_id(63, 4); 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<RenderPass> copy = pass->Copy(new_id); 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(new_id, copy->id); 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_RECT_EQ(pass->output_rect, copy->output_rect); 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(pass->transform_to_root_target, copy->transform_to_root_target); 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_RECT_EQ(pass->damage_rect, copy->damage_rect); 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(pass->has_transparent_background, copy->has_transparent_background); 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0u, copy->quad_list.size()); 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // The copy request should not be copied/duplicated. 10890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(1u, pass->copy_requests.size()); 10990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(0u, copy->copy_requests.size()); 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(sizeof(RenderPassSize), sizeof(RenderPass)); 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST(RenderPassTest, CopyAllShouldBeIdentical) { 1154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) RenderPassList pass_list; 1164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) RenderPass::Id id(3, 2); 1184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Rect output_rect(45, 22, 120, 13); 1194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Transform transform_to_root = 1204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Transform(1.0, 0.5, 0.5, -0.5, -1.0, 0.0); 1214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Rect damage_rect(56, 123, 19, 43); 1224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool has_transparent_background = true; 1234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<TestRenderPass> pass = TestRenderPass::Create(); 1254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) pass->SetAll(id, 1264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) output_rect, 1274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) damage_rect, 1284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) transform_to_root, 129effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch has_transparent_background); 1304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Two quads using one shared state. 132010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SharedQuadState* shared_state1 = pass->CreateAndAppendSharedQuadState(); 133f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) shared_state1->SetAll(gfx::Transform(), 134f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Size(1, 1), 135f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Rect(), 136f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Rect(), 137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) false, 138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1, 1396d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) SkXfermode::kSrcOver_Mode, 1406d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 0); 1414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 142116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CheckerboardDrawQuad* checkerboard_quad1 = 143116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pass->CreateAndAppendDrawQuad<CheckerboardDrawQuad>(); 144a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) checkerboard_quad1->SetNew(pass->shared_quad_state_list.back(), 145a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Rect(1, 1, 1, 1), 146a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Rect(1, 1, 1, 1), 147a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SkColor()); 1484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 149116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CheckerboardDrawQuad* checkerboard_quad2 = 150116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pass->CreateAndAppendDrawQuad<CheckerboardDrawQuad>(); 151a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) checkerboard_quad2->SetNew(pass->shared_quad_state_list.back(), 152a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Rect(2, 2, 2, 2), 153a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Rect(2, 2, 2, 2), 154a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SkColor()); 1554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // And two quads using another shared state. 157010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SharedQuadState* shared_state2 = pass->CreateAndAppendSharedQuadState(); 158f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) shared_state2->SetAll(gfx::Transform(), 159f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Size(2, 2), 160f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Rect(), 161f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Rect(), 162f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) false, 163f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1, 1646d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) SkXfermode::kSrcOver_Mode, 1656d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 0); 1664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 167116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CheckerboardDrawQuad* checkerboard_quad3 = 168116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pass->CreateAndAppendDrawQuad<CheckerboardDrawQuad>(); 169a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) checkerboard_quad3->SetNew(pass->shared_quad_state_list.back(), 170a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Rect(3, 3, 3, 3), 171a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Rect(3, 3, 3, 3), 172a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SkColor()); 1734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 174116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CheckerboardDrawQuad* checkerboard_quad4 = 175116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pass->CreateAndAppendDrawQuad<CheckerboardDrawQuad>(); 176a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) checkerboard_quad4->SetNew(pass->shared_quad_state_list.back(), 177a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Rect(4, 4, 4, 4), 178a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Rect(4, 4, 4, 4), 179a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SkColor()); 1804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // A second render pass with a quad. 1824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) RenderPass::Id contrib_id(4, 1); 1834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Rect contrib_output_rect(10, 15, 12, 17); 1844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Transform contrib_transform_to_root = 1854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Transform(1.0, 0.5, 0.5, -0.5, -1.0, 0.0); 1864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Rect contrib_damage_rect(11, 16, 10, 15); 1874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool contrib_has_transparent_background = true; 1884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<TestRenderPass> contrib = TestRenderPass::Create(); 1904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) contrib->SetAll(contrib_id, 1914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) contrib_output_rect, 1924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) contrib_damage_rect, 1934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) contrib_transform_to_root, 194effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch contrib_has_transparent_background); 1954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 196010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SharedQuadState* contrib_shared_state = 197010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) contrib->CreateAndAppendSharedQuadState(); 198f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) contrib_shared_state->SetAll(gfx::Transform(), 199f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Size(2, 2), 200f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Rect(), 201f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Rect(), 202f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) false, 203f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1, 2046d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) SkXfermode::kSrcOver_Mode, 2056d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 0); 2064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 207116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CheckerboardDrawQuad* contrib_quad = 208116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch contrib->CreateAndAppendDrawQuad<CheckerboardDrawQuad>(); 209a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) contrib_quad->SetNew(contrib->shared_quad_state_list.back(), 210a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Rect(3, 3, 3, 3), 211a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Rect(3, 3, 3, 3), 212a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SkColor()); 2134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // And a RenderPassDrawQuad for the contributing pass. 215116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<RenderPassDrawQuad> pass_quad = 216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch make_scoped_ptr(new RenderPassDrawQuad); 2174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) pass_quad->SetNew(pass->shared_quad_state_list.back(), 2184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) contrib_output_rect, 219a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) contrib_output_rect, 2204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) contrib_id, 2214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) false, // is_replica 2224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 0, // mask_resource_id 2234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) contrib_damage_rect, 2244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::RectF(), // mask_uv_rect 2254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FilterOperations(), 2264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FilterOperations()); 2274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) pass_list.push_back(pass.PassAs<RenderPass>()); 2294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) pass_list.push_back(contrib.PassAs<RenderPass>()); 2304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Make a copy with CopyAll(). 2324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) RenderPassList copy_list; 2334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) RenderPass::CopyAll(pass_list, ©_list); 2344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) CompareRenderPassLists(pass_list, copy_list); 2361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 2371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST(RenderPassTest, CopyAllWithCulledQuads) { 2391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) RenderPassList pass_list; 2401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) RenderPass::Id id(3, 2); 2421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) gfx::Rect output_rect(45, 22, 120, 13); 2431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) gfx::Transform transform_to_root = 2441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) gfx::Transform(1.0, 0.5, 0.5, -0.5, -1.0, 0.0); 2451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) gfx::Rect damage_rect(56, 123, 19, 43); 2461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) bool has_transparent_background = true; 2471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_ptr<TestRenderPass> pass = TestRenderPass::Create(); 2491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) pass->SetAll(id, 2501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) output_rect, 2511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) damage_rect, 2521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) transform_to_root, 253effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch has_transparent_background); 2541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // A shared state with a quad. 256010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SharedQuadState* shared_state1 = pass->CreateAndAppendSharedQuadState(); 257f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) shared_state1->SetAll(gfx::Transform(), 258f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Size(1, 1), 259f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Rect(), 260f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Rect(), 261f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) false, 262f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1, 2636d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) SkXfermode::kSrcOver_Mode, 2646d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 0); 2651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 266116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CheckerboardDrawQuad* checkerboard_quad1 = 267116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pass->CreateAndAppendDrawQuad<CheckerboardDrawQuad>(); 268a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) checkerboard_quad1->SetNew(pass->shared_quad_state_list.back(), 269a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Rect(1, 1, 1, 1), 270a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Rect(1, 1, 1, 1), 271a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SkColor()); 2721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // A shared state with no quads, they were culled. 274010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SharedQuadState* shared_state2 = pass->CreateAndAppendSharedQuadState(); 275f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) shared_state2->SetAll(gfx::Transform(), 276f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Size(2, 2), 277f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Rect(), 278f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Rect(), 279f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) false, 280f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1, 2816d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) SkXfermode::kSrcOver_Mode, 2826d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 0); 2831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // A second shared state with no quads. 285010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SharedQuadState* shared_state3 = pass->CreateAndAppendSharedQuadState(); 286f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) shared_state3->SetAll(gfx::Transform(), 287f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Size(2, 2), 288f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Rect(), 289f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Rect(), 290f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) false, 291f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1, 2926d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) SkXfermode::kSrcOver_Mode, 2936d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 0); 2941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // A last shared state with a quad again. 296010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SharedQuadState* shared_state4 = pass->CreateAndAppendSharedQuadState(); 297f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) shared_state4->SetAll(gfx::Transform(), 298f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Size(2, 2), 299f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Rect(), 300f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Rect(), 301f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) false, 302f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1, 3036d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) SkXfermode::kSrcOver_Mode, 3046d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 0); 3051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 306116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CheckerboardDrawQuad* checkerboard_quad2 = 307116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pass->CreateAndAppendDrawQuad<CheckerboardDrawQuad>(); 308a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) checkerboard_quad2->SetNew(pass->shared_quad_state_list.back(), 309a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Rect(3, 3, 3, 3), 310a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Rect(3, 3, 3, 3), 311a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SkColor()); 3121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) pass_list.push_back(pass.PassAs<RenderPass>()); 3141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Make a copy with CopyAll(). 3161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) RenderPassList copy_list; 3171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) RenderPass::CopyAll(pass_list, ©_list); 3181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) CompareRenderPassLists(pass_list, copy_list); 3204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 3214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace cc 324