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 |