nine_patch_layer_unittest.cc revision 58537e28ecd584eab876aee8be7156509866d23a
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 3// found in the LICENSE file. 4 5#include "cc/layers/nine_patch_layer.h" 6 7#include "cc/debug/overdraw_metrics.h" 8#include "cc/resources/prioritized_resource_manager.h" 9#include "cc/resources/resource_provider.h" 10#include "cc/resources/resource_update_queue.h" 11#include "cc/resources/scoped_ui_resource.h" 12#include "cc/scheduler/texture_uploader.h" 13#include "cc/test/fake_layer_tree_host_client.h" 14#include "cc/test/fake_output_surface.h" 15#include "cc/test/fake_output_surface_client.h" 16#include "cc/test/geometry_test_utils.h" 17#include "cc/trees/layer_tree_host.h" 18#include "cc/trees/occlusion_tracker.h" 19#include "cc/trees/single_thread_proxy.h" 20#include "testing/gmock/include/gmock/gmock.h" 21#include "testing/gtest/include/gtest/gtest.h" 22#include "third_party/skia/include/core/SkBitmap.h" 23 24using ::testing::Mock; 25using ::testing::_; 26using ::testing::AtLeast; 27using ::testing::AnyNumber; 28 29namespace cc { 30namespace { 31 32class MockLayerTreeHost : public LayerTreeHost { 33 public: 34 explicit MockLayerTreeHost(LayerTreeHostClient* client) 35 : LayerTreeHost(client, LayerTreeSettings()) { 36 Initialize(NULL); 37 } 38}; 39 40class NinePatchLayerTest : public testing::Test { 41 public: 42 NinePatchLayerTest() : fake_client_(FakeLayerTreeHostClient::DIRECT_3D) {} 43 44 cc::Proxy* Proxy() const { return layer_tree_host_->proxy(); } 45 46 protected: 47 virtual void SetUp() { 48 layer_tree_host_.reset(new MockLayerTreeHost(&fake_client_)); 49 } 50 51 virtual void TearDown() { 52 Mock::VerifyAndClearExpectations(layer_tree_host_.get()); 53 } 54 55 scoped_ptr<MockLayerTreeHost> layer_tree_host_; 56 FakeLayerTreeHostClient fake_client_; 57}; 58 59TEST_F(NinePatchLayerTest, SetBitmap) { 60 scoped_refptr<NinePatchLayer> test_layer = NinePatchLayer::Create(); 61 ASSERT_TRUE(test_layer.get()); 62 test_layer->SetIsDrawable(true); 63 test_layer->SetBounds(gfx::Size(100, 100)); 64 65 layer_tree_host_->SetRootLayer(test_layer); 66 Mock::VerifyAndClearExpectations(layer_tree_host_.get()); 67 EXPECT_EQ(test_layer->layer_tree_host(), layer_tree_host_.get()); 68 69 layer_tree_host_->InitializeOutputSurfaceIfNeeded(); 70 71 ResourceUpdateQueue queue; 72 OcclusionTracker occlusion_tracker(gfx::Rect(), false); 73 test_layer->SavePaintProperties(); 74 test_layer->Update(&queue, &occlusion_tracker); 75 76 EXPECT_FALSE(test_layer->DrawsContent()); 77 78 SkBitmap bitmap; 79 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10); 80 bitmap.allocPixels(); 81 bitmap.setImmutable(); 82 83 gfx::Rect aperture(5, 5, 1, 1); 84 bool fill_center = false; 85 test_layer->SetBitmap(bitmap, aperture); 86 test_layer->SetFillCenter(fill_center); 87 test_layer->Update(&queue, &occlusion_tracker); 88 89 EXPECT_TRUE(test_layer->DrawsContent()); 90} 91 92TEST_F(NinePatchLayerTest, SetSharedBitmap) { 93 scoped_refptr<NinePatchLayer> test_layer = NinePatchLayer::Create(); 94 ASSERT_TRUE(test_layer.get()); 95 test_layer->SetIsDrawable(true); 96 test_layer->SetBounds(gfx::Size(100, 100)); 97 98 layer_tree_host_->SetRootLayer(test_layer); 99 Mock::VerifyAndClearExpectations(layer_tree_host_.get()); 100 EXPECT_EQ(test_layer->layer_tree_host(), layer_tree_host_.get()); 101 102 layer_tree_host_->InitializeOutputSurfaceIfNeeded(); 103 104 ResourceUpdateQueue queue; 105 OcclusionTracker occlusion_tracker(gfx::Rect(), false); 106 test_layer->SavePaintProperties(); 107 test_layer->Update(&queue, &occlusion_tracker); 108 109 EXPECT_FALSE(test_layer->DrawsContent()); 110 111 SkBitmap bitmap; 112 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10); 113 bitmap.allocPixels(); 114 bitmap.setImmutable(); 115 116 scoped_ptr<ScopedUIResource> resource = ScopedUIResource::Create( 117 layer_tree_host_.get(), UIResourceBitmap(bitmap)); 118 gfx::Rect aperture(5, 5, 1, 1); 119 bool fill_center = true; 120 test_layer->SetUIResourceId(resource->id(), aperture); 121 test_layer->SetFillCenter(fill_center); 122 test_layer->Update(&queue, &occlusion_tracker); 123 124 EXPECT_TRUE(test_layer->DrawsContent()); 125} 126 127} // namespace 128} // namespace cc 129