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/content_layer.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/layers/content_layer_client.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/resources/bitmap_content_layer_updater.h" 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "cc/test/fake_rendering_stats_instrumentation.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/test/geometry_test_utils.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "skia/ext/platform_canvas.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/rect_conversions.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc { 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MockContentLayerClient : public ContentLayerClient { 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) explicit MockContentLayerClient(const gfx::Rect& opaque_layer_rect) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : opaque_layer_rect_(opaque_layer_rect) {} 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void PaintContents( 24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SkCanvas* canvas, 25010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const gfx::Rect& clip, 26010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) gfx::RectF* opaque, 27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ContentLayerClient::GraphicsContextStatus gc_status) OVERRIDE { 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *opaque = gfx::RectF(opaque_layer_rect_); 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DidChangeLayerCanUseLCDText() OVERRIDE {} 31effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual bool FillsBoundsCompletely() const OVERRIDE { return false; } 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect opaque_layer_rect_; 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(ContentLayerTest, ContentLayerPainterWithDeviceScale) { 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float contents_scale = 2.f; 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect content_rect(10, 10, 100, 100); 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect opaque_rect_in_layer_space(5, 5, 20, 20); 4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) gfx::Rect opaque_rect_in_content_space = gfx::ScaleToEnclosingRect( 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) opaque_rect_in_layer_space, contents_scale, contents_scale); 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockContentLayerClient client(opaque_rect_in_layer_space); 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FakeRenderingStatsInstrumentation stats_instrumentation; 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<BitmapContentLayerUpdater> updater = 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) BitmapContentLayerUpdater::Create( 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ContentLayerPainter::Create(&client).PassAs<LayerPainter>(), 4890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) &stats_instrumentation, 4990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 0); 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect resulting_opaque_rect; 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) updater->PrepareToUpdate(content_rect, 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Size(256, 256), 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contents_scale, 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) contents_scale, 56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch &resulting_opaque_rect); 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(opaque_rect_in_content_space.ToString(), 5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) resulting_opaque_rect.ToString()); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace cc 64