Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(45)

Side by Side Diff: cc/test/layer_tree_test.h

Issue 1057283003: Remove parts of //cc we aren't using (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/test/layer_tree_pixel_test.cc ('k') | cc/test/layer_tree_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2011 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_TREE_TEST_H_
6 #define CC_TEST_LAYER_TREE_TEST_H_
7
8 #include "base/memory/ref_counted.h"
9 #include "base/threading/thread.h"
10 #include "cc/animation/animation_delegate.h"
11 #include "cc/trees/layer_tree_host.h"
12 #include "cc/trees/layer_tree_host_impl.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14
15 namespace cc {
16 class FakeExternalBeginFrameSource;
17 class FakeLayerTreeHostClient;
18 class FakeOutputSurface;
19 class LayerImpl;
20 class LayerTreeHost;
21 class LayerTreeHostClient;
22 class LayerTreeHostImpl;
23 class TestContextProvider;
24 class TestGpuMemoryBufferManager;
25 class TestWebGraphicsContext3D;
26
27 // Used by test stubs to notify the test when something interesting happens.
28 class TestHooks : public AnimationDelegate {
29 public:
30 TestHooks();
31 ~TestHooks() override;
32
33 void ReadSettings(const LayerTreeSettings& settings);
34
35 virtual scoped_ptr<Rasterizer> CreateRasterizer(LayerTreeHostImpl* host_impl);
36 virtual void CreateResourceAndTileTaskWorkerPool(
37 LayerTreeHostImpl* host_impl,
38 scoped_ptr<TileTaskWorkerPool>* tile_task_worker_pool,
39 scoped_ptr<ResourcePool>* resource_pool,
40 scoped_ptr<ResourcePool>* staging_resource_pool);
41 virtual void WillBeginImplFrameOnThread(LayerTreeHostImpl* host_impl,
42 const BeginFrameArgs& args) {}
43 virtual void BeginMainFrameAbortedOnThread(LayerTreeHostImpl* host_impl,
44 CommitEarlyOutReason reason) {}
45 virtual void BeginCommitOnThread(LayerTreeHostImpl* host_impl) {}
46 virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) {}
47 virtual void WillActivateTreeOnThread(LayerTreeHostImpl* host_impl) {}
48 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) {}
49 virtual void InitializedRendererOnThread(LayerTreeHostImpl* host_impl,
50 bool success) {}
51 virtual DrawResult PrepareToDrawOnThread(
52 LayerTreeHostImpl* host_impl,
53 LayerTreeHostImpl::FrameData* frame_data,
54 DrawResult draw_result);
55 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) {}
56 virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) {}
57 virtual void SwapBuffersCompleteOnThread(LayerTreeHostImpl* host_impl) {}
58 virtual void NotifyReadyToActivateOnThread(LayerTreeHostImpl* host_impl) {}
59 virtual void NotifyReadyToDrawOnThread(LayerTreeHostImpl* host_impl) {}
60 virtual void NotifyTileStateChangedOnThread(LayerTreeHostImpl* host_impl,
61 const Tile* tile) {}
62 virtual void AnimateLayers(LayerTreeHostImpl* host_impl,
63 base::TimeTicks monotonic_time) {}
64 virtual void UpdateAnimationState(LayerTreeHostImpl* host_impl,
65 bool has_unfinished_animation) {}
66 virtual void WillAnimateLayers(LayerTreeHostImpl* host_impl,
67 base::TimeTicks monotonic_time) {}
68 virtual void ApplyViewportDeltas(
69 const gfx::Vector2dF& inner_delta,
70 const gfx::Vector2dF& outer_delta,
71 const gfx::Vector2dF& elastic_overscroll_delta,
72 float scale,
73 float top_controls_delta) {}
74 virtual void ApplyViewportDeltas(const gfx::Vector2d& scroll_delta,
75 float scale,
76 float top_controls_delta) {}
77 virtual void BeginMainFrame(const BeginFrameArgs& args) {}
78 virtual void WillBeginMainFrame() {}
79 virtual void DidBeginMainFrame() {}
80 virtual void Layout() {}
81 virtual void DidInitializeOutputSurface() {}
82 virtual void DidFailToInitializeOutputSurface() {}
83 virtual void DidAddAnimation() {}
84 virtual void WillCommit() {}
85 virtual void DidCommit() {}
86 virtual void DidCommitAndDrawFrame() {}
87 virtual void DidCompleteSwapBuffers() {}
88 virtual void DidSetVisibleOnImplTree(LayerTreeHostImpl* host_impl,
89 bool visible) {}
90 virtual void ScheduleComposite() {}
91 virtual void SendBeginFramesToChildren(const BeginFrameArgs& args) {}
92
93 // Hooks for SchedulerClient.
94 virtual void WillBeginImplFrame(const BeginFrameArgs& args) {}
95 virtual void ScheduledActionWillSendBeginMainFrame() {}
96 virtual void ScheduledActionSendBeginMainFrame() {}
97 virtual void ScheduledActionDrawAndSwapIfPossible() {}
98 virtual void ScheduledActionAnimate() {}
99 virtual void ScheduledActionCommit() {}
100 virtual void ScheduledActionBeginOutputSurfaceCreation() {}
101 virtual void ScheduledActionPrepareTiles() {}
102
103 // Implementation of AnimationDelegate:
104 void NotifyAnimationStarted(base::TimeTicks monotonic_time,
105 Animation::TargetProperty target_property,
106 int group) override {}
107 void NotifyAnimationFinished(base::TimeTicks monotonic_time,
108 Animation::TargetProperty target_property,
109 int group) override {}
110
111 virtual void RequestNewOutputSurface() = 0;
112 };
113
114 class BeginTask;
115 class LayerTreeHostClientForTesting;
116 class TimeoutTask;
117
118 // The LayerTreeTests runs with the main loop running. It instantiates a single
119 // LayerTreeHostForTesting and associated LayerTreeHostImplForTesting and
120 // LayerTreeHostClientForTesting.
121 //
122 // BeginTest() is called once the main message loop is running and the layer
123 // tree host is initialized.
124 //
125 // Key stages of the drawing loop, e.g. drawing or commiting, redirect to
126 // LayerTreeTest methods of similar names. To track the commit process, override
127 // these functions.
128 //
129 // The test continues until someone calls EndTest. EndTest can be called on any
130 // thread, but be aware that ending the test is an asynchronous process.
131 class LayerTreeTest : public testing::Test, public TestHooks {
132 public:
133 ~LayerTreeTest() override;
134
135 virtual void EndTest();
136 void EndTestAfterDelayMs(int delay_milliseconds);
137
138 void PostAddAnimationToMainThread(Layer* layer_to_receive_animation);
139 void PostAddInstantAnimationToMainThread(Layer* layer_to_receive_animation);
140 void PostAddLongAnimationToMainThread(Layer* layer_to_receive_animation);
141 void PostSetDeferCommitsToMainThread(bool defer_commits);
142 void PostSetNeedsCommitToMainThread();
143 void PostSetNeedsUpdateLayersToMainThread();
144 void PostSetNeedsRedrawToMainThread();
145 void PostSetNeedsRedrawRectToMainThread(const gfx::Rect& damage_rect);
146 void PostSetVisibleToMainThread(bool visible);
147 void PostSetNextCommitForcesRedrawToMainThread();
148 void PostCompositeImmediatelyToMainThread();
149
150 void DoBeginTest();
151 void Timeout();
152
153 bool verify_property_trees() const { return verify_property_trees_; }
154 void set_verify_property_trees(bool verify_property_trees) {
155 verify_property_trees_ = verify_property_trees;
156 }
157
158 protected:
159 LayerTreeTest();
160
161 virtual void InitializeSettings(LayerTreeSettings* settings) {}
162
163 void RealEndTest();
164
165 virtual void DispatchAddAnimation(Layer* layer_to_receive_animation,
166 double animation_duration);
167 void DispatchSetDeferCommits(bool defer_commits);
168 void DispatchSetNeedsCommit();
169 void DispatchSetNeedsUpdateLayers();
170 void DispatchSetNeedsRedraw();
171 void DispatchSetNeedsRedrawRect(const gfx::Rect& damage_rect);
172 void DispatchSetVisible(bool visible);
173 void DispatchSetNextCommitForcesRedraw();
174 void DispatchDidAddAnimation();
175 void DispatchCompositeImmediately();
176
177 virtual void AfterTest() = 0;
178 virtual void WillBeginTest();
179 virtual void BeginTest() = 0;
180 virtual void SetupTree();
181
182 virtual void RunTest(bool threaded,
183 bool delegating_renderer,
184 bool impl_side_painting);
185 virtual void RunTestWithImplSidePainting();
186
187 bool HasImplThread() { return proxy() ? proxy()->HasImplThread() : false; }
188 base::SingleThreadTaskRunner* ImplThreadTaskRunner() {
189 DCHECK(proxy());
190 return proxy()->ImplThreadTaskRunner() ? proxy()->ImplThreadTaskRunner()
191 : main_task_runner_.get();
192 }
193 base::SingleThreadTaskRunner* MainThreadTaskRunner() {
194 return main_task_runner_.get();
195 }
196 Proxy* proxy() const {
197 return layer_tree_host_ ? layer_tree_host_->proxy() : NULL;
198 }
199 TaskGraphRunner* task_graph_runner() const {
200 return task_graph_runner_.get();
201 }
202
203 bool TestEnded() const { return ended_; }
204
205 LayerTreeHost* layer_tree_host();
206 bool delegating_renderer() const { return delegating_renderer_; }
207 FakeOutputSurface* output_surface() { return output_surface_; }
208 int LastCommittedSourceFrameNumber(LayerTreeHostImpl* impl) const;
209
210 void DestroyLayerTreeHost();
211
212 // By default, output surface recreation is synchronous.
213 void RequestNewOutputSurface() override;
214 // Override this for pixel tests, where you need a real output surface.
215 virtual scoped_ptr<OutputSurface> CreateOutputSurface();
216 // Override this for unit tests, which should not produce pixel output.
217 virtual scoped_ptr<FakeOutputSurface> CreateFakeOutputSurface();
218
219 TestWebGraphicsContext3D* TestContext();
220
221 private:
222 LayerTreeSettings settings_;
223 scoped_ptr<LayerTreeHostClientForTesting> client_;
224 scoped_ptr<LayerTreeHost> layer_tree_host_;
225 FakeOutputSurface* output_surface_;
226 FakeExternalBeginFrameSource* external_begin_frame_source_;
227
228 bool beginning_;
229 bool end_when_begin_returns_;
230 bool timed_out_;
231 bool scheduled_;
232 bool started_;
233 bool ended_;
234 bool delegating_renderer_;
235 bool verify_property_trees_;
236
237 int timeout_seconds_;
238
239 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_;
240 scoped_ptr<base::Thread> impl_thread_;
241 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_;
242 scoped_ptr<TestGpuMemoryBufferManager> gpu_memory_buffer_manager_;
243 scoped_ptr<TaskGraphRunner> task_graph_runner_;
244 base::CancelableClosure timeout_;
245 scoped_refptr<TestContextProvider> compositor_contexts_;
246 base::WeakPtr<LayerTreeTest> main_thread_weak_ptr_;
247 base::WeakPtrFactory<LayerTreeTest> weak_factory_;
248 };
249
250 } // namespace cc
251
252 #define SINGLE_THREAD_DIRECT_RENDERER_NOIMPL_TEST_F(TEST_FIXTURE_NAME) \
253 TEST_F(TEST_FIXTURE_NAME, RunSingleThread_DirectRenderer_MainThreadPaint) { \
254 RunTest(false, false, false); \
255 } \
256 class SingleThreadDirectNoImplNeedsSemicolon##TEST_FIXTURE_NAME {}
257
258 #define SINGLE_THREAD_DIRECT_RENDERER_IMPL_TEST_F(TEST_FIXTURE_NAME) \
259 TEST_F(TEST_FIXTURE_NAME, RunSingleThread_DirectRenderer_ImplSidePaint) { \
260 RunTest(false, false, true); \
261 } \
262 class SingleThreadDirectImplNeedsSemicolon##TEST_FIXTURE_NAME {}
263
264 #define SINGLE_THREAD_DIRECT_RENDERER_TEST_F(TEST_FIXTURE_NAME) \
265 SINGLE_THREAD_DIRECT_RENDERER_NOIMPL_TEST_F(TEST_FIXTURE_NAME); \
266 SINGLE_THREAD_DIRECT_RENDERER_IMPL_TEST_F(TEST_FIXTURE_NAME)
267
268 #define SINGLE_THREAD_DELEGATING_RENDERER_NOIMPL_TEST_F(TEST_FIXTURE_NAME) \
269 TEST_F(TEST_FIXTURE_NAME, \
270 RunSingleThread_DelegatingRenderer_MainThreadPaint) { \
271 RunTest(false, true, false); \
272 } \
273 class SingleThreadDelegatingNoImplNeedsSemicolon##TEST_FIXTURE_NAME {}
274
275 #define SINGLE_THREAD_DELEGATING_RENDERER_IMPL_TEST_F(TEST_FIXTURE_NAME) \
276 TEST_F(TEST_FIXTURE_NAME, \
277 RunSingleThread_DelegatingRenderer_ImplSidePaint) { \
278 RunTest(false, true, true); \
279 } \
280 class SingleThreadDelegatingImplNeedsSemicolon##TEST_FIXTURE_NAME {}
281
282 #define SINGLE_THREAD_DELEGATING_RENDERER_TEST_F(TEST_FIXTURE_NAME) \
283 SINGLE_THREAD_DELEGATING_RENDERER_NOIMPL_TEST_F(TEST_FIXTURE_NAME); \
284 SINGLE_THREAD_DELEGATING_RENDERER_IMPL_TEST_F(TEST_FIXTURE_NAME)
285
286 #define SINGLE_THREAD_NOIMPL_TEST_F(TEST_FIXTURE_NAME) \
287 SINGLE_THREAD_DIRECT_RENDERER_NOIMPL_TEST_F(TEST_FIXTURE_NAME); \
288 SINGLE_THREAD_DELEGATING_RENDERER_NOIMPL_TEST_F(TEST_FIXTURE_NAME)
289
290 #define SINGLE_THREAD_IMPL_TEST_F(TEST_FIXTURE_NAME) \
291 SINGLE_THREAD_DIRECT_RENDERER_IMPL_TEST_F(TEST_FIXTURE_NAME); \
292 SINGLE_THREAD_DELEGATING_RENDERER_IMPL_TEST_F(TEST_FIXTURE_NAME)
293
294 #define SINGLE_THREAD_TEST_F(TEST_FIXTURE_NAME) \
295 SINGLE_THREAD_DIRECT_RENDERER_TEST_F(TEST_FIXTURE_NAME); \
296 SINGLE_THREAD_DELEGATING_RENDERER_TEST_F(TEST_FIXTURE_NAME)
297
298 #define MULTI_THREAD_DIRECT_RENDERER_NOIMPL_TEST_F(TEST_FIXTURE_NAME) \
299 TEST_F(TEST_FIXTURE_NAME, RunMultiThread_DirectRenderer_MainThreadPaint) { \
300 RunTest(true, false, false); \
301 } \
302 class MultiThreadDirectNoImplNeedsSemicolon##TEST_FIXTURE_NAME {}
303
304 #define MULTI_THREAD_DIRECT_RENDERER_IMPL_TEST_F(TEST_FIXTURE_NAME) \
305 TEST_F(TEST_FIXTURE_NAME, RunMultiThread_DirectRenderer_ImplSidePaint) { \
306 RunTest(true, false, true); \
307 } \
308 class MultiThreadDirectImplNeedsSemicolon##TEST_FIXTURE_NAME {}
309
310 #define MULTI_THREAD_DIRECT_RENDERER_TEST_F(TEST_FIXTURE_NAME) \
311 MULTI_THREAD_DIRECT_RENDERER_NOIMPL_TEST_F(TEST_FIXTURE_NAME); \
312 MULTI_THREAD_DIRECT_RENDERER_IMPL_TEST_F(TEST_FIXTURE_NAME)
313
314 #define MULTI_THREAD_DELEGATING_RENDERER_NOIMPL_TEST_F(TEST_FIXTURE_NAME) \
315 TEST_F(TEST_FIXTURE_NAME, \
316 RunMultiThread_DelegatingRenderer_MainThreadPaint) { \
317 RunTest(true, true, false); \
318 } \
319 class MultiThreadDelegatingNoImplNeedsSemicolon##TEST_FIXTURE_NAME {}
320
321 #define MULTI_THREAD_DELEGATING_RENDERER_IMPL_TEST_F(TEST_FIXTURE_NAME) \
322 TEST_F(TEST_FIXTURE_NAME, RunMultiThread_DelegatingRenderer_ImplSidePaint) { \
323 RunTest(true, true, true); \
324 } \
325 class MultiThreadDelegatingImplNeedsSemicolon##TEST_FIXTURE_NAME {}
326
327 #define MULTI_THREAD_DELEGATING_RENDERER_TEST_F(TEST_FIXTURE_NAME) \
328 MULTI_THREAD_DELEGATING_RENDERER_NOIMPL_TEST_F(TEST_FIXTURE_NAME); \
329 MULTI_THREAD_DELEGATING_RENDERER_IMPL_TEST_F(TEST_FIXTURE_NAME)
330
331 #define MULTI_THREAD_NOIMPL_TEST_F(TEST_FIXTURE_NAME) \
332 MULTI_THREAD_DIRECT_RENDERER_NOIMPL_TEST_F(TEST_FIXTURE_NAME); \
333 MULTI_THREAD_DELEGATING_RENDERER_NOIMPL_TEST_F(TEST_FIXTURE_NAME)
334
335 #define MULTI_THREAD_IMPL_TEST_F(TEST_FIXTURE_NAME) \
336 MULTI_THREAD_DIRECT_RENDERER_IMPL_TEST_F(TEST_FIXTURE_NAME); \
337 MULTI_THREAD_DELEGATING_RENDERER_IMPL_TEST_F(TEST_FIXTURE_NAME)
338
339 #define MULTI_THREAD_TEST_F(TEST_FIXTURE_NAME) \
340 MULTI_THREAD_DIRECT_RENDERER_TEST_F(TEST_FIXTURE_NAME); \
341 MULTI_THREAD_DELEGATING_RENDERER_TEST_F(TEST_FIXTURE_NAME)
342
343 #define SINGLE_AND_MULTI_THREAD_DIRECT_RENDERER_NOIMPL_TEST_F( \
344 TEST_FIXTURE_NAME) \
345 SINGLE_THREAD_DIRECT_RENDERER_NOIMPL_TEST_F(TEST_FIXTURE_NAME); \
346 MULTI_THREAD_DIRECT_RENDERER_NOIMPL_TEST_F(TEST_FIXTURE_NAME)
347
348 #define SINGLE_AND_MULTI_THREAD_DIRECT_RENDERER_IMPL_TEST_F(TEST_FIXTURE_NAME) \
349 SINGLE_THREAD_DIRECT_RENDERER_IMPL_TEST_F(TEST_FIXTURE_NAME); \
350 MULTI_THREAD_DIRECT_RENDERER_IMPL_TEST_F(TEST_FIXTURE_NAME)
351
352 #define SINGLE_AND_MULTI_THREAD_DIRECT_RENDERER_TEST_F(TEST_FIXTURE_NAME) \
353 SINGLE_THREAD_DIRECT_RENDERER_TEST_F(TEST_FIXTURE_NAME); \
354 MULTI_THREAD_DIRECT_RENDERER_TEST_F(TEST_FIXTURE_NAME)
355
356 #define SINGLE_AND_MULTI_THREAD_DELEGATING_RENDERER_NOIMPL_TEST_F( \
357 TEST_FIXTURE_NAME) \
358 SINGLE_THREAD_DELEGATING_RENDERER_NOIMPL_TEST_F(TEST_FIXTURE_NAME); \
359 MULTI_THREAD_DELEGATING_RENDERER_NOIMPL_TEST_F(TEST_FIXTURE_NAME)
360
361 #define SINGLE_AND_MULTI_THREAD_DELEGATING_RENDERER_IMPL_TEST_F( \
362 TEST_FIXTURE_NAME) \
363 SINGLE_THREAD_DELEGATING_RENDERER_IMPL_TEST_F(TEST_FIXTURE_NAME); \
364 MULTI_THREAD_DELEGATING_RENDERER_IMPL_TEST_F(TEST_FIXTURE_NAME)
365
366 #define SINGLE_AND_MULTI_THREAD_DELEGATING_RENDERER_TEST_F(TEST_FIXTURE_NAME) \
367 SINGLE_THREAD_DELEGATING_RENDERER_TEST_F(TEST_FIXTURE_NAME); \
368 MULTI_THREAD_DELEGATING_RENDERER_TEST_F(TEST_FIXTURE_NAME)
369
370 #define SINGLE_AND_MULTI_THREAD_NOIMPL_TEST_F(TEST_FIXTURE_NAME) \
371 SINGLE_AND_MULTI_THREAD_DIRECT_RENDERER_NOIMPL_TEST_F(TEST_FIXTURE_NAME); \
372 SINGLE_AND_MULTI_THREAD_DELEGATING_RENDERER_NOIMPL_TEST_F(TEST_FIXTURE_NAME)
373
374 #define SINGLE_AND_MULTI_THREAD_IMPL_TEST_F(TEST_FIXTURE_NAME) \
375 SINGLE_AND_MULTI_THREAD_DIRECT_RENDERER_IMPL_TEST_F(TEST_FIXTURE_NAME); \
376 SINGLE_AND_MULTI_THREAD_DELEGATING_RENDERER_IMPL_TEST_F(TEST_FIXTURE_NAME)
377
378 #define SINGLE_AND_MULTI_THREAD_TEST_F(TEST_FIXTURE_NAME) \
379 SINGLE_AND_MULTI_THREAD_DIRECT_RENDERER_TEST_F(TEST_FIXTURE_NAME); \
380 SINGLE_AND_MULTI_THREAD_DELEGATING_RENDERER_TEST_F(TEST_FIXTURE_NAME)
381
382 // Some tests want to control when notify ready for activation occurs,
383 // but this is not supported in the single-threaded case.
384 #define SINGLE_AND_MULTI_THREAD_BLOCKNOTIFY_TEST_F(TEST_FIXTURE_NAME) \
385 SINGLE_THREAD_NOIMPL_TEST_F(TEST_FIXTURE_NAME); \
386 MULTI_THREAD_TEST_F(TEST_FIXTURE_NAME)
387
388 #endif // CC_TEST_LAYER_TREE_TEST_H_
OLDNEW
« no previous file with comments | « cc/test/layer_tree_pixel_test.cc ('k') | cc/test/layer_tree_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698