Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2011 The Chromium Authors. All rights reserved. | 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 | 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 "config.h" | 5 #include "config.h" |
| 6 | 6 |
| 7 #include "CCThreadedTest.h" | 7 #include "CCThreadedTest.h" |
| 8 | 8 |
| 9 #include "CCActiveAnimation.h" | 9 #include "CCActiveAnimation.h" |
| 10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
| 11 #include "cc/content_layer.h" | 11 #include "cc/content_layer.h" |
| 12 #include "cc/input_handler.h" | 12 #include "cc/input_handler.h" |
| 13 #include "cc/layer.h" | 13 #include "cc/layer.h" |
| 14 #include "cc/layer_animation_controller.h" | 14 #include "cc/layer_animation_controller.h" |
| 15 #include "cc/layer_impl.h" | 15 #include "cc/layer_impl.h" |
| 16 #include "cc/layer_tree_host_impl.h" | 16 #include "cc/layer_tree_host_impl.h" |
| 17 #include "cc/scoped_thread_proxy.h" | 17 #include "cc/scoped_thread_proxy.h" |
| 18 #include "cc/settings.h" | 18 #include "cc/settings.h" |
| 19 #include "cc/single_thread_proxy.h" | 19 #include "cc/single_thread_proxy.h" |
| 20 #include "cc/test/animation_test_common.h" | 20 #include "cc/test/animation_test_common.h" |
| 21 #include "cc/test/fake_web_compositor_output_surface.h" | 21 #include "cc/test/fake_web_compositor_output_surface.h" |
| 22 #include "cc/test/fake_web_graphics_context_3d.h" | 22 #include "cc/test/fake_web_graphics_context_3d.h" |
| 23 #include "cc/test/occlusion_tracker_test_common.h" | 23 #include "cc/test/occlusion_tracker_test_common.h" |
| 24 #include "cc/test/test_common.h" | 24 #include "cc/test/test_common.h" |
| 25 #include "cc/test/tiled_layer_test_common.h" | 25 #include "cc/test/tiled_layer_test_common.h" |
| 26 #include "cc/thread_task.h" | 26 #include "cc/thread_task.h" |
| 27 #include "cc/timing_function.h" | 27 #include "cc/timing_function.h" |
| 28 #include "testing/gmock/include/gmock/gmock.h" | 28 #include "testing/gmock/include/gmock/gmock.h" |
| 29 #include "webkit/compositor_bindings/ccthread_impl.h" | |
| 29 #include <public/Platform.h> | 30 #include <public/Platform.h> |
| 30 #include <public/WebCompositorSupport.h> | 31 #include <public/WebCompositorSupport.h> |
| 31 #include <public/WebFilterOperation.h> | 32 #include <public/WebFilterOperation.h> |
| 32 #include <public/WebFilterOperations.h> | 33 #include <public/WebFilterOperations.h> |
| 33 #include <public/WebThread.h> | 34 #include <public/WebThread.h> |
| 34 | 35 |
| 35 using namespace cc; | 36 using namespace cc; |
| 36 using namespace WebKit; | 37 using namespace WebKit; |
| 37 | 38 |
| 38 namespace WebKitTests { | 39 namespace WebKitTests { |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 87 bool TestHooks::prepareToDrawOnThread(cc::LayerTreeHostImpl*) | 88 bool TestHooks::prepareToDrawOnThread(cc::LayerTreeHostImpl*) |
| 88 { | 89 { |
| 89 return true; | 90 return true; |
| 90 } | 91 } |
| 91 | 92 |
| 92 scoped_ptr<WebCompositorOutputSurface> TestHooks::createOutputSurface() | 93 scoped_ptr<WebCompositorOutputSurface> TestHooks::createOutputSurface() |
| 93 { | 94 { |
| 94 return FakeWebCompositorOutputSurface::create(CompositorFakeWebGraphicsConte xt3DWithTextureTracking::create(WebGraphicsContext3D::Attributes()).PassAs<WebKi t::WebGraphicsContext3D>()).PassAs<WebKit::WebCompositorOutputSurface>(); | 95 return FakeWebCompositorOutputSurface::create(CompositorFakeWebGraphicsConte xt3DWithTextureTracking::create(WebGraphicsContext3D::Attributes()).PassAs<WebKi t::WebGraphicsContext3D>()).PassAs<WebKit::WebCompositorOutputSurface>(); |
| 95 } | 96 } |
| 96 | 97 |
| 97 scoped_ptr<MockLayerTreeHostImpl> MockLayerTreeHostImpl::create(TestHooks* testH ooks, const LayerTreeSettings& settings, LayerTreeHostImplClient* client) | 98 scoped_ptr<MockLayerTreeHostImpl> MockLayerTreeHostImpl::create(TestHooks* testH ooks, const LayerTreeSettings& settings, LayerTreeHostImplClient* client, Proxy* proxy) |
| 98 { | 99 { |
| 99 return make_scoped_ptr(new MockLayerTreeHostImpl(testHooks, settings, client )); | 100 return make_scoped_ptr(new MockLayerTreeHostImpl(testHooks, settings, client , proxy)); |
| 100 } | 101 } |
| 101 | 102 |
| 102 void MockLayerTreeHostImpl::beginCommit() | 103 void MockLayerTreeHostImpl::beginCommit() |
| 103 { | 104 { |
| 104 LayerTreeHostImpl::beginCommit(); | 105 LayerTreeHostImpl::beginCommit(); |
| 105 m_testHooks->beginCommitOnThread(this); | 106 m_testHooks->beginCommitOnThread(this); |
| 106 } | 107 } |
| 107 | 108 |
| 108 void MockLayerTreeHostImpl::commitComplete() | 109 void MockLayerTreeHostImpl::commitComplete() |
| 109 { | 110 { |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 130 m_testHooks->willAnimateLayers(this, monotonicTime); | 131 m_testHooks->willAnimateLayers(this, monotonicTime); |
| 131 LayerTreeHostImpl::animateLayers(monotonicTime, wallClockTime); | 132 LayerTreeHostImpl::animateLayers(monotonicTime, wallClockTime); |
| 132 m_testHooks->animateLayers(this, monotonicTime); | 133 m_testHooks->animateLayers(this, monotonicTime); |
| 133 } | 134 } |
| 134 | 135 |
| 135 base::TimeDelta MockLayerTreeHostImpl::lowFrequencyAnimationInterval() const | 136 base::TimeDelta MockLayerTreeHostImpl::lowFrequencyAnimationInterval() const |
| 136 { | 137 { |
| 137 return base::TimeDelta::FromMilliseconds(16); | 138 return base::TimeDelta::FromMilliseconds(16); |
| 138 } | 139 } |
| 139 | 140 |
| 140 MockLayerTreeHostImpl::MockLayerTreeHostImpl(TestHooks* testHooks, const LayerTr eeSettings& settings, LayerTreeHostImplClient* client) | 141 MockLayerTreeHostImpl::MockLayerTreeHostImpl(TestHooks* testHooks, const LayerTr eeSettings& settings, LayerTreeHostImplClient* client, Proxy* proxy) |
| 141 : LayerTreeHostImpl(settings, client) | 142 : LayerTreeHostImpl(settings, client, proxy) |
| 142 , m_testHooks(testHooks) | 143 , m_testHooks(testHooks) |
| 143 { | 144 { |
| 144 } | 145 } |
| 145 | 146 |
| 146 // Adapts LayerTreeHost for test. Injects MockLayerTreeHostImpl. | 147 // Adapts LayerTreeHost for test. Injects MockLayerTreeHostImpl. |
| 147 class MockLayerTreeHost : public cc::LayerTreeHost { | 148 class MockLayerTreeHost : public cc::LayerTreeHost { |
| 148 public: | 149 public: |
| 149 static scoped_ptr<MockLayerTreeHost> create(TestHooks* testHooks, cc::LayerT reeHostClient* client, scoped_refptr<cc::Layer> rootLayer, const cc::LayerTreeSe ttings& settings) | 150 static scoped_ptr<MockLayerTreeHost> create(TestHooks* testHooks, cc::LayerT reeHostClient* client, scoped_refptr<cc::Layer> rootLayer, const cc::LayerTreeSe ttings& settings, cc::Thread* implThread) |
| 150 { | 151 { |
| 151 scoped_ptr<MockLayerTreeHost> layerTreeHost(new MockLayerTreeHost(testHo oks, client, settings)); | 152 scoped_ptr<MockLayerTreeHost> layerTreeHost(new MockLayerTreeHost(testHo oks, client, settings)); |
| 152 bool success = layerTreeHost->initialize(); | 153 bool success = layerTreeHost->initialize(implThread); |
| 153 EXPECT_TRUE(success); | 154 EXPECT_TRUE(success); |
| 154 layerTreeHost->setRootLayer(rootLayer); | 155 layerTreeHost->setRootLayer(rootLayer); |
| 155 | 156 |
| 156 // LayerTreeHostImpl won't draw if it has 1x1 viewport. | 157 // LayerTreeHostImpl won't draw if it has 1x1 viewport. |
| 157 layerTreeHost->setViewportSize(IntSize(1, 1), IntSize(1, 1)); | 158 layerTreeHost->setViewportSize(IntSize(1, 1), IntSize(1, 1)); |
| 158 | 159 |
| 159 layerTreeHost->rootLayer()->setLayerAnimationDelegate(testHooks); | 160 layerTreeHost->rootLayer()->setLayerAnimationDelegate(testHooks); |
| 160 | 161 |
| 161 return layerTreeHost.Pass(); | 162 return layerTreeHost.Pass(); |
| 162 } | 163 } |
| 163 | 164 |
| 164 virtual scoped_ptr<cc::LayerTreeHostImpl> createLayerTreeHostImpl(cc::LayerT reeHostImplClient* client) | 165 virtual scoped_ptr<cc::LayerTreeHostImpl> createLayerTreeHostImpl(cc::LayerT reeHostImplClient* client) |
| 165 { | 166 { |
| 166 return MockLayerTreeHostImpl::create(m_testHooks, settings(), client).Pa ssAs<cc::LayerTreeHostImpl>(); | 167 return MockLayerTreeHostImpl::create(m_testHooks, settings(), client, pr oxy()).PassAs<cc::LayerTreeHostImpl>(); |
| 167 } | 168 } |
| 168 | 169 |
| 169 virtual void didAddAnimation() OVERRIDE | 170 virtual void didAddAnimation() OVERRIDE |
| 170 { | 171 { |
| 171 LayerTreeHost::didAddAnimation(); | 172 LayerTreeHost::didAddAnimation(); |
| 172 m_testHooks->didAddAnimation(); | 173 m_testHooks->didAddAnimation(); |
| 173 } | 174 } |
| 174 | 175 |
| 175 virtual void setNeedsCommit() OVERRIDE | 176 virtual void setNeedsCommit() OVERRIDE |
| 176 { | 177 { |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 312 ThreadedTest* m_test; | 313 ThreadedTest* m_test; |
| 313 }; | 314 }; |
| 314 | 315 |
| 315 ThreadedTest::ThreadedTest() | 316 ThreadedTest::ThreadedTest() |
| 316 : m_beginning(false) | 317 : m_beginning(false) |
| 317 , m_endWhenBeginReturns(false) | 318 , m_endWhenBeginReturns(false) |
| 318 , m_timedOut(false) | 319 , m_timedOut(false) |
| 319 , m_finished(false) | 320 , m_finished(false) |
| 320 , m_scheduled(false) | 321 , m_scheduled(false) |
| 321 , m_started(false) | 322 , m_started(false) |
| 323 , m_implThread(0) | |
| 322 { | 324 { |
| 323 } | 325 } |
| 324 | 326 |
| 325 ThreadedTest::~ThreadedTest() | 327 ThreadedTest::~ThreadedTest() |
| 326 { | 328 { |
| 327 } | 329 } |
| 328 | 330 |
| 329 void ThreadedTest::endTest() | 331 void ThreadedTest::endTest() |
| 330 { | 332 { |
| 331 m_finished = true; | 333 m_finished = true; |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 383 m_mainThreadProxy->postTask(createThreadTask(this, &ThreadedTest::dispatchSe tVisible, visible)); | 385 m_mainThreadProxy->postTask(createThreadTask(this, &ThreadedTest::dispatchSe tVisible, visible)); |
| 384 } | 386 } |
| 385 | 387 |
| 386 void ThreadedTest::postDidAddAnimationToMainThread() | 388 void ThreadedTest::postDidAddAnimationToMainThread() |
| 387 { | 389 { |
| 388 m_mainThreadProxy->postTask(createThreadTask(this, &ThreadedTest::dispatchDi dAddAnimation)); | 390 m_mainThreadProxy->postTask(createThreadTask(this, &ThreadedTest::dispatchDi dAddAnimation)); |
| 389 } | 391 } |
| 390 | 392 |
| 391 void ThreadedTest::doBeginTest() | 393 void ThreadedTest::doBeginTest() |
| 392 { | 394 { |
| 393 DCHECK(Proxy::isMainThread()); | |
|
danakj
2012/10/25 05:06:06
Why not call proxy()->isMainThread() etc for all t
| |
| 394 m_client = ThreadedMockLayerTreeHostClient::create(this); | 395 m_client = ThreadedMockLayerTreeHostClient::create(this); |
| 395 | 396 |
| 396 scoped_refptr<Layer> rootLayer = Layer::create(); | 397 scoped_refptr<Layer> rootLayer = Layer::create(); |
| 397 m_layerTreeHost = MockLayerTreeHost::create(this, m_client.get(), rootLayer, m_settings); | 398 m_layerTreeHost = MockLayerTreeHost::create(this, m_client.get(), rootLayer, m_settings, m_implThread); |
| 398 ASSERT_TRUE(m_layerTreeHost.get()); | 399 ASSERT_TRUE(m_layerTreeHost.get()); |
| 399 rootLayer->setLayerTreeHost(m_layerTreeHost.get()); | 400 rootLayer->setLayerTreeHost(m_layerTreeHost.get()); |
| 400 m_layerTreeHost->setSurfaceReady(); | 401 m_layerTreeHost->setSurfaceReady(); |
| 401 | 402 |
| 402 m_started = true; | 403 m_started = true; |
| 403 m_beginning = true; | 404 m_beginning = true; |
| 404 beginTest(); | 405 beginTest(); |
| 405 m_beginning = false; | 406 m_beginning = false; |
| 406 if (m_endWhenBeginReturns) | 407 if (m_endWhenBeginReturns) |
| 407 realEndTest(); | 408 realEndTest(); |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 421 void ThreadedTest::scheduleComposite() | 422 void ThreadedTest::scheduleComposite() |
| 422 { | 423 { |
| 423 if (!m_started || m_scheduled || m_finished) | 424 if (!m_started || m_scheduled || m_finished) |
| 424 return; | 425 return; |
| 425 m_scheduled = true; | 426 m_scheduled = true; |
| 426 m_mainThreadProxy->postTask(createThreadTask(this, &ThreadedTest::dispatchCo mposite)); | 427 m_mainThreadProxy->postTask(createThreadTask(this, &ThreadedTest::dispatchCo mposite)); |
| 427 } | 428 } |
| 428 | 429 |
| 429 void ThreadedTest::realEndTest() | 430 void ThreadedTest::realEndTest() |
| 430 { | 431 { |
| 431 DCHECK(Proxy::isMainThread()); | |
| 432 WebKit::Platform::current()->currentThread()->exitRunLoop(); | 432 WebKit::Platform::current()->currentThread()->exitRunLoop(); |
| 433 } | 433 } |
| 434 | 434 |
| 435 void ThreadedTest::dispatchSetNeedsAnimate() | 435 void ThreadedTest::dispatchSetNeedsAnimate() |
| 436 { | 436 { |
| 437 DCHECK(Proxy::isMainThread()); | |
| 438 | |
| 439 if (m_finished) | 437 if (m_finished) |
| 440 return; | 438 return; |
| 441 | 439 |
| 442 if (m_layerTreeHost.get()) | 440 if (m_layerTreeHost.get()) |
| 443 m_layerTreeHost->setNeedsAnimate(); | 441 m_layerTreeHost->setNeedsAnimate(); |
| 444 } | 442 } |
| 445 | 443 |
| 446 void ThreadedTest::dispatchAddInstantAnimation() | 444 void ThreadedTest::dispatchAddInstantAnimation() |
| 447 { | 445 { |
| 448 DCHECK(Proxy::isMainThread()); | |
| 449 | |
| 450 if (m_finished) | 446 if (m_finished) |
| 451 return; | 447 return; |
| 452 | 448 |
| 453 if (m_layerTreeHost.get() && m_layerTreeHost->rootLayer()) | 449 if (m_layerTreeHost.get() && m_layerTreeHost->rootLayer()) |
| 454 addOpacityTransitionToLayer(*m_layerTreeHost->rootLayer(), 0, 0, 0.5, fa lse); | 450 addOpacityTransitionToLayer(*m_layerTreeHost->rootLayer(), 0, 0, 0.5, fa lse); |
| 455 } | 451 } |
| 456 | 452 |
| 457 void ThreadedTest::dispatchAddAnimation() | 453 void ThreadedTest::dispatchAddAnimation() |
| 458 { | 454 { |
| 459 DCHECK(Proxy::isMainThread()); | |
| 460 | |
| 461 if (m_finished) | 455 if (m_finished) |
| 462 return; | 456 return; |
| 463 | 457 |
| 464 if (m_layerTreeHost.get() && m_layerTreeHost->rootLayer()) | 458 if (m_layerTreeHost.get() && m_layerTreeHost->rootLayer()) |
| 465 addOpacityTransitionToLayer(*m_layerTreeHost->rootLayer(), 10, 0, 0.5, t rue); | 459 addOpacityTransitionToLayer(*m_layerTreeHost->rootLayer(), 10, 0, 0.5, t rue); |
| 466 } | 460 } |
| 467 | 461 |
| 468 void ThreadedTest::dispatchSetNeedsAnimateAndCommit() | 462 void ThreadedTest::dispatchSetNeedsAnimateAndCommit() |
| 469 { | 463 { |
| 470 DCHECK(Proxy::isMainThread()); | |
| 471 | |
| 472 if (m_finished) | 464 if (m_finished) |
| 473 return; | 465 return; |
| 474 | 466 |
| 475 if (m_layerTreeHost.get()) { | 467 if (m_layerTreeHost.get()) { |
| 476 m_layerTreeHost->setNeedsAnimate(); | 468 m_layerTreeHost->setNeedsAnimate(); |
| 477 m_layerTreeHost->setNeedsCommit(); | 469 m_layerTreeHost->setNeedsCommit(); |
| 478 } | 470 } |
| 479 } | 471 } |
| 480 | 472 |
| 481 void ThreadedTest::dispatchSetNeedsCommit() | 473 void ThreadedTest::dispatchSetNeedsCommit() |
| 482 { | 474 { |
| 483 DCHECK(Proxy::isMainThread()); | |
| 484 | |
| 485 if (m_finished) | 475 if (m_finished) |
| 486 return; | 476 return; |
| 487 | 477 |
| 488 if (m_layerTreeHost.get()) | 478 if (m_layerTreeHost.get()) |
| 489 m_layerTreeHost->setNeedsCommit(); | 479 m_layerTreeHost->setNeedsCommit(); |
| 490 } | 480 } |
| 491 | 481 |
| 492 void ThreadedTest::dispatchAcquireLayerTextures() | 482 void ThreadedTest::dispatchAcquireLayerTextures() |
| 493 { | 483 { |
| 494 DCHECK(Proxy::isMainThread()); | |
| 495 | |
| 496 if (m_finished) | 484 if (m_finished) |
| 497 return; | 485 return; |
| 498 | 486 |
| 499 if (m_layerTreeHost.get()) | 487 if (m_layerTreeHost.get()) |
| 500 m_layerTreeHost->acquireLayerTextures(); | 488 m_layerTreeHost->acquireLayerTextures(); |
| 501 } | 489 } |
| 502 | 490 |
| 503 void ThreadedTest::dispatchSetNeedsRedraw() | 491 void ThreadedTest::dispatchSetNeedsRedraw() |
| 504 { | 492 { |
| 505 DCHECK(Proxy::isMainThread()); | |
| 506 | |
| 507 if (m_finished) | 493 if (m_finished) |
| 508 return; | 494 return; |
| 509 | 495 |
| 510 if (m_layerTreeHost.get()) | 496 if (m_layerTreeHost.get()) |
| 511 m_layerTreeHost->setNeedsRedraw(); | 497 m_layerTreeHost->setNeedsRedraw(); |
| 512 } | 498 } |
| 513 | 499 |
| 514 void ThreadedTest::dispatchSetVisible(bool visible) | 500 void ThreadedTest::dispatchSetVisible(bool visible) |
| 515 { | 501 { |
| 516 DCHECK(Proxy::isMainThread()); | |
| 517 | |
| 518 if (m_finished) | 502 if (m_finished) |
| 519 return; | 503 return; |
| 520 | 504 |
| 521 if (m_layerTreeHost.get()) | 505 if (m_layerTreeHost.get()) |
| 522 m_layerTreeHost->setVisible(visible); | 506 m_layerTreeHost->setVisible(visible); |
| 523 } | 507 } |
| 524 | 508 |
| 525 void ThreadedTest::dispatchComposite() | 509 void ThreadedTest::dispatchComposite() |
| 526 { | 510 { |
| 527 m_scheduled = false; | 511 m_scheduled = false; |
| 528 if (m_layerTreeHost.get() && !m_finished) | 512 if (m_layerTreeHost.get() && !m_finished) |
| 529 m_layerTreeHost->composite(); | 513 m_layerTreeHost->composite(); |
| 530 } | 514 } |
| 531 | 515 |
| 532 void ThreadedTest::dispatchDidAddAnimation() | 516 void ThreadedTest::dispatchDidAddAnimation() |
| 533 { | 517 { |
| 534 DCHECK(Proxy::isMainThread()); | |
| 535 | |
| 536 if (m_finished) | 518 if (m_finished) |
| 537 return; | 519 return; |
| 538 | 520 |
| 539 if (m_layerTreeHost.get()) | 521 if (m_layerTreeHost.get()) |
| 540 m_layerTreeHost->didAddAnimation(); | 522 m_layerTreeHost->didAddAnimation(); |
| 541 } | 523 } |
| 542 | 524 |
| 543 void ThreadedTest::runTest(bool threaded) | 525 void ThreadedTest::runTest(bool threaded) |
| 544 { | 526 { |
| 545 // For these tests, we will enable threaded animations. | 527 // For these tests, we will enable threaded animations. |
| 546 ScopedSettings scopedSettings; | 528 ScopedSettings scopedSettings; |
| 547 Settings::setAcceleratedAnimationEnabled(true); | 529 Settings::setAcceleratedAnimationEnabled(true); |
| 548 | 530 |
| 549 if (threaded) { | 531 if (threaded) { |
| 550 m_webThread.reset(WebKit::Platform::current()->createThread("ThreadedTes t")); | 532 m_webImplThread.reset(WebKit::Platform::current()->createThread("Threade dTest")); |
| 551 Platform::current()->compositorSupport()->initialize(m_webThread.get()); | 533 m_implThread = CCThreadImpl::createForDifferentThread(m_webImplThread.ge t()).release(); |
| 552 } else | 534 } |
| 553 Platform::current()->compositorSupport()->initialize(0); | |
| 554 | 535 |
| 555 DCHECK(Proxy::isMainThread()); | 536 m_mainThreadProxy = ScopedThreadProxy::create(WebKit::CCThreadImpl::createFo rCurrentThread().release()); |
| 556 m_mainThreadProxy = ScopedThreadProxy::create(Proxy::mainThread()); | |
| 557 | 537 |
| 558 initializeSettings(m_settings); | 538 initializeSettings(m_settings); |
| 559 | 539 |
| 560 m_beginTask = new BeginTask(this); | 540 m_beginTask = new BeginTask(this); |
| 561 WebKit::Platform::current()->currentThread()->postDelayedTask(m_beginTask, 0 ); // postDelayedTask takes ownership of the task | 541 WebKit::Platform::current()->currentThread()->postDelayedTask(m_beginTask, 0 ); // postDelayedTask takes ownership of the task |
| 562 m_timeoutTask = new TimeoutTask(this); | 542 m_timeoutTask = new TimeoutTask(this); |
| 563 WebKit::Platform::current()->currentThread()->postDelayedTask(m_timeoutTask, 5000); | 543 WebKit::Platform::current()->currentThread()->postDelayedTask(m_timeoutTask, 5000); |
| 564 WebKit::Platform::current()->currentThread()->enterRunLoop(); | 544 WebKit::Platform::current()->currentThread()->enterRunLoop(); |
| 565 | 545 |
| 566 if (m_layerTreeHost.get() && m_layerTreeHost->rootLayer()) | 546 if (m_layerTreeHost.get() && m_layerTreeHost->rootLayer()) |
| 567 m_layerTreeHost->rootLayer()->setLayerTreeHost(0); | 547 m_layerTreeHost->rootLayer()->setLayerTreeHost(0); |
| 568 m_layerTreeHost.reset(); | 548 m_layerTreeHost.reset(); |
| 569 | 549 |
| 570 if (m_timeoutTask) | 550 if (m_timeoutTask) |
| 571 m_timeoutTask->clearTest(); | 551 m_timeoutTask->clearTest(); |
| 572 | 552 |
| 573 ASSERT_FALSE(m_layerTreeHost.get()); | 553 ASSERT_FALSE(m_layerTreeHost.get()); |
| 574 m_client.reset(); | 554 m_client.reset(); |
| 575 if (m_timedOut) { | 555 if (m_timedOut) { |
| 576 FAIL() << "Test timed out"; | 556 FAIL() << "Test timed out"; |
| 577 Platform::current()->compositorSupport()->shutdown(); | |
| 578 return; | 557 return; |
| 579 } | 558 } |
| 580 afterTest(); | 559 afterTest(); |
| 581 Platform::current()->compositorSupport()->shutdown(); | |
| 582 } | 560 } |
| 583 | 561 |
| 584 } // namespace WebKitTests | 562 } // namespace WebKitTests |
| OLD | NEW |