11e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 21e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 31e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// found in the LICENSE file. 41e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 51e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "cc/test/layer_tree_json_parser.h" 61e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 71e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "cc/layers/layer.h" 81e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "cc/test/fake_impl_proxy.h" 91e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "cc/test/fake_layer_tree_host.h" 101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "cc/test/fake_layer_tree_host_impl.h" 111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "cc/test/geometry_test_utils.h" 121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)namespace cc { 151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)namespace { 171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)bool LayerTreesMatch(LayerImpl* const layer_impl, 191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) Layer* const layer) { 201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define RETURN_IF_EXPECTATION_FAILS(exp) \ 211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) do { \ 221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) exp; \ 231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (testing::UnitTest::GetInstance()->current_test_info()-> \ 241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) result()->Failed()) \ 251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return false; \ 261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } while (0) 271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) RETURN_IF_EXPECTATION_FAILS(EXPECT_EQ(layer_impl->children().size(), 291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) layer->children().size())); 301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) RETURN_IF_EXPECTATION_FAILS(EXPECT_SIZE_EQ(layer_impl->bounds(), 311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) layer->bounds())); 321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) RETURN_IF_EXPECTATION_FAILS(EXPECT_POINT_EQ(layer_impl->position(), 331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) layer->position())); 341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) RETURN_IF_EXPECTATION_FAILS( 351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRANSFORMATION_MATRIX_EQ(layer_impl->draw_transform(), 361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) layer->draw_transform())); 371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) RETURN_IF_EXPECTATION_FAILS(EXPECT_EQ(layer_impl->contents_opaque(), 381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) layer->contents_opaque())); 391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) RETURN_IF_EXPECTATION_FAILS(EXPECT_EQ(layer_impl->scrollable(), 401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) layer->scrollable())); 411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) RETURN_IF_EXPECTATION_FAILS(EXPECT_FLOAT_EQ(layer_impl->opacity(), 421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) layer->opacity())); 431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) RETURN_IF_EXPECTATION_FAILS(EXPECT_EQ(layer_impl->have_wheel_event_handlers(), 441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) layer->have_wheel_event_handlers())); 451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) RETURN_IF_EXPECTATION_FAILS( 46e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch EXPECT_EQ(layer_impl->have_scroll_event_handlers(), 47e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch layer->have_scroll_event_handlers())); 48e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch RETURN_IF_EXPECTATION_FAILS( 491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(layer_impl->touch_event_handler_region(), 501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) layer->touch_event_handler_region())); 511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for (size_t i = 0; i < layer_impl->children().size(); ++i) { 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci RETURN_IF_EXPECTATION_FAILS(EXPECT_TRUE(LayerTreesMatch( 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci layer_impl->children()[i], layer->children()[i].get()))); 551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return true; 581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#undef RETURN_IF_EXPECTATION_FAILS 591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} // namespace 621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class LayerTreeJsonParserSanityCheck : public testing::Test { 641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}; 651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(LayerTreeJsonParserSanityCheck, Basic) { 671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) FakeImplProxy proxy; 6823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) TestSharedBitmapManager shared_bitmap_manager; 6923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) FakeLayerTreeHostImpl host_impl(&proxy, &shared_bitmap_manager); 701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) LayerTreeImpl* tree = host_impl.active_tree(); 711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_ptr<LayerImpl> root_impl(LayerImpl::Create(tree, 1)); 731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_ptr<LayerImpl> parent(LayerImpl::Create(tree, 2)); 741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_ptr<LayerImpl> child(LayerImpl::Create(tree, 3)); 751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) root_impl->SetBounds(gfx::Size(100, 100)); 771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) parent->SetBounds(gfx::Size(50, 50)); 781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) child->SetBounds(gfx::Size(40, 40)); 791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) parent->SetPosition(gfx::Point(25, 25)); 811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) child->SetHaveWheelEventHandlers(true); 83e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch child->SetHaveScrollEventHandlers(true); 841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) parent->AddChild(child.Pass()); 861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) root_impl->AddChild(parent.Pass()); 871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) tree->SetRootLayer(root_impl.Pass()); 881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) std::string json = host_impl.LayerTreeAsJson(); 901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_refptr<Layer> root = ParseTreeFromJson(json, NULL); 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(root.get()); 921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(LayerTreesMatch(host_impl.RootLayer(), root.get())); 931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(LayerTreeJsonParserSanityCheck, EventHandlerRegions) { 961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) FakeImplProxy proxy; 9723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) TestSharedBitmapManager shared_bitmap_manager; 9823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) FakeLayerTreeHostImpl host_impl(&proxy, &shared_bitmap_manager); 991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) LayerTreeImpl* tree = host_impl.active_tree(); 1001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_ptr<LayerImpl> root_impl(LayerImpl::Create(tree, 1)); 1021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_ptr<LayerImpl> touch_layer(LayerImpl::Create(tree, 2)); 1031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) root_impl->SetBounds(gfx::Size(100, 100)); 1051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) touch_layer->SetBounds(gfx::Size(50, 50)); 1061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 107a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) Region touch_region; 1081e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) touch_region.Union(gfx::Rect(10, 10, 20, 30)); 1091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) touch_region.Union(gfx::Rect(40, 10, 20, 20)); 1101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) touch_layer->SetTouchEventHandlerRegion(touch_region); 1111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) root_impl->AddChild(touch_layer.Pass()); 1131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) tree->SetRootLayer(root_impl.Pass()); 1141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) std::string json = host_impl.LayerTreeAsJson(); 1161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_refptr<Layer> root = ParseTreeFromJson(json, NULL); 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(root.get()); 1181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(LayerTreesMatch(host_impl.RootLayer(), root.get())); 1191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 1201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} // namespace cc 122