Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(22)

Side by Side Diff: trunk/src/cc/trees/thread_proxy.cc

Issue 141833002: Revert 245445 "Unifies LayerTreeHost::SetNeedsUpdateLayers and S..." (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 <string> 7 #include <string>
8 8
9 #include "base/auto_reset.h" 9 #include "base/auto_reset.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 LayerTreeHost* layer_tree_host, 74 LayerTreeHost* layer_tree_host,
75 scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner) { 75 scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner) {
76 return make_scoped_ptr( 76 return make_scoped_ptr(
77 new ThreadProxy(layer_tree_host, impl_task_runner)).PassAs<Proxy>(); 77 new ThreadProxy(layer_tree_host, impl_task_runner)).PassAs<Proxy>();
78 } 78 }
79 79
80 ThreadProxy::ThreadProxy( 80 ThreadProxy::ThreadProxy(
81 LayerTreeHost* layer_tree_host, 81 LayerTreeHost* layer_tree_host,
82 scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner) 82 scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner)
83 : Proxy(impl_task_runner), 83 : Proxy(impl_task_runner),
84 update_requested_(false), 84 animate_requested_(false),
85 commit_requested_(false), 85 commit_requested_(false),
86 commit_request_sent_to_impl_thread_(false), 86 commit_request_sent_to_impl_thread_(false),
87 created_offscreen_context_provider_(false), 87 created_offscreen_context_provider_(false),
88 layer_tree_host_unsafe_(layer_tree_host), 88 layer_tree_host_unsafe_(layer_tree_host),
89 contents_texture_manager_unsafe_(NULL), 89 contents_texture_manager_unsafe_(NULL),
90 started_(false), 90 started_(false),
91 textures_acquired_(true), 91 textures_acquired_(true),
92 in_composite_and_readback_(false), 92 in_composite_and_readback_(false),
93 manage_tiles_pending_(false), 93 manage_tiles_pending_(false),
94 commit_waits_for_activation_(false), 94 commit_waits_for_activation_(false),
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 base::Bind(&ThreadProxy::SetNeedsCommitOnImplThread, 343 base::Bind(&ThreadProxy::SetNeedsCommitOnImplThread,
344 impl_thread_weak_ptr_)); 344 impl_thread_weak_ptr_));
345 } 345 }
346 346
347 const RendererCapabilities& ThreadProxy::GetRendererCapabilities() const { 347 const RendererCapabilities& ThreadProxy::GetRendererCapabilities() const {
348 DCHECK(IsMainThread()); 348 DCHECK(IsMainThread());
349 DCHECK(!layer_tree_host()->output_surface_lost()); 349 DCHECK(!layer_tree_host()->output_surface_lost());
350 return renderer_capabilities_main_thread_copy_; 350 return renderer_capabilities_main_thread_copy_;
351 } 351 }
352 352
353 void ThreadProxy::SetNeedsAnimate() {
354 DCHECK(IsMainThread());
355 if (animate_requested_)
356 return;
357
358 TRACE_EVENT0("cc", "ThreadProxy::SetNeedsAnimate");
359 animate_requested_ = true;
360 can_cancel_commit_ = false;
361 SendCommitRequestToImplThreadIfNeeded();
362 }
363
353 void ThreadProxy::SetNeedsUpdateLayers() { 364 void ThreadProxy::SetNeedsUpdateLayers() {
354 DCHECK(IsMainThread()); 365 DCHECK(IsMainThread());
355 366
356 if (update_requested_) 367 if (commit_request_sent_to_impl_thread_)
357 return; 368 return;
358 TRACE_EVENT0("cc", "ThreadProxy::SetNeedsUpdateLayers"); 369 TRACE_EVENT0("cc", "ThreadProxy::SetNeedsUpdateLayers");
359 370
360 update_requested_ = true;
361 SendCommitRequestToImplThreadIfNeeded(); 371 SendCommitRequestToImplThreadIfNeeded();
362 } 372 }
363 373
364 void ThreadProxy::SetNeedsCommit() { 374 void ThreadProxy::SetNeedsCommit() {
365 DCHECK(IsMainThread()); 375 DCHECK(IsMainThread());
366 // Unconditionally set here to handle SetNeedsCommit calls during a commit. 376 // Unconditionally set here to handle SetNeedsCommit calls during a commit.
367 can_cancel_commit_ = false; 377 can_cancel_commit_ = false;
368 378
369 if (commit_requested_) 379 if (commit_requested_)
370 return; 380 return;
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after
768 SwapPromiseChecker swap_promise_checker(layer_tree_host()); 778 SwapPromiseChecker swap_promise_checker(layer_tree_host());
769 779
770 // Do not notify the impl thread of commit requests that occur during 780 // Do not notify the impl thread of commit requests that occur during
771 // the apply/animate/layout part of the BeginMainFrameAndCommit process since 781 // the apply/animate/layout part of the BeginMainFrameAndCommit process since
772 // those commit requests will get painted immediately. Once we have done 782 // those commit requests will get painted immediately. Once we have done
773 // the paint, commit_requested_ will be set to false to allow new commit 783 // the paint, commit_requested_ will be set to false to allow new commit
774 // requests to be scheduled. 784 // requests to be scheduled.
775 commit_requested_ = true; 785 commit_requested_ = true;
776 commit_request_sent_to_impl_thread_ = true; 786 commit_request_sent_to_impl_thread_ = true;
777 787
778 // On the other hand, the update_requested_ flag needs to be cleared 788 // On the other hand, the AnimationRequested flag needs to be cleared
779 // here so that any update requests generated by the apply or animate 789 // here so that any animation requests generated by the apply or animate
780 // callbacks will trigger another frame. 790 // callbacks will trigger another frame.
781 update_requested_ = false; 791 animate_requested_ = false;
782 792
783 if (!in_composite_and_readback_ && !layer_tree_host()->visible()) { 793 if (!in_composite_and_readback_ && !layer_tree_host()->visible()) {
784 commit_requested_ = false; 794 commit_requested_ = false;
785 commit_request_sent_to_impl_thread_ = false; 795 commit_request_sent_to_impl_thread_ = false;
786 796
787 TRACE_EVENT0("cc", "EarlyOut_NotVisible"); 797 TRACE_EVENT0("cc", "EarlyOut_NotVisible");
788 bool did_handle = false; 798 bool did_handle = false;
789 Proxy::ImplThreadTaskRunner()->PostTask( 799 Proxy::ImplThreadTaskRunner()->PostTask(
790 FROM_HERE, 800 FROM_HERE,
791 base::Bind(&ThreadProxy::BeginMainFrameAbortedOnImplThread, 801 base::Bind(&ThreadProxy::BeginMainFrameAbortedOnImplThread,
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
834 TRACE_EVENT_SYNTHETIC_DELAY_END("cc.BeginMainFrame"); 844 TRACE_EVENT_SYNTHETIC_DELAY_END("cc.BeginMainFrame");
835 845
836 // Clear the commit flag after updating animations and layout here --- objects 846 // Clear the commit flag after updating animations and layout here --- objects
837 // that only layout when painted will trigger another SetNeedsCommit inside 847 // that only layout when painted will trigger another SetNeedsCommit inside
838 // UpdateLayers. 848 // UpdateLayers.
839 commit_requested_ = false; 849 commit_requested_ = false;
840 commit_request_sent_to_impl_thread_ = false; 850 commit_request_sent_to_impl_thread_ = false;
841 bool can_cancel_this_commit = 851 bool can_cancel_this_commit =
842 can_cancel_commit_ && 852 can_cancel_commit_ &&
843 !in_composite_and_readback_ && 853 !in_composite_and_readback_ &&
844 !evicted_ui_resources && 854 !evicted_ui_resources;
845 !layer_tree_host()->next_commit_forces_redraw();
846 can_cancel_commit_ = true; 855 can_cancel_commit_ = true;
847 856
848 scoped_ptr<ResourceUpdateQueue> queue = 857 scoped_ptr<ResourceUpdateQueue> queue =
849 make_scoped_ptr(new ResourceUpdateQueue); 858 make_scoped_ptr(new ResourceUpdateQueue);
850 859
851 bool updated = layer_tree_host()->UpdateLayers(queue.get()); 860 bool updated = layer_tree_host()->UpdateLayers(queue.get());
852 861
853 // Once single buffered layers are committed, they cannot be modified until 862 // Once single buffered layers are committed, they cannot be modified until
854 // they are drawn by the impl thread. 863 // they are drawn by the impl thread.
855 textures_acquired_ = false; 864 textures_acquired_ = false;
856 865
857 layer_tree_host()->WillCommit(); 866 layer_tree_host()->WillCommit();
858 867
859 // Before calling animate, we set update_requested_ to false. If it is true
860 // now, it means SetNeedsUpdateLayers was called again. Depending on during
861 // which phase of the commit SetNeedsUpdateLayers was called,
862 // commit_request_sent_to_impl_thread_ may be already cleared or not.
863 // We call SetNeedsUpdateLayers here to make sure a commit always gets posted.
864 if (update_requested_) {
865 // Forces SetNeedsUpdateLayers to consider posting a commit task.
866 update_requested_ = false;
867 SetNeedsUpdateLayers();
868 }
869
870 if (!updated && can_cancel_this_commit) { 868 if (!updated && can_cancel_this_commit) {
871 TRACE_EVENT0("cc", "EarlyOut_NoUpdates"); 869 TRACE_EVENT0("cc", "EarlyOut_NoUpdates");
872 bool did_handle = true; 870 bool did_handle = true;
873 Proxy::ImplThreadTaskRunner()->PostTask( 871 Proxy::ImplThreadTaskRunner()->PostTask(
874 FROM_HERE, 872 FROM_HERE,
875 base::Bind(&ThreadProxy::BeginMainFrameAbortedOnImplThread, 873 base::Bind(&ThreadProxy::BeginMainFrameAbortedOnImplThread,
876 impl_thread_weak_ptr_, 874 impl_thread_weak_ptr_,
877 did_handle)); 875 did_handle));
878 876
879 // Although the commit is internally aborted, this is because it has been 877 // Although the commit is internally aborted, this is because it has been
880 // detected to be a no-op. From the perspective of an embedder, this commit 878 // detected to be a no-op. From the perspective of an embedder, this commit
881 // went through, and input should no longer be throttled, etc. 879 // went through, and input should no longer be throttled, etc.
882 layer_tree_host()->CommitComplete(); 880 layer_tree_host()->CommitComplete();
883 layer_tree_host()->DidBeginMainFrame(); 881 layer_tree_host()->DidBeginMainFrame();
884 return; 882 return;
885 } 883 }
886 884
885 // Before calling animate, we set animate_requested_ to false. If it is true
886 // now, it means SetNeedAnimate was called again, but during a state when
887 // commit_request_sent_to_impl_thread_ = true. We need to force that call to
888 // happen again now so that the commit request is sent to the impl thread.
889 if (animate_requested_) {
890 // Forces SetNeedsAnimate to consider posting a commit task.
891 animate_requested_ = false;
892 SetNeedsAnimate();
893 }
894
887 scoped_refptr<ContextProvider> offscreen_context_provider; 895 scoped_refptr<ContextProvider> offscreen_context_provider;
888 if (renderer_capabilities_main_thread_copy_.using_offscreen_context3d && 896 if (renderer_capabilities_main_thread_copy_.using_offscreen_context3d &&
889 layer_tree_host()->needs_offscreen_context()) { 897 layer_tree_host()->needs_offscreen_context()) {
890 offscreen_context_provider = 898 offscreen_context_provider =
891 layer_tree_host()->client()->OffscreenContextProvider(); 899 layer_tree_host()->client()->OffscreenContextProvider();
892 if (offscreen_context_provider.get()) 900 if (offscreen_context_provider.get())
893 created_offscreen_context_provider_ = true; 901 created_offscreen_context_provider_ = true;
894 } 902 }
895 903
896 // Notify the impl thread that the main thread is ready to commit. This will 904 // Notify the impl thread that the main thread is ready to commit. This will
(...skipping 744 matching lines...) Expand 10 before | Expand all | Expand 10 after
1641 commit_to_activate_duration_history_.InsertSample( 1649 commit_to_activate_duration_history_.InsertSample(
1642 base::TimeTicks::HighResNow() - commit_complete_time_); 1650 base::TimeTicks::HighResNow() - commit_complete_time_);
1643 } 1651 }
1644 1652
1645 void ThreadProxy::DidManageTiles() { 1653 void ThreadProxy::DidManageTiles() {
1646 DCHECK(IsImplThread()); 1654 DCHECK(IsImplThread());
1647 scheduler_on_impl_thread_->DidManageTiles(); 1655 scheduler_on_impl_thread_->DidManageTiles();
1648 } 1656 }
1649 1657
1650 } // namespace cc 1658 } // namespace cc
OLDNEW
« no previous file with comments | « trunk/src/cc/trees/thread_proxy.h ('k') | trunk/src/content/renderer/gpu/render_widget_compositor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698