• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #ifndef CC_TEST_LAYER_TEST_COMMON_H_
6 #define CC_TEST_LAYER_TEST_COMMON_H_
7 
8 #include "base/basictypes.h"
9 #include "base/memory/scoped_ptr.h"
10 #include "cc/test/fake_layer_tree_host.h"
11 #include "cc/test/mock_quad_culler.h"
12 #include "cc/trees/layer_tree_host_impl.h"
13 
14 #define EXPECT_SET_NEEDS_COMMIT(expect, code_to_test)                 \
15   do {                                                                \
16     EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times((expect)); \
17     code_to_test;                                                     \
18     Mock::VerifyAndClearExpectations(layer_tree_host_.get());         \
19   } while (false)
20 
21 #define EXPECT_SET_NEEDS_UPDATE(expect, code_to_test)                       \
22   do {                                                                      \
23     EXPECT_CALL(*layer_tree_host_, SetNeedsUpdateLayers()).Times((expect)); \
24     code_to_test;                                                           \
25     Mock::VerifyAndClearExpectations(layer_tree_host_.get());               \
26   } while (false)
27 
28 namespace gfx { class Rect; }
29 
30 namespace cc {
31 class LayerImpl;
32 class OutputSurface;
33 class QuadList;
34 class RenderSurfaceImpl;
35 class ResourceProvider;
36 
37 class LayerTestCommon {
38  public:
39   static const char* quad_string;
40 
41   static void VerifyQuadsExactlyCoverRect(const QuadList& quads,
42                                           const gfx::Rect& rect);
43 
44   static void VerifyQuadsCoverRectWithOcclusion(
45       const QuadList& quads,
46       const gfx::Rect& rect,
47       const gfx::Rect& occluded,
48       size_t* partially_occluded_count);
49 
50   class LayerImplTest {
51    public:
52     LayerImplTest();
53     ~LayerImplTest();
54 
55     template <typename T>
AddChildToRoot()56     T* AddChildToRoot() {
57       scoped_ptr<T> layer = T::Create(host_->host_impl()->active_tree(), 2);
58       T* ptr = layer.get();
59       root_layer_impl_->AddChild(layer.template PassAs<LayerImpl>());
60       return ptr;
61     }
62 
63     template <typename T, typename A>
AddChildToRoot(const A & a)64     T* AddChildToRoot(const A& a) {
65       scoped_ptr<T> layer = T::Create(host_->host_impl()->active_tree(), 2, a);
66       T* ptr = layer.get();
67       root_layer_impl_->AddChild(layer.template PassAs<LayerImpl>());
68       return ptr;
69     }
70 
71     template <typename T, typename A, typename B, typename C, typename D>
AddChildToRoot(const A & a,const B & b,const C & c,const D & d)72     T* AddChildToRoot(const A& a, const B& b, const C& c, const D& d) {
73       scoped_ptr<T> layer =
74           T::Create(host_->host_impl()->active_tree(), 2, a, b, c, d);
75       T* ptr = layer.get();
76       root_layer_impl_->AddChild(layer.template PassAs<LayerImpl>());
77       return ptr;
78     }
79 
80     template <typename T,
81               typename A,
82               typename B,
83               typename C,
84               typename D,
85               typename E>
AddChildToRoot(const A & a,const B & b,const C & c,const D & d,const E & e)86     T* AddChildToRoot(const A& a,
87                       const B& b,
88                       const C& c,
89                       const D& d,
90                       const E& e) {
91       scoped_ptr<T> layer =
92           T::Create(host_->host_impl()->active_tree(), 2, a, b, c, d, e);
93       T* ptr = layer.get();
94       root_layer_impl_->AddChild(layer.template PassAs<LayerImpl>());
95       return ptr;
96     }
97 
98     void CalcDrawProps(const gfx::Size& viewport_size);
99     void AppendQuadsWithOcclusion(LayerImpl* layer_impl,
100                                   const gfx::Rect& occluded);
101     void AppendQuadsForPassWithOcclusion(LayerImpl* layer_impl,
102                                          const RenderPass::Id& id,
103                                          const gfx::Rect& occluded);
104     void AppendSurfaceQuadsWithOcclusion(RenderSurfaceImpl* surface_impl,
105                                          const gfx::Rect& occluded);
106 
output_surface()107     OutputSurface* output_surface() const {
108       return host_->host_impl()->output_surface();
109     }
resource_provider()110     ResourceProvider* resource_provider() const {
111       return host_->host_impl()->resource_provider();
112     }
root_layer()113     LayerImpl* root_layer() const { return root_layer_impl_.get(); }
host_impl()114     FakeLayerTreeHostImpl* host_impl() const { return host_->host_impl(); }
proxy()115     Proxy* proxy() const { return host_->host_impl()->proxy(); }
quad_list()116     const QuadList& quad_list() const { return quad_culler_->quad_list(); }
117 
118    private:
119     scoped_ptr<FakeLayerTreeHost> host_;
120     scoped_ptr<LayerImpl> root_layer_impl_;
121     scoped_ptr<RenderPass> render_pass_;
122     MockOcclusionTracker<LayerImpl> occlusion_tracker_;
123     scoped_ptr<MockQuadCuller> quad_culler_;
124   };
125 };
126 
127 }  // namespace cc
128 
129 #endif  // CC_TEST_LAYER_TEST_COMMON_H_
130