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/nine_patch_layer.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/resources/prioritized_resource_manager.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/resources/resource_provider.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/resources/resource_update_queue.h"
1068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "cc/resources/scoped_ui_resource.h"
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "cc/test/fake_layer_tree_host.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/test/fake_layer_tree_host_client.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/test/fake_output_surface.h"
143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "cc/test/fake_output_surface_client.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/test/geometry_test_utils.h"
1623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "cc/test/test_shared_bitmap_manager.h"
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/trees/layer_tree_host.h"
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/trees/occlusion_tracker.h"
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/trees/single_thread_proxy.h"
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h"
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/skia/include/core/SkBitmap.h"
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using ::testing::Mock;
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using ::testing::_;
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using ::testing::AtLeast;
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using ::testing::AnyNumber;
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc {
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace {
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class NinePatchLayerTest : public testing::Test {
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  NinePatchLayerTest() : fake_client_(FakeLayerTreeHostClient::DIRECT_3D) {}
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected:
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void SetUp() {
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    layer_tree_host_ = FakeLayerTreeHost::Create(&fake_client_);
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void TearDown() {
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    Mock::VerifyAndClearExpectations(layer_tree_host_.get());
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FakeLayerTreeHostClient fake_client_;
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_ptr<FakeLayerTreeHost> layer_tree_host_;
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(NinePatchLayerTest, SetLayerProperties) {
5068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  scoped_refptr<NinePatchLayer> test_layer = NinePatchLayer::Create();
5168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ASSERT_TRUE(test_layer.get());
5268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  test_layer->SetIsDrawable(true);
5368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  test_layer->SetBounds(gfx::Size(100, 100));
5468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
5568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  layer_tree_host_->SetRootLayer(test_layer);
5668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  Mock::VerifyAndClearExpectations(layer_tree_host_.get());
5768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  EXPECT_EQ(test_layer->layer_tree_host(), layer_tree_host_.get());
5868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
5968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ResourceUpdateQueue queue;
60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  gfx::Rect screen_space_clip_rect;
61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  OcclusionTracker<Layer> occlusion_tracker(screen_space_clip_rect);
62a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  test_layer->SavePaintProperties();
63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  test_layer->Update(&queue, &occlusion_tracker);
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  EXPECT_FALSE(test_layer->DrawsContent());
6668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
67effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  bool is_opaque = false;
6868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  scoped_ptr<ScopedUIResource> resource = ScopedUIResource::Create(
69effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      layer_tree_host_.get(), UIResourceBitmap(gfx::Size(10, 10), is_opaque));
7068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  gfx::Rect aperture(5, 5, 1, 1);
7168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  bool fill_center = true;
724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  test_layer->SetAperture(aperture);
734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  test_layer->SetUIResourceId(resource->id());
7468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  test_layer->SetFillCenter(fill_center);
75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  test_layer->Update(&queue, &occlusion_tracker);
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  EXPECT_TRUE(test_layer->DrawsContent());
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace cc
82