| OLD | NEW |
| (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_ | |
| OLD | NEW |