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.
5 #ifndef CC_TEST_LAYER_TEST_COMMON_H_
6 #define CC_TEST_LAYER_TEST_COMMON_H_
8 #include "base/basictypes.h"
9 #include "base/memory/scoped_ptr.h"
10 #include "cc/quads/render_pass.h"
11 #include "cc/test/fake_layer_tree_host.h"
12 #include "cc/test/mock_occlusion_tracker.h"
13 #include "cc/trees/layer_tree_host_impl.h"
15 #define EXPECT_SET_NEEDS_COMMIT(expect, code_to_test) \
17 EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times((expect)); \
19 Mock::VerifyAndClearExpectations(layer_tree_host_.get()); \
22 #define EXPECT_SET_NEEDS_UPDATE(expect, code_to_test) \
24 EXPECT_CALL(*layer_tree_host_, SetNeedsUpdateLayers()).Times((expect)); \
26 Mock::VerifyAndClearExpectations(layer_tree_host_.get()); \
29 namespace gfx { class Rect; }
35 class RenderSurfaceImpl;
36 class ResourceProvider;
38 class LayerTestCommon {
40 static const char* quad_string;
42 static void VerifyQuadsExactlyCoverRect(const QuadList& quads,
43 const gfx::Rect& rect);
45 static void VerifyQuadsAreOccluded(const QuadList& quads,
46 const gfx::Rect& occluded,
47 size_t* partially_occluded_count);
56 scoped_ptr<T> layer = T::Create(host_->host_impl()->active_tree(), 2);
58 root_layer_impl_->AddChild(layer.template PassAs<LayerImpl>());
62 template <typename T, typename A>
63 T* AddChildToRoot(const A& a) {
64 scoped_ptr<T> layer = T::Create(host_->host_impl()->active_tree(), 2, a);
66 root_layer_impl_->AddChild(layer.template PassAs<LayerImpl>());
70 template <typename T, typename A, typename B>
71 T* AddChildToRoot(const A& a, const B& b) {
73 T::Create(host_->host_impl()->active_tree(), 2, a, b);
75 root_layer_impl_->AddChild(layer.template PassAs<LayerImpl>());
79 template <typename T, typename A, typename B, typename C, typename D>
80 T* AddChildToRoot(const A& a, const B& b, const C& c, const D& d) {
82 T::Create(host_->host_impl()->active_tree(), 2, a, b, c, d);
84 root_layer_impl_->AddChild(layer.template PassAs<LayerImpl>());
94 T* AddChildToRoot(const A& a,
100 T::Create(host_->host_impl()->active_tree(), 2, a, b, c, d, e);
101 T* ptr = layer.get();
102 root_layer_impl_->AddChild(layer.template PassAs<LayerImpl>());
106 void CalcDrawProps(const gfx::Size& viewport_size);
107 void AppendQuadsWithOcclusion(LayerImpl* layer_impl,
108 const gfx::Rect& occluded);
109 void AppendQuadsForPassWithOcclusion(LayerImpl* layer_impl,
110 const RenderPassId& id,
111 const gfx::Rect& occluded);
112 void AppendSurfaceQuadsWithOcclusion(RenderSurfaceImpl* surface_impl,
113 const gfx::Rect& occluded);
115 OutputSurface* output_surface() const {
116 return host_->host_impl()->output_surface();
118 ResourceProvider* resource_provider() const {
119 return host_->host_impl()->resource_provider();
121 LayerImpl* root_layer() const { return root_layer_impl_.get(); }
122 FakeLayerTreeHostImpl* host_impl() const { return host_->host_impl(); }
123 Proxy* proxy() const { return host_->host_impl()->proxy(); }
124 const QuadList& quad_list() const { return render_pass_->quad_list; }
127 FakeLayerTreeHostClient client_;
128 scoped_ptr<FakeLayerTreeHost> host_;
129 scoped_ptr<LayerImpl> root_layer_impl_;
130 scoped_ptr<RenderPass> render_pass_;
131 MockOcclusionTracker<LayerImpl> occlusion_tracker_;
137 #endif // CC_TEST_LAYER_TEST_COMMON_H_