| 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 "cc/thread_proxy.h" | 5 #include "cc/thread_proxy.h" |
| 6 | 6 |
| 7 #include "base/auto_reset.h" |
| 7 #include "base/bind.h" | 8 #include "base/bind.h" |
| 8 #include "base/debug/trace_event.h" | 9 #include "base/debug/trace_event.h" |
| 9 #include "cc/delay_based_time_source.h" | 10 #include "cc/delay_based_time_source.h" |
| 10 #include "cc/draw_quad.h" | 11 #include "cc/draw_quad.h" |
| 11 #include "cc/frame_rate_controller.h" | 12 #include "cc/frame_rate_controller.h" |
| 12 #include "cc/input_handler.h" | 13 #include "cc/input_handler.h" |
| 13 #include "cc/layer_tree_host.h" | 14 #include "cc/layer_tree_host.h" |
| 14 #include "cc/output_surface.h" | 15 #include "cc/output_surface.h" |
| 15 #include "cc/prioritized_resource_manager.h" | 16 #include "cc/prioritized_resource_manager.h" |
| 16 #include "cc/scheduler.h" | 17 #include "cc/scheduler.h" |
| (...skipping 29 matching lines...) Expand all Loading... |
| 46 , m_manageTilesPending(false) | 47 , m_manageTilesPending(false) |
| 47 , m_weakFactoryOnImplThread(ALLOW_THIS_IN_INITIALIZER_LIST(this)) | 48 , m_weakFactoryOnImplThread(ALLOW_THIS_IN_INITIALIZER_LIST(this)) |
| 48 , m_weakFactory(ALLOW_THIS_IN_INITIALIZER_LIST(this)) | 49 , m_weakFactory(ALLOW_THIS_IN_INITIALIZER_LIST(this)) |
| 49 , m_beginFrameCompletionEventOnImplThread(0) | 50 , m_beginFrameCompletionEventOnImplThread(0) |
| 50 , m_readbackRequestOnImplThread(0) | 51 , m_readbackRequestOnImplThread(0) |
| 51 , m_commitCompletionEventOnImplThread(0) | 52 , m_commitCompletionEventOnImplThread(0) |
| 52 , m_completionEventForCommitHeldOnTreeActivation(0) | 53 , m_completionEventForCommitHeldOnTreeActivation(0) |
| 53 , m_textureAcquisitionCompletionEventOnImplThread(0) | 54 , m_textureAcquisitionCompletionEventOnImplThread(0) |
| 54 , m_nextFrameIsNewlyCommittedFrameOnImplThread(false) | 55 , m_nextFrameIsNewlyCommittedFrameOnImplThread(false) |
| 55 , m_renderVSyncEnabled(layerTreeHost->settings().renderVSyncEnabled) | 56 , m_renderVSyncEnabled(layerTreeHost->settings().renderVSyncEnabled) |
| 57 , m_insideDraw(false) |
| 56 , m_totalCommitCount(0) | 58 , m_totalCommitCount(0) |
| 57 , m_deferCommits(false) | 59 , m_deferCommits(false) |
| 58 { | 60 { |
| 59 TRACE_EVENT0("cc", "ThreadProxy::ThreadProxy"); | 61 TRACE_EVENT0("cc", "ThreadProxy::ThreadProxy"); |
| 60 DCHECK(isMainThread()); | 62 DCHECK(isMainThread()); |
| 61 } | 63 } |
| 62 | 64 |
| 63 ThreadProxy::~ThreadProxy() | 65 ThreadProxy::~ThreadProxy() |
| 64 { | 66 { |
| 65 TRACE_EVENT0("cc", "ThreadProxy::~ThreadProxy"); | 67 TRACE_EVENT0("cc", "ThreadProxy::~ThreadProxy"); |
| (...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 398 // interact with main thread's layer tree. | 400 // interact with main thread's layer tree. |
| 399 if (m_layerTreeHost->settings().implSidePainting) | 401 if (m_layerTreeHost->settings().implSidePainting) |
| 400 return; | 402 return; |
| 401 | 403 |
| 402 m_layerTreeHostImpl->sendManagedMemoryStats( | 404 m_layerTreeHostImpl->sendManagedMemoryStats( |
| 403 m_layerTreeHost->contentsTextureManager()->memoryVisibleBytes(), | 405 m_layerTreeHost->contentsTextureManager()->memoryVisibleBytes(), |
| 404 m_layerTreeHost->contentsTextureManager()->memoryVisibleAndNearbyBytes()
, | 406 m_layerTreeHost->contentsTextureManager()->memoryVisibleAndNearbyBytes()
, |
| 405 m_layerTreeHost->contentsTextureManager()->memoryUseBytes()); | 407 m_layerTreeHost->contentsTextureManager()->memoryUseBytes()); |
| 406 } | 408 } |
| 407 | 409 |
| 410 bool ThreadProxy::isInsideDraw() |
| 411 { |
| 412 return m_insideDraw; |
| 413 } |
| 414 |
| 408 void ThreadProxy::setNeedsRedraw() | 415 void ThreadProxy::setNeedsRedraw() |
| 409 { | 416 { |
| 410 DCHECK(isMainThread()); | 417 DCHECK(isMainThread()); |
| 411 TRACE_EVENT0("cc", "ThreadProxy::setNeedsRedraw"); | 418 TRACE_EVENT0("cc", "ThreadProxy::setNeedsRedraw"); |
| 412 Proxy::implThread()->postTask(base::Bind(&ThreadProxy::setFullRootLayerDamag
eOnImplThread, m_implThreadWeakPtr)); | 419 Proxy::implThread()->postTask(base::Bind(&ThreadProxy::setFullRootLayerDamag
eOnImplThread, m_implThreadWeakPtr)); |
| 413 Proxy::implThread()->postTask(base::Bind(&ThreadProxy::setNeedsRedrawOnImplT
hread, m_implThreadWeakPtr)); | 420 Proxy::implThread()->postTask(base::Bind(&ThreadProxy::setNeedsRedrawOnImplT
hread, m_implThreadWeakPtr)); |
| 414 } | 421 } |
| 415 | 422 |
| 416 void ThreadProxy::setDeferCommits(bool deferCommits) | 423 void ThreadProxy::setDeferCommits(bool deferCommits) |
| 417 { | 424 { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 434 return m_commitRequested; | 441 return m_commitRequested; |
| 435 } | 442 } |
| 436 | 443 |
| 437 void ThreadProxy::setNeedsRedrawOnImplThread() | 444 void ThreadProxy::setNeedsRedrawOnImplThread() |
| 438 { | 445 { |
| 439 DCHECK(isImplThread()); | 446 DCHECK(isImplThread()); |
| 440 TRACE_EVENT0("cc", "ThreadProxy::setNeedsRedrawOnImplThread"); | 447 TRACE_EVENT0("cc", "ThreadProxy::setNeedsRedrawOnImplThread"); |
| 441 m_schedulerOnImplThread->setNeedsRedraw(); | 448 m_schedulerOnImplThread->setNeedsRedraw(); |
| 442 } | 449 } |
| 443 | 450 |
| 451 void ThreadProxy::didSwapUseIncompleteTextureOnImplThread() |
| 452 { |
| 453 DCHECK(isImplThread()); |
| 454 TRACE_EVENT0("cc", "ThreadProxy::didSwapUseIncompleteTextureOnImplThread"); |
| 455 m_schedulerOnImplThread->didSwapUseIncompleteTexture(); |
| 456 } |
| 457 |
| 458 void ThreadProxy::didUploadVisibleHighResolutionTileOnImplTread() |
| 459 { |
| 460 DCHECK(isImplThread()); |
| 461 TRACE_EVENT0("cc", "ThreadProxy::didUploadVisibleHighResolutionTileOnImplTrea
d"); |
| 462 m_schedulerOnImplThread->setNeedsRedraw(); |
| 463 } |
| 464 |
| 444 void ThreadProxy::mainThreadHasStoppedFlinging() | 465 void ThreadProxy::mainThreadHasStoppedFlinging() |
| 445 { | 466 { |
| 446 if (m_inputHandlerOnImplThread) | 467 if (m_inputHandlerOnImplThread) |
| 447 m_inputHandlerOnImplThread->mainThreadHasStoppedFlinging(); | 468 m_inputHandlerOnImplThread->mainThreadHasStoppedFlinging(); |
| 448 } | 469 } |
| 449 | 470 |
| 450 void ThreadProxy::start() | 471 void ThreadProxy::start() |
| 451 { | 472 { |
| 452 DCHECK(isMainThread()); | 473 DCHECK(isMainThread()); |
| 453 DCHECK(Proxy::implThread()); | 474 DCHECK(Proxy::implThread()); |
| (...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 732 else | 753 else |
| 733 { | 754 { |
| 734 m_commitCompletionEventOnImplThread->signal(); | 755 m_commitCompletionEventOnImplThread->signal(); |
| 735 m_commitCompletionEventOnImplThread = 0; | 756 m_commitCompletionEventOnImplThread = 0; |
| 736 } | 757 } |
| 737 | 758 |
| 738 // SetVisible kicks off the next scheduler action, so this must be last. | 759 // SetVisible kicks off the next scheduler action, so this must be last. |
| 739 m_schedulerOnImplThread->setVisible(m_layerTreeHostImpl->visible()); | 760 m_schedulerOnImplThread->setVisible(m_layerTreeHostImpl->visible()); |
| 740 } | 761 } |
| 741 | 762 |
| 763 void ThreadProxy::scheduledActionCheckForCompletedTextures() |
| 764 { |
| 765 DCHECK(isImplThread()); |
| 766 TRACE_EVENT0("cc", "ThreadProxy::scheduledActionCheckForCompletedTextures"); |
| 767 m_layerTreeHostImpl->checkForCompletedTextures(); |
| 768 } |
| 769 |
| 742 void ThreadProxy::scheduledActionActivatePendingTreeIfNeeded() | 770 void ThreadProxy::scheduledActionActivatePendingTreeIfNeeded() |
| 743 { | 771 { |
| 772 DCHECK(isImplThread()); |
| 773 TRACE_EVENT0("cc", "ThreadProxy::scheduledActionActivatePendingTreeIfNeeded"
); |
| 744 m_layerTreeHostImpl->activatePendingTreeIfNeeded(); | 774 m_layerTreeHostImpl->activatePendingTreeIfNeeded(); |
| 745 } | 775 } |
| 746 | 776 |
| 747 void ThreadProxy::scheduledActionBeginContextRecreation() | 777 void ThreadProxy::scheduledActionBeginContextRecreation() |
| 748 { | 778 { |
| 749 DCHECK(isImplThread()); | 779 DCHECK(isImplThread()); |
| 750 Proxy::mainThread()->postTask(base::Bind(&ThreadProxy::beginContextRecreatio
n, m_mainThreadWeakPtr)); | 780 Proxy::mainThread()->postTask(base::Bind(&ThreadProxy::beginContextRecreatio
n, m_mainThreadWeakPtr)); |
| 751 } | 781 } |
| 752 | 782 |
| 753 ScheduledActionDrawAndSwapResult ThreadProxy::scheduledActionDrawAndSwapInternal
(bool forcedDraw) | 783 ScheduledActionDrawAndSwapResult ThreadProxy::scheduledActionDrawAndSwapInternal
(bool forcedDraw) |
| 754 { | 784 { |
| 755 TRACE_EVENT0("cc", "ThreadProxy::scheduledActionDrawAndSwap"); | 785 TRACE_EVENT0("cc", "ThreadProxy::scheduledActionDrawAndSwap"); |
| 786 |
| 787 base::AutoReset<bool> markInside(&m_insideDraw, true); |
| 788 |
| 756 ScheduledActionDrawAndSwapResult result; | 789 ScheduledActionDrawAndSwapResult result; |
| 757 result.didDraw = false; | 790 result.didDraw = false; |
| 758 result.didSwap = false; | 791 result.didSwap = false; |
| 759 DCHECK(isImplThread()); | 792 DCHECK(isImplThread()); |
| 760 DCHECK(m_layerTreeHostImpl.get()); | 793 DCHECK(m_layerTreeHostImpl.get()); |
| 761 if (!m_layerTreeHostImpl.get()) | 794 if (!m_layerTreeHostImpl.get()) |
| 762 return result; | 795 return result; |
| 763 | 796 |
| 764 DCHECK(m_layerTreeHostImpl->renderer()); | 797 DCHECK(m_layerTreeHostImpl->renderer()); |
| 765 if (!m_layerTreeHostImpl->renderer()) | 798 if (!m_layerTreeHostImpl->renderer()) |
| (...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1071 } | 1104 } |
| 1072 | 1105 |
| 1073 void ThreadProxy::capturePictureOnImplThread(CompletionEvent* completion, skia::
RefPtr<SkPicture>* picture) | 1106 void ThreadProxy::capturePictureOnImplThread(CompletionEvent* completion, skia::
RefPtr<SkPicture>* picture) |
| 1074 { | 1107 { |
| 1075 DCHECK(isImplThread()); | 1108 DCHECK(isImplThread()); |
| 1076 *picture = m_layerTreeHostImpl->capturePicture(); | 1109 *picture = m_layerTreeHostImpl->capturePicture(); |
| 1077 completion->signal(); | 1110 completion->signal(); |
| 1078 } | 1111 } |
| 1079 | 1112 |
| 1080 } // namespace cc | 1113 } // namespace cc |
| OLD | NEW |