OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/message_loop/message_loop_proxy.h" | 5 #include "base/message_loop/message_loop_proxy.h" |
6 #include "base/threading/simple_thread.h" | 6 #include "base/threading/simple_thread.h" |
7 #include "cc/layers/delegated_frame_provider.h" | 7 #include "cc/layers/delegated_frame_provider.h" |
8 #include "cc/layers/delegated_frame_resource_collection.h" | 8 #include "cc/layers/delegated_frame_resource_collection.h" |
9 #include "cc/layers/delegated_renderer_layer.h" | 9 #include "cc/layers/delegated_renderer_layer.h" |
10 #include "cc/layers/layer.h" | 10 #include "cc/layers/layer.h" |
(...skipping 10 matching lines...) Expand all Loading... |
21 #include "testing/gtest/include/gtest/gtest.h" | 21 #include "testing/gtest/include/gtest/gtest.h" |
22 #include "third_party/skia/include/core/SkColor.h" | 22 #include "third_party/skia/include/core/SkColor.h" |
23 #include "ui/gfx/frame_time.h" | 23 #include "ui/gfx/frame_time.h" |
24 | 24 |
25 namespace cc { | 25 namespace cc { |
26 namespace { | 26 namespace { |
27 | 27 |
28 class NoMessageLoopOutputSurface : public OutputSurface { | 28 class NoMessageLoopOutputSurface : public OutputSurface { |
29 public: | 29 public: |
30 NoMessageLoopOutputSurface() : OutputSurface(TestContextProvider::Create()) {} | 30 NoMessageLoopOutputSurface() : OutputSurface(TestContextProvider::Create()) {} |
31 virtual ~NoMessageLoopOutputSurface() {} | 31 ~NoMessageLoopOutputSurface() override {} |
32 | 32 |
33 // OutputSurface overrides. | 33 // OutputSurface overrides. |
34 virtual void SwapBuffers(CompositorFrame* frame) override { | 34 void SwapBuffers(CompositorFrame* frame) override { |
35 DCHECK(client_); | 35 DCHECK(client_); |
36 client_->DidSwapBuffers(); | 36 client_->DidSwapBuffers(); |
37 client_->DidSwapBuffersComplete(); | 37 client_->DidSwapBuffersComplete(); |
38 } | 38 } |
39 }; | 39 }; |
40 | 40 |
41 class LayerTreeHostNoMessageLoopTest | 41 class LayerTreeHostNoMessageLoopTest |
42 : public testing::Test, | 42 : public testing::Test, |
43 public base::DelegateSimpleThread::Delegate, | 43 public base::DelegateSimpleThread::Delegate, |
44 public LayerTreeHostClient, | 44 public LayerTreeHostClient, |
45 public LayerTreeHostSingleThreadClient { | 45 public LayerTreeHostSingleThreadClient { |
46 public: | 46 public: |
47 LayerTreeHostNoMessageLoopTest() | 47 LayerTreeHostNoMessageLoopTest() |
48 : did_initialize_output_surface_(false), | 48 : did_initialize_output_surface_(false), |
49 did_commit_(false), | 49 did_commit_(false), |
50 did_commit_and_draw_frame_(false), | 50 did_commit_and_draw_frame_(false), |
51 size_(100, 100), | 51 size_(100, 100), |
52 no_loop_thread_(this, "LayerTreeHostNoMessageLoopTest") {} | 52 no_loop_thread_(this, "LayerTreeHostNoMessageLoopTest") {} |
53 virtual ~LayerTreeHostNoMessageLoopTest() {} | 53 virtual ~LayerTreeHostNoMessageLoopTest() {} |
54 | 54 |
55 // LayerTreeHostClient overrides. | 55 // LayerTreeHostClient overrides. |
56 virtual void WillBeginMainFrame(int frame_id) override {} | 56 void WillBeginMainFrame(int frame_id) override {} |
57 virtual void BeginMainFrame(const BeginFrameArgs& args) override {} | 57 void BeginMainFrame(const BeginFrameArgs& args) override {} |
58 virtual void DidBeginMainFrame() override {} | 58 void DidBeginMainFrame() override {} |
59 virtual void Layout() override {} | 59 void Layout() override {} |
60 virtual void ApplyViewportDeltas(const gfx::Vector2d& inner_delta, | 60 void ApplyViewportDeltas(const gfx::Vector2d& inner_delta, |
61 const gfx::Vector2d& outer_delta, | 61 const gfx::Vector2d& outer_delta, |
62 float page_scale, | 62 float page_scale, |
63 float top_controls_delta) override {} | 63 float top_controls_delta) override {} |
64 virtual void ApplyViewportDeltas(const gfx::Vector2d& scroll_delta, | 64 void ApplyViewportDeltas(const gfx::Vector2d& scroll_delta, |
65 float page_scale, | 65 float page_scale, |
66 float top_controls_delta) override {} | 66 float top_controls_delta) override {} |
67 virtual void RequestNewOutputSurface(bool fallback) override { | 67 void RequestNewOutputSurface(bool fallback) override { |
68 layer_tree_host_->SetOutputSurface( | 68 layer_tree_host_->SetOutputSurface( |
69 make_scoped_ptr<OutputSurface>(new NoMessageLoopOutputSurface)); | 69 make_scoped_ptr<OutputSurface>(new NoMessageLoopOutputSurface)); |
70 } | 70 } |
71 virtual void DidInitializeOutputSurface() override { | 71 void DidInitializeOutputSurface() override { |
72 did_initialize_output_surface_ = true; | 72 did_initialize_output_surface_ = true; |
73 } | 73 } |
74 virtual void WillCommit() override {} | 74 void WillCommit() override {} |
75 virtual void DidCommit() override { did_commit_ = true; } | 75 void DidCommit() override { did_commit_ = true; } |
76 virtual void DidCommitAndDrawFrame() override { | 76 void DidCommitAndDrawFrame() override { did_commit_and_draw_frame_ = true; } |
77 did_commit_and_draw_frame_ = true; | 77 void DidCompleteSwapBuffers() override {} |
78 } | |
79 virtual void DidCompleteSwapBuffers() override {} | |
80 | 78 |
81 // LayerTreeHostSingleThreadClient overrides. | 79 // LayerTreeHostSingleThreadClient overrides. |
82 virtual void DidPostSwapBuffers() override {} | 80 void DidPostSwapBuffers() override {} |
83 virtual void DidAbortSwapBuffers() override {} | 81 void DidAbortSwapBuffers() override {} |
84 | 82 |
85 void RunTest() { | 83 void RunTest() { |
86 no_loop_thread_.Start(); | 84 no_loop_thread_.Start(); |
87 no_loop_thread_.Join(); | 85 no_loop_thread_.Join(); |
88 } | 86 } |
89 | 87 |
90 // base::DelegateSimpleThread::Delegate override. | 88 // base::DelegateSimpleThread::Delegate override. |
91 virtual void Run() override { | 89 void Run() override { |
92 ASSERT_FALSE(base::MessageLoopProxy::current().get()); | 90 ASSERT_FALSE(base::MessageLoopProxy::current().get()); |
93 RunTestWithoutMessageLoop(); | 91 RunTestWithoutMessageLoop(); |
94 EXPECT_FALSE(base::MessageLoopProxy::current().get()); | 92 EXPECT_FALSE(base::MessageLoopProxy::current().get()); |
95 } | 93 } |
96 | 94 |
97 protected: | 95 protected: |
98 virtual void RunTestWithoutMessageLoop() = 0; | 96 virtual void RunTestWithoutMessageLoop() = 0; |
99 | 97 |
100 void SetupLayerTreeHost() { | 98 void SetupLayerTreeHost() { |
101 LayerTreeSettings settings; | 99 LayerTreeSettings settings; |
(...skipping 28 matching lines...) Expand all Loading... |
130 bool did_commit_and_draw_frame_; | 128 bool did_commit_and_draw_frame_; |
131 gfx::Size size_; | 129 gfx::Size size_; |
132 | 130 |
133 private: | 131 private: |
134 base::DelegateSimpleThread no_loop_thread_; | 132 base::DelegateSimpleThread no_loop_thread_; |
135 }; | 133 }; |
136 | 134 |
137 class LayerTreeHostNoMessageLoopSmokeTest | 135 class LayerTreeHostNoMessageLoopSmokeTest |
138 : public LayerTreeHostNoMessageLoopTest { | 136 : public LayerTreeHostNoMessageLoopTest { |
139 protected: | 137 protected: |
140 virtual void RunTestWithoutMessageLoop() override { | 138 void RunTestWithoutMessageLoop() override { |
141 gfx::Size size(100, 100); | 139 gfx::Size size(100, 100); |
142 | 140 |
143 // Set up root layer. | 141 // Set up root layer. |
144 { | 142 { |
145 scoped_refptr<SolidColorLayer> solid_color_layer = | 143 scoped_refptr<SolidColorLayer> solid_color_layer = |
146 SolidColorLayer::Create(); | 144 SolidColorLayer::Create(); |
147 solid_color_layer->SetBackgroundColor(SK_ColorRED); | 145 solid_color_layer->SetBackgroundColor(SK_ColorRED); |
148 solid_color_layer->SetBounds(size_); | 146 solid_color_layer->SetBounds(size_); |
149 solid_color_layer->SetIsDrawable(true); | 147 solid_color_layer->SetIsDrawable(true); |
150 root_layer_ = solid_color_layer; | 148 root_layer_ = solid_color_layer; |
151 } | 149 } |
152 | 150 |
153 SetupLayerTreeHost(); | 151 SetupLayerTreeHost(); |
154 Composite(); | 152 Composite(); |
155 TearDownLayerTreeHost(); | 153 TearDownLayerTreeHost(); |
156 } | 154 } |
157 }; | 155 }; |
158 | 156 |
159 TEST_F(LayerTreeHostNoMessageLoopSmokeTest, SmokeTest) { | 157 TEST_F(LayerTreeHostNoMessageLoopSmokeTest, SmokeTest) { |
160 RunTest(); | 158 RunTest(); |
161 } | 159 } |
162 | 160 |
163 class LayerTreeHostNoMessageLoopDelegatedLayer | 161 class LayerTreeHostNoMessageLoopDelegatedLayer |
164 : public LayerTreeHostNoMessageLoopTest, | 162 : public LayerTreeHostNoMessageLoopTest, |
165 public DelegatedFrameResourceCollectionClient { | 163 public DelegatedFrameResourceCollectionClient { |
166 protected: | 164 protected: |
167 virtual void RunTestWithoutMessageLoop() override { | 165 void RunTestWithoutMessageLoop() override { |
168 resource_collection_ = new DelegatedFrameResourceCollection; | 166 resource_collection_ = new DelegatedFrameResourceCollection; |
169 frame_provider_ = new DelegatedFrameProvider( | 167 frame_provider_ = new DelegatedFrameProvider( |
170 resource_collection_.get(), CreateFrameDataWithResource(998)); | 168 resource_collection_.get(), CreateFrameDataWithResource(998)); |
171 | 169 |
172 root_layer_ = Layer::Create(); | 170 root_layer_ = Layer::Create(); |
173 delegated_layer_ = | 171 delegated_layer_ = |
174 FakeDelegatedRendererLayer::Create(frame_provider_.get()); | 172 FakeDelegatedRendererLayer::Create(frame_provider_.get()); |
175 delegated_layer_->SetBounds(size_); | 173 delegated_layer_->SetBounds(size_); |
176 delegated_layer_->SetIsDrawable(true); | 174 delegated_layer_->SetIsDrawable(true); |
177 root_layer_->AddChild(delegated_layer_); | 175 root_layer_->AddChild(delegated_layer_); |
(...skipping 13 matching lines...) Expand all Loading... |
191 TearDownLayerTreeHost(); | 189 TearDownLayerTreeHost(); |
192 delegated_layer_ = NULL; | 190 delegated_layer_ = NULL; |
193 frame_provider_ = NULL; | 191 frame_provider_ = NULL; |
194 | 192 |
195 // Resource from second frame should be returned. | 193 // Resource from second frame should be returned. |
196 CheckReturnedResource(1u); | 194 CheckReturnedResource(1u); |
197 resource_collection_ = NULL; | 195 resource_collection_ = NULL; |
198 } | 196 } |
199 | 197 |
200 // DelegatedFrameResourceCollectionClient overrides. | 198 // DelegatedFrameResourceCollectionClient overrides. |
201 virtual void UnusedResourcesAreAvailable() override {} | 199 void UnusedResourcesAreAvailable() override {} |
202 | 200 |
203 private: | 201 private: |
204 scoped_ptr<DelegatedFrameData> CreateFrameDataWithResource( | 202 scoped_ptr<DelegatedFrameData> CreateFrameDataWithResource( |
205 ResourceProvider::ResourceId resource_id) { | 203 ResourceProvider::ResourceId resource_id) { |
206 scoped_ptr<DelegatedFrameData> frame(new DelegatedFrameData); | 204 scoped_ptr<DelegatedFrameData> frame(new DelegatedFrameData); |
207 gfx::Rect frame_rect(size_); | 205 gfx::Rect frame_rect(size_); |
208 | 206 |
209 scoped_ptr<RenderPass> root_pass(RenderPass::Create()); | 207 scoped_ptr<RenderPass> root_pass(RenderPass::Create()); |
210 root_pass->SetNew( | 208 root_pass->SetNew( |
211 RenderPassId(1, 1), frame_rect, frame_rect, gfx::Transform()); | 209 RenderPassId(1, 1), frame_rect, frame_rect, gfx::Transform()); |
(...skipping 19 matching lines...) Expand all Loading... |
231 scoped_refptr<DelegatedFrameProvider> frame_provider_; | 229 scoped_refptr<DelegatedFrameProvider> frame_provider_; |
232 scoped_refptr<DelegatedRendererLayer> delegated_layer_; | 230 scoped_refptr<DelegatedRendererLayer> delegated_layer_; |
233 }; | 231 }; |
234 | 232 |
235 TEST_F(LayerTreeHostNoMessageLoopDelegatedLayer, SingleDelegatedLayer) { | 233 TEST_F(LayerTreeHostNoMessageLoopDelegatedLayer, SingleDelegatedLayer) { |
236 RunTest(); | 234 RunTest(); |
237 } | 235 } |
238 | 236 |
239 } // namespace | 237 } // namespace |
240 } // namespace cc | 238 } // namespace cc |
OLD | NEW |