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/bind.h" | 7 #include "base/bind.h" |
8 #include "base/debug/trace_event.h" | 8 #include "base/debug/trace_event.h" |
9 #include "cc/delay_based_time_source.h" | 9 #include "cc/delay_based_time_source.h" |
10 #include "cc/draw_quad.h" | 10 #include "cc/draw_quad.h" |
(...skipping 701 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
712 | 712 |
713 if (newImplTreeHasNoEvictedResources) { | 713 if (newImplTreeHasNoEvictedResources) { |
714 if (m_layerTreeHostImpl->contentsTexturesPurged()) | 714 if (m_layerTreeHostImpl->contentsTexturesPurged()) |
715 m_layerTreeHostImpl->resetContentsTexturesPurged(); | 715 m_layerTreeHostImpl->resetContentsTexturesPurged(); |
716 } | 716 } |
717 | 717 |
718 m_layerTreeHostImpl->commitComplete(); | 718 m_layerTreeHostImpl->commitComplete(); |
719 | 719 |
720 m_nextFrameIsNewlyCommittedFrameOnImplThread = true; | 720 m_nextFrameIsNewlyCommittedFrameOnImplThread = true; |
721 | 721 |
722 m_commitCompletionEventOnImplThread->signal(); | 722 if (m_layerTreeHost->settings().implSidePainting && m_layerTreeHost->blocksP endingCommit()) |
723 m_commitCompletionEventOnImplThread = 0; | 723 { |
724 // For some layer types in impl-side painting, the commit is held until | |
725 // the pending tree is activated. | |
726 TRACE_EVENT0("cc", "ThreadProxy::scheduledActionCommit_HoldCommit"); | |
nduca
2013/01/08 04:49:27
You can just write HoldCommitUntilActivate and use
| |
727 } | |
728 else | |
729 { | |
730 m_commitCompletionEventOnImplThread->signal(); | |
731 m_commitCompletionEventOnImplThread = 0; | |
732 } | |
724 | 733 |
725 // SetVisible kicks off the next scheduler action, so this must be last. | 734 // SetVisible kicks off the next scheduler action, so this must be last. |
726 m_schedulerOnImplThread->setVisible(m_layerTreeHostImpl->visible()); | 735 m_schedulerOnImplThread->setVisible(m_layerTreeHostImpl->visible()); |
727 } | 736 } |
728 | 737 |
729 void ThreadProxy::scheduledActionBeginContextRecreation() | 738 void ThreadProxy::scheduledActionBeginContextRecreation() |
730 { | 739 { |
731 DCHECK(isImplThread()); | 740 DCHECK(isImplThread()); |
732 Proxy::mainThread()->postTask(base::Bind(&ThreadProxy::beginContextRecreatio n, m_mainThreadWeakPtr)); | 741 Proxy::mainThread()->postTask(base::Bind(&ThreadProxy::beginContextRecreatio n, m_mainThreadWeakPtr)); |
733 } | 742 } |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
767 // prepareToDraw(), it is guarded on canDraw() as well. | 776 // prepareToDraw(), it is guarded on canDraw() as well. |
768 | 777 |
769 LayerTreeHostImpl::FrameData frame; | 778 LayerTreeHostImpl::FrameData frame; |
770 bool drawFrame = m_layerTreeHostImpl->canDraw() && (m_layerTreeHostImpl->pre pareToDraw(frame) || forcedDraw); | 779 bool drawFrame = m_layerTreeHostImpl->canDraw() && (m_layerTreeHostImpl->pre pareToDraw(frame) || forcedDraw); |
771 if (drawFrame) { | 780 if (drawFrame) { |
772 m_layerTreeHostImpl->drawLayers(frame); | 781 m_layerTreeHostImpl->drawLayers(frame); |
773 result.didDraw = true; | 782 result.didDraw = true; |
774 } | 783 } |
775 m_layerTreeHostImpl->didDrawAllLayers(frame); | 784 m_layerTreeHostImpl->didDrawAllLayers(frame); |
776 | 785 |
786 // Check for tree activation. | |
787 if (m_commitCompletionEventOnImplThread && !m_layerTreeHostImpl->pendingTree ()) | |
788 { | |
789 TRACE_EVENT0("cc", "ThreadProxy::scheduledActionDrawAndSwapInternal_Rele aseCommit"); | |
790 DCHECK(m_layerTreeHostImpl->settings().implSidePainting); | |
791 m_commitCompletionEventOnImplThread->signal(); | |
792 m_commitCompletionEventOnImplThread = 0; | |
793 } | |
794 | |
777 // Check for a pending compositeAndReadback. | 795 // Check for a pending compositeAndReadback. |
778 if (m_readbackRequestOnImplThread) { | 796 if (m_readbackRequestOnImplThread) { |
779 m_readbackRequestOnImplThread->success = false; | 797 m_readbackRequestOnImplThread->success = false; |
780 if (drawFrame) { | 798 if (drawFrame) { |
781 m_layerTreeHostImpl->readback(m_readbackRequestOnImplThread->pixels, m_readbackRequestOnImplThread->rect); | 799 m_layerTreeHostImpl->readback(m_readbackRequestOnImplThread->pixels, m_readbackRequestOnImplThread->rect); |
782 m_readbackRequestOnImplThread->success = !m_layerTreeHostImpl->isCon textLost(); | 800 m_readbackRequestOnImplThread->success = !m_layerTreeHostImpl->isCon textLost(); |
783 } | 801 } |
784 m_readbackRequestOnImplThread->completion.signal(); | 802 m_readbackRequestOnImplThread->completion.signal(); |
785 m_readbackRequestOnImplThread = 0; | 803 m_readbackRequestOnImplThread = 0; |
786 } else if (drawFrame) | 804 } else if (drawFrame) |
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1015 } | 1033 } |
1016 | 1034 |
1017 void ThreadProxy::commitPendingOnImplThreadForTesting(CommitPendingRequest* requ est) | 1035 void ThreadProxy::commitPendingOnImplThreadForTesting(CommitPendingRequest* requ est) |
1018 { | 1036 { |
1019 DCHECK(isImplThread()); | 1037 DCHECK(isImplThread()); |
1020 request->commitPending = m_schedulerOnImplThread->commitPending(); | 1038 request->commitPending = m_schedulerOnImplThread->commitPending(); |
1021 request->completion.signal(); | 1039 request->completion.signal(); |
1022 } | 1040 } |
1023 | 1041 |
1024 } // namespace cc | 1042 } // namespace cc |
OLD | NEW |