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/test_task_graph_runner.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
);
52 explicit LayerImplTest(const LayerTreeSettings
& settings
);
58 T::Create(host_
->host_impl()->active_tree(), layer_impl_id_
++);
60 root_layer_impl_
->AddChild(layer
.Pass());
65 T
* AddChild(LayerImpl
* parent
) {
67 T::Create(host_
->host_impl()->active_tree(), layer_impl_id_
++);
69 parent
->AddChild(layer
.Pass());
73 template <typename T
, typename A
>
74 T
* AddChildToRoot(const A
& a
) {
76 T::Create(host_
->host_impl()->active_tree(), layer_impl_id_
++, a
);
78 root_layer_impl_
->AddChild(layer
.Pass());
82 template <typename T
, typename A
, typename B
>
83 T
* AddChildToRoot(const A
& a
, const B
& b
) {
85 T::Create(host_
->host_impl()->active_tree(), layer_impl_id_
++, a
, b
);
87 root_layer_impl_
->AddChild(layer
.Pass());
91 template <typename T
, typename A
, typename B
, typename C
, typename D
>
92 T
* AddChildToRoot(const A
& a
, const B
& b
, const C
& c
, const D
& d
) {
93 scoped_ptr
<T
> layer
= T::Create(host_
->host_impl()->active_tree(),
94 layer_impl_id_
++, a
, b
, c
, d
);
96 root_layer_impl_
->AddChild(layer
.Pass());
100 template <typename T
,
106 T
* AddChildToRoot(const A
& a
,
111 scoped_ptr
<T
> layer
= T::Create(host_
->host_impl()->active_tree(),
112 layer_impl_id_
++, a
, b
, c
, d
, e
);
113 T
* ptr
= layer
.get();
114 root_layer_impl_
->AddChild(layer
.Pass());
118 void CalcDrawProps(const gfx::Size
& viewport_size
);
119 void AppendQuadsWithOcclusion(LayerImpl
* layer_impl
,
120 const gfx::Rect
& occluded
);
121 void AppendQuadsForPassWithOcclusion(LayerImpl
* layer_impl
,
122 RenderPass
* given_render_pass
,
123 const gfx::Rect
& occluded
);
124 void AppendSurfaceQuadsWithOcclusion(RenderSurfaceImpl
* surface_impl
,
125 const gfx::Rect
& occluded
);
127 OutputSurface
* output_surface() const {
128 return host_
->host_impl()->output_surface();
130 ResourceProvider
* resource_provider() const {
131 return host_
->host_impl()->resource_provider();
133 LayerImpl
* root_layer() const { return root_layer_impl_
.get(); }
134 FakeLayerTreeHost
* host() { return host_
.get(); }
135 FakeLayerTreeHostImpl
* host_impl() const { return host_
->host_impl(); }
136 Proxy
* proxy() const { return host_
->host_impl()->proxy(); }
137 const QuadList
& quad_list() const { return render_pass_
->quad_list
; }
140 FakeLayerTreeHostClient client_
;
141 TestTaskGraphRunner task_graph_runner_
;
142 scoped_ptr
<FakeLayerTreeHost
> host_
;
143 scoped_ptr
<LayerImpl
> root_layer_impl_
;
144 scoped_ptr
<RenderPass
> render_pass_
;
151 #endif // CC_TEST_LAYER_TEST_COMMON_H_