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/layers/contents_scaling_layer.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <vector> 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 9a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "cc/test/fake_layer_tree_host.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/test/geometry_test_utils.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc { 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MockContentsScalingLayer : public ContentsScalingLayer { 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockContentsScalingLayer() 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : ContentsScalingLayer() {} 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetNeedsDisplayRect(const gfx::RectF& dirty_rect) OVERRIDE { 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) last_needs_display_rect_ = dirty_rect; 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentsScalingLayer::SetNeedsDisplayRect(dirty_rect); 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::RectF& LastNeedsDisplayRect() const { 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return last_needs_display_rect_; 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~MockContentsScalingLayer() {} 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::RectF last_needs_display_rect_; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 36a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)static void CalcDrawProps(FakeLayerTreeHost* host, float device_scale_factor) { 37ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch RenderSurfaceLayerList render_surface_layer_list; 38558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( 39a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) host->root_layer(), gfx::Size(500, 500), &render_surface_layer_list); 40558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch inputs.device_scale_factor = device_scale_factor; 41558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch LayerTreeHostCommon::CalculateDrawProperties(&inputs); 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(ContentsScalingLayerTest, CheckContentsBounds) { 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FakeLayerTreeHostClient client(FakeLayerTreeHostClient::DIRECT_3D); 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(&client); 47a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<MockContentsScalingLayer> test_layer = 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) make_scoped_refptr(new MockContentsScalingLayer()); 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<Layer> root = Layer::Create(); 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root->AddChild(test_layer); 53a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) host->SetRootLayer(root); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_layer->SetBounds(gfx::Size(320, 240)); 56a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 57a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) CalcDrawProps(host.get(), 1.f); 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FLOAT_EQ(1.f, test_layer->contents_scale_x()); 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FLOAT_EQ(1.f, test_layer->contents_scale_y()); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(320, test_layer->content_bounds().width()); 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(240, test_layer->content_bounds().height()); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 63a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) CalcDrawProps(host.get(), 2.f); 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(640, test_layer->content_bounds().width()); 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(480, test_layer->content_bounds().height()); 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_layer->SetBounds(gfx::Size(10, 20)); 68a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) CalcDrawProps(host.get(), 2.f); 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(20, test_layer->content_bounds().width()); 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(40, test_layer->content_bounds().height()); 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) CalcDrawProps(host.get(), 1.33f); 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(14, test_layer->content_bounds().width()); 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(27, test_layer->content_bounds().height()); 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace cc 79