Reland "Non-SFI mode: Switch to newlib. (patchset #4 id:60001 of https://codereview...
[chromium-blink-merge.git] / cc / test / layer_test_common.h
blob22d6a16cfa61582b32fd6790d4c0776c15e5c6a1
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) \
16 do { \
17 EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times((expect)); \
18 code_to_test; \
19 Mock::VerifyAndClearExpectations(layer_tree_host_.get()); \
20 } while (false)
22 #define EXPECT_SET_NEEDS_UPDATE(expect, code_to_test) \
23 do { \
24 EXPECT_CALL(*layer_tree_host_, SetNeedsUpdateLayers()).Times((expect)); \
25 code_to_test; \
26 Mock::VerifyAndClearExpectations(layer_tree_host_.get()); \
27 } while (false)
29 namespace gfx { class Rect; }
31 namespace cc {
32 class LayerImpl;
33 class OutputSurface;
34 class QuadList;
35 class RenderSurfaceImpl;
36 class ResourceProvider;
38 class LayerTestCommon {
39 public:
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);
49 class LayerImplTest {
50 public:
51 LayerImplTest();
52 ~LayerImplTest();
54 template <typename T>
55 T* AddChildToRoot() {
56 scoped_ptr<T> layer =
57 T::Create(host_->host_impl()->active_tree(), layer_impl_id_++);
58 T* ptr = layer.get();
59 root_layer_impl_->AddChild(layer.Pass());
60 return ptr;
63 template <typename T>
64 T* AddChild(LayerImpl* parent) {
65 scoped_ptr<T> layer =
66 T::Create(host_->host_impl()->active_tree(), layer_impl_id_++);
67 T* ptr = layer.get();
68 parent->AddChild(layer.Pass());
69 return ptr;
72 template <typename T, typename A>
73 T* AddChildToRoot(const A& a) {
74 scoped_ptr<T> layer =
75 T::Create(host_->host_impl()->active_tree(), layer_impl_id_++, a);
76 T* ptr = layer.get();
77 root_layer_impl_->AddChild(layer.Pass());
78 return ptr;
81 template <typename T, typename A, typename B>
82 T* AddChildToRoot(const A& a, const B& b) {
83 scoped_ptr<T> layer =
84 T::Create(host_->host_impl()->active_tree(), layer_impl_id_++, a, b);
85 T* ptr = layer.get();
86 root_layer_impl_->AddChild(layer.Pass());
87 return ptr;
90 template <typename T, typename A, typename B, typename C, typename D>
91 T* AddChildToRoot(const A& a, const B& b, const C& c, const D& d) {
92 scoped_ptr<T> layer = T::Create(host_->host_impl()->active_tree(),
93 layer_impl_id_++, a, b, c, d);
94 T* ptr = layer.get();
95 root_layer_impl_->AddChild(layer.Pass());
96 return ptr;
99 template <typename T,
100 typename A,
101 typename B,
102 typename C,
103 typename D,
104 typename E>
105 T* AddChildToRoot(const A& a,
106 const B& b,
107 const C& c,
108 const D& d,
109 const E& e) {
110 scoped_ptr<T> layer = T::Create(host_->host_impl()->active_tree(),
111 layer_impl_id_++, a, b, c, d, e);
112 T* ptr = layer.get();
113 root_layer_impl_->AddChild(layer.Pass());
114 return ptr;
117 void CalcDrawProps(const gfx::Size& viewport_size);
118 void AppendQuadsWithOcclusion(LayerImpl* layer_impl,
119 const gfx::Rect& occluded);
120 void AppendQuadsForPassWithOcclusion(LayerImpl* layer_impl,
121 RenderPass* given_render_pass,
122 const gfx::Rect& occluded);
123 void AppendSurfaceQuadsWithOcclusion(RenderSurfaceImpl* surface_impl,
124 const gfx::Rect& occluded);
126 OutputSurface* output_surface() const {
127 return host_->host_impl()->output_surface();
129 ResourceProvider* resource_provider() const {
130 return host_->host_impl()->resource_provider();
132 LayerImpl* root_layer() const { return root_layer_impl_.get(); }
133 FakeLayerTreeHost* host() { return host_.get(); }
134 FakeLayerTreeHostImpl* host_impl() const { return host_->host_impl(); }
135 Proxy* proxy() const { return host_->host_impl()->proxy(); }
136 const QuadList& quad_list() const { return render_pass_->quad_list; }
138 private:
139 FakeLayerTreeHostClient client_;
140 TestTaskGraphRunner task_graph_runner_;
141 scoped_ptr<FakeLayerTreeHost> host_;
142 scoped_ptr<LayerImpl> root_layer_impl_;
143 scoped_ptr<RenderPass> render_pass_;
144 int layer_impl_id_;
148 } // namespace cc
150 #endif // CC_TEST_LAYER_TEST_COMMON_H_