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/trees/thread_proxy.h" | 5 #include "cc/trees/thread_proxy.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/auto_reset.h" | 10 #include "base/auto_reset.h" |
(...skipping 463 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
474 void ThreadProxy::SetDeferCommits(bool defer_commits) { | 474 void ThreadProxy::SetDeferCommits(bool defer_commits) { |
475 DCHECK(IsMainThread()); | 475 DCHECK(IsMainThread()); |
476 DCHECK_NE(main().defer_commits, defer_commits); | 476 DCHECK_NE(main().defer_commits, defer_commits); |
477 main().defer_commits = defer_commits; | 477 main().defer_commits = defer_commits; |
478 | 478 |
479 if (main().defer_commits) | 479 if (main().defer_commits) |
480 TRACE_EVENT_ASYNC_BEGIN0("cc", "ThreadProxy::SetDeferCommits", this); | 480 TRACE_EVENT_ASYNC_BEGIN0("cc", "ThreadProxy::SetDeferCommits", this); |
481 else | 481 else |
482 TRACE_EVENT_ASYNC_END0("cc", "ThreadProxy::SetDeferCommits", this); | 482 TRACE_EVENT_ASYNC_END0("cc", "ThreadProxy::SetDeferCommits", this); |
483 | 483 |
484 if (!main().defer_commits && main().pending_deferred_commit) | 484 Proxy::ImplThreadTaskRunner()->PostTask( |
485 Proxy::MainThreadTaskRunner()->PostTask( | 485 FROM_HERE, |
486 FROM_HERE, | 486 base::Bind(&ThreadProxy::SetDeferCommitsOnImplThread, |
487 base::Bind(&ThreadProxy::BeginMainFrame, | 487 impl_thread_weak_ptr_, |
488 main_thread_weak_ptr_, | 488 defer_commits)); |
489 base::Passed(&main().pending_deferred_commit))); | 489 } |
490 | |
491 void ThreadProxy::SetDeferCommitsOnImplThread(bool defer_commits) const { | |
492 DCHECK(IsImplThread()); | |
493 impl().scheduler->SetDeferCommits(defer_commits); | |
490 } | 494 } |
491 | 495 |
492 bool ThreadProxy::CommitRequested() const { | 496 bool ThreadProxy::CommitRequested() const { |
493 DCHECK(IsMainThread()); | 497 DCHECK(IsMainThread()); |
494 return main().commit_requested; | 498 return main().commit_requested; |
495 } | 499 } |
496 | 500 |
497 bool ThreadProxy::BeginMainFrameRequested() const { | 501 bool ThreadProxy::BeginMainFrameRequested() const { |
498 DCHECK(IsMainThread()); | 502 DCHECK(IsMainThread()); |
499 return main().commit_request_sent_to_impl_thread; | 503 return main().commit_request_sent_to_impl_thread; |
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
729 impl().layer_tree_host_id); | 733 impl().layer_tree_host_id); |
730 impl().timing_history.DidBeginMainFrame(); | 734 impl().timing_history.DidBeginMainFrame(); |
731 } | 735 } |
732 | 736 |
733 void ThreadProxy::BeginMainFrame( | 737 void ThreadProxy::BeginMainFrame( |
734 scoped_ptr<BeginMainFrameAndCommitState> begin_main_frame_state) { | 738 scoped_ptr<BeginMainFrameAndCommitState> begin_main_frame_state) { |
735 TRACE_EVENT0("cc", "ThreadProxy::BeginMainFrame"); | 739 TRACE_EVENT0("cc", "ThreadProxy::BeginMainFrame"); |
736 TRACE_EVENT_SYNTHETIC_DELAY_BEGIN("cc.BeginMainFrame"); | 740 TRACE_EVENT_SYNTHETIC_DELAY_BEGIN("cc.BeginMainFrame"); |
737 DCHECK(IsMainThread()); | 741 DCHECK(IsMainThread()); |
738 | 742 |
739 if (main().defer_commits) { | |
740 main().pending_deferred_commit = begin_main_frame_state.Pass(); | |
741 layer_tree_host()->DidDeferCommit(); | |
742 TRACE_EVENT_INSTANT0( | |
743 "cc", "EarlyOut_DeferCommits", TRACE_EVENT_SCOPE_THREAD); | |
744 return; | |
745 } | |
746 | |
747 // If the commit finishes, LayerTreeHost will transfer its swap promises to | 743 // If the commit finishes, LayerTreeHost will transfer its swap promises to |
748 // LayerTreeImpl. The destructor of SwapPromiseChecker checks LayerTressHost's | 744 // LayerTreeImpl. The destructor of SwapPromiseChecker checks LayerTressHost's |
749 // swap promises. | 745 // swap promises. |
750 SwapPromiseChecker swap_promise_checker(layer_tree_host()); | 746 SwapPromiseChecker swap_promise_checker(layer_tree_host()); |
751 | 747 |
752 main().commit_requested = false; | 748 main().commit_requested = false; |
753 main().commit_request_sent_to_impl_thread = false; | 749 main().commit_request_sent_to_impl_thread = false; |
754 main().animate_requested = false; | 750 main().animate_requested = false; |
755 | 751 |
752 if (main().defer_commits) { | |
753 layer_tree_host()->DidDeferCommit(); | |
754 TRACE_EVENT_INSTANT0( | |
755 "cc", "EarlyOut_DeferCommits", TRACE_EVENT_SCOPE_THREAD); | |
756 bool did_handle = false; | |
757 Proxy::ImplThreadTaskRunner()->PostTask( | |
758 FROM_HERE, | |
759 base::Bind(&ThreadProxy::BeginMainFrameAbortedOnImplThread, | |
brianderson
2014/06/17 15:57:01
Would it make sense to reorganize the BeginMainFra
simonhong
2014/06/18 21:52:05
Done.
| |
760 impl_thread_weak_ptr_, | |
761 did_handle)); | |
762 return; | |
763 } | |
764 | |
756 if (!layer_tree_host()->visible()) { | 765 if (!layer_tree_host()->visible()) { |
757 TRACE_EVENT_INSTANT0("cc", "EarlyOut_NotVisible", TRACE_EVENT_SCOPE_THREAD); | 766 TRACE_EVENT_INSTANT0("cc", "EarlyOut_NotVisible", TRACE_EVENT_SCOPE_THREAD); |
758 bool did_handle = false; | 767 bool did_handle = false; |
759 Proxy::ImplThreadTaskRunner()->PostTask( | 768 Proxy::ImplThreadTaskRunner()->PostTask( |
760 FROM_HERE, | 769 FROM_HERE, |
761 base::Bind(&ThreadProxy::BeginMainFrameAbortedOnImplThread, | 770 base::Bind(&ThreadProxy::BeginMainFrameAbortedOnImplThread, |
762 impl_thread_weak_ptr_, | 771 impl_thread_weak_ptr_, |
763 did_handle)); | 772 did_handle)); |
764 return; | 773 return; |
765 } | 774 } |
(...skipping 689 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1455 | 1464 |
1456 impl().timing_history.DidActivatePendingTree(); | 1465 impl().timing_history.DidActivatePendingTree(); |
1457 } | 1466 } |
1458 | 1467 |
1459 void ThreadProxy::DidManageTiles() { | 1468 void ThreadProxy::DidManageTiles() { |
1460 DCHECK(IsImplThread()); | 1469 DCHECK(IsImplThread()); |
1461 impl().scheduler->DidManageTiles(); | 1470 impl().scheduler->DidManageTiles(); |
1462 } | 1471 } |
1463 | 1472 |
1464 } // namespace cc | 1473 } // namespace cc |
OLD | NEW |