| 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/single_thread_proxy.h" | 5 #include "cc/trees/single_thread_proxy.h" |
| 6 | 6 |
| 7 #include "base/auto_reset.h" | 7 #include "base/auto_reset.h" |
| 8 #include "base/profiler/scoped_tracker.h" | 8 #include "base/profiler/scoped_tracker.h" |
| 9 #include "base/trace_event/trace_event.h" | 9 #include "base/trace_event/trace_event.h" |
| 10 #include "cc/debug/benchmark_instrumentation.h" | 10 #include "cc/debug/benchmark_instrumentation.h" |
| 11 #include "cc/debug/devtools_instrumentation.h" | 11 #include "cc/debug/devtools_instrumentation.h" |
| 12 #include "cc/output/context_provider.h" | 12 #include "cc/output/context_provider.h" |
| 13 #include "cc/output/output_surface.h" | 13 #include "cc/output/output_surface.h" |
| 14 #include "cc/quads/draw_quad.h" | 14 #include "cc/quads/draw_quad.h" |
| 15 #include "cc/resources/prioritized_resource_manager.h" | 15 #include "cc/resources/prioritized_resource_manager.h" |
| 16 #include "cc/resources/resource_update_controller.h" | |
| 17 #include "cc/scheduler/commit_earlyout_reason.h" | 16 #include "cc/scheduler/commit_earlyout_reason.h" |
| 18 #include "cc/trees/layer_tree_host.h" | 17 #include "cc/trees/layer_tree_host.h" |
| 19 #include "cc/trees/layer_tree_host_single_thread_client.h" | 18 #include "cc/trees/layer_tree_host_single_thread_client.h" |
| 20 #include "cc/trees/layer_tree_impl.h" | 19 #include "cc/trees/layer_tree_impl.h" |
| 21 #include "cc/trees/scoped_abort_remaining_swap_promises.h" | 20 #include "cc/trees/scoped_abort_remaining_swap_promises.h" |
| 22 | 21 |
| 23 namespace cc { | 22 namespace cc { |
| 24 | 23 |
| 25 scoped_ptr<Proxy> SingleThreadProxy::Create( | 24 scoped_ptr<Proxy> SingleThreadProxy::Create( |
| 26 LayerTreeHost* layer_tree_host, | 25 LayerTreeHost* layer_tree_host, |
| (...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 237 // called since that goes out to the embedder, and we want the embedder | 236 // called since that goes out to the embedder, and we want the embedder |
| 238 // to receive its callbacks before that. | 237 // to receive its callbacks before that. |
| 239 commit_blocking_task_runner_.reset(new BlockingTaskRunner::CapturePostTasks( | 238 commit_blocking_task_runner_.reset(new BlockingTaskRunner::CapturePostTasks( |
| 240 blocking_main_thread_task_runner())); | 239 blocking_main_thread_task_runner())); |
| 241 | 240 |
| 242 layer_tree_host_impl_->BeginCommit(); | 241 layer_tree_host_impl_->BeginCommit(); |
| 243 layer_tree_host_->BeginCommitOnImplThread(layer_tree_host_impl_.get()); | 242 layer_tree_host_->BeginCommitOnImplThread(layer_tree_host_impl_.get()); |
| 244 | 243 |
| 245 // TODO(robliao): Remove ScopedTracker below once https://crbug.com/461509 | 244 // TODO(robliao): Remove ScopedTracker below once https://crbug.com/461509 |
| 246 // is fixed. | 245 // is fixed. |
| 247 tracked_objects::ScopedTracker tracking_profile4( | |
| 248 FROM_HERE_WITH_EXPLICIT_FUNCTION( | |
| 249 "461509 SingleThreadProxy::DoCommit4")); | |
| 250 scoped_ptr<ResourceUpdateController> update_controller = | |
| 251 ResourceUpdateController::Create( | |
| 252 NULL, | |
| 253 MainThreadTaskRunner(), | |
| 254 queue_for_commit_.Pass(), | |
| 255 layer_tree_host_impl_->resource_provider()); | |
| 256 | |
| 257 // TODO(robliao): Remove ScopedTracker below once https://crbug.com/461509 | |
| 258 // is fixed. | |
| 259 tracked_objects::ScopedTracker tracking_profile5( | |
| 260 FROM_HERE_WITH_EXPLICIT_FUNCTION( | |
| 261 "461509 SingleThreadProxy::DoCommit5")); | |
| 262 update_controller->Finalize(); | |
| 263 | |
| 264 // TODO(robliao): Remove ScopedTracker below once https://crbug.com/461509 | |
| 265 // is fixed. | |
| 266 tracked_objects::ScopedTracker tracking_profile6( | 246 tracked_objects::ScopedTracker tracking_profile6( |
| 267 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 247 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 268 "461509 SingleThreadProxy::DoCommit6")); | 248 "461509 SingleThreadProxy::DoCommit6")); |
| 269 if (layer_tree_host_impl_->EvictedUIResourcesExist()) | 249 if (layer_tree_host_impl_->EvictedUIResourcesExist()) |
| 270 layer_tree_host_->RecreateUIResources(); | 250 layer_tree_host_->RecreateUIResources(); |
| 271 | 251 |
| 272 // TODO(robliao): Remove ScopedTracker below once https://crbug.com/461509 | 252 // TODO(robliao): Remove ScopedTracker below once https://crbug.com/461509 |
| 273 // is fixed. | 253 // is fixed. |
| 274 tracked_objects::ScopedTracker tracking_profile7( | 254 tracked_objects::ScopedTracker tracking_profile7( |
| 275 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 255 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 374 | 354 |
| 375 bool SingleThreadProxy::BeginMainFrameRequested() const { | 355 bool SingleThreadProxy::BeginMainFrameRequested() const { |
| 376 DCHECK(Proxy::IsMainThread()); | 356 DCHECK(Proxy::IsMainThread()); |
| 377 // If there is no scheduler, then there can be no pending begin frame, | 357 // If there is no scheduler, then there can be no pending begin frame, |
| 378 // as all frames are all manually initiated by the embedder of cc. | 358 // as all frames are all manually initiated by the embedder of cc. |
| 379 if (!scheduler_on_impl_thread_) | 359 if (!scheduler_on_impl_thread_) |
| 380 return false; | 360 return false; |
| 381 return commit_requested_; | 361 return commit_requested_; |
| 382 } | 362 } |
| 383 | 363 |
| 384 size_t SingleThreadProxy::MaxPartialTextureUpdates() const { | |
| 385 return std::numeric_limits<size_t>::max(); | |
| 386 } | |
| 387 | |
| 388 void SingleThreadProxy::Stop() { | 364 void SingleThreadProxy::Stop() { |
| 389 TRACE_EVENT0("cc", "SingleThreadProxy::stop"); | 365 TRACE_EVENT0("cc", "SingleThreadProxy::stop"); |
| 390 DCHECK(Proxy::IsMainThread()); | 366 DCHECK(Proxy::IsMainThread()); |
| 391 { | 367 { |
| 392 DebugScopedSetMainThreadBlocked main_thread_blocked(this); | 368 DebugScopedSetMainThreadBlocked main_thread_blocked(this); |
| 393 DebugScopedSetImplThread impl(this); | 369 DebugScopedSetImplThread impl(this); |
| 394 | 370 |
| 395 BlockingTaskRunner::CapturePostTasks blocked( | 371 BlockingTaskRunner::CapturePostTasks blocked( |
| 396 blocking_main_thread_task_runner()); | 372 blocking_main_thread_task_runner()); |
| 397 scheduler_on_impl_thread_ = nullptr; | 373 scheduler_on_impl_thread_ = nullptr; |
| (...skipping 453 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 851 DoBeginMainFrame(begin_frame_args); | 827 DoBeginMainFrame(begin_frame_args); |
| 852 } | 828 } |
| 853 | 829 |
| 854 void SingleThreadProxy::DoBeginMainFrame( | 830 void SingleThreadProxy::DoBeginMainFrame( |
| 855 const BeginFrameArgs& begin_frame_args) { | 831 const BeginFrameArgs& begin_frame_args) { |
| 856 layer_tree_host_->WillBeginMainFrame(); | 832 layer_tree_host_->WillBeginMainFrame(); |
| 857 layer_tree_host_->BeginMainFrame(begin_frame_args); | 833 layer_tree_host_->BeginMainFrame(begin_frame_args); |
| 858 layer_tree_host_->AnimateLayers(begin_frame_args.frame_time); | 834 layer_tree_host_->AnimateLayers(begin_frame_args.frame_time); |
| 859 layer_tree_host_->Layout(); | 835 layer_tree_host_->Layout(); |
| 860 | 836 |
| 861 DCHECK(!queue_for_commit_); | |
| 862 queue_for_commit_ = make_scoped_ptr(new ResourceUpdateQueue); | |
| 863 | |
| 864 // New commits requested inside UpdateLayers should be respected. | 837 // New commits requested inside UpdateLayers should be respected. |
| 865 commit_requested_ = false; | 838 commit_requested_ = false; |
| 866 | 839 |
| 867 layer_tree_host_->UpdateLayers(); | 840 layer_tree_host_->UpdateLayers(); |
| 868 | 841 |
| 869 timing_history_.DidBeginMainFrame(); | 842 timing_history_.DidBeginMainFrame(); |
| 870 | 843 |
| 871 // TODO(enne): SingleThreadProxy does not support cancelling commits yet, | 844 // TODO(enne): SingleThreadProxy does not support cancelling commits yet, |
| 872 // search for CommitEarlyOutReason::FINISHED_NO_UPDATES inside | 845 // search for CommitEarlyOutReason::FINISHED_NO_UPDATES inside |
| 873 // thread_proxy.cc | 846 // thread_proxy.cc |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 932 TRACE_EVENT0("cc", "SingleThreadProxy::ScheduledActionPrepareTiles"); | 905 TRACE_EVENT0("cc", "SingleThreadProxy::ScheduledActionPrepareTiles"); |
| 933 DCHECK(layer_tree_host_impl_->settings().impl_side_painting); | 906 DCHECK(layer_tree_host_impl_->settings().impl_side_painting); |
| 934 DebugScopedSetImplThread impl(this); | 907 DebugScopedSetImplThread impl(this); |
| 935 layer_tree_host_impl_->PrepareTiles(); | 908 layer_tree_host_impl_->PrepareTiles(); |
| 936 } | 909 } |
| 937 | 910 |
| 938 void SingleThreadProxy::ScheduledActionInvalidateOutputSurface() { | 911 void SingleThreadProxy::ScheduledActionInvalidateOutputSurface() { |
| 939 NOTREACHED(); | 912 NOTREACHED(); |
| 940 } | 913 } |
| 941 | 914 |
| 942 void SingleThreadProxy::DidAnticipatedDrawTimeChange(base::TimeTicks time) { | |
| 943 } | |
| 944 | |
| 945 base::TimeDelta SingleThreadProxy::DrawDurationEstimate() { | 915 base::TimeDelta SingleThreadProxy::DrawDurationEstimate() { |
| 946 return timing_history_.DrawDurationEstimate(); | 916 return timing_history_.DrawDurationEstimate(); |
| 947 } | 917 } |
| 948 | 918 |
| 949 base::TimeDelta SingleThreadProxy::BeginMainFrameToCommitDurationEstimate() { | 919 base::TimeDelta SingleThreadProxy::BeginMainFrameToCommitDurationEstimate() { |
| 950 return timing_history_.BeginMainFrameToCommitDurationEstimate(); | 920 return timing_history_.BeginMainFrameToCommitDurationEstimate(); |
| 951 } | 921 } |
| 952 | 922 |
| 953 base::TimeDelta SingleThreadProxy::CommitToActivateDurationEstimate() { | 923 base::TimeDelta SingleThreadProxy::CommitToActivateDurationEstimate() { |
| 954 return timing_history_.CommitToActivateDurationEstimate(); | 924 return timing_history_.CommitToActivateDurationEstimate(); |
| 955 } | 925 } |
| 956 | 926 |
| 957 void SingleThreadProxy::DidFinishImplFrame() { | 927 void SingleThreadProxy::DidFinishImplFrame() { |
| 958 layer_tree_host_impl_->DidFinishImplFrame(); | 928 layer_tree_host_impl_->DidFinishImplFrame(); |
| 959 #if DCHECK_IS_ON() | 929 #if DCHECK_IS_ON() |
| 960 DCHECK(inside_impl_frame_) | 930 DCHECK(inside_impl_frame_) |
| 961 << "DidFinishImplFrame called while not inside an impl frame!"; | 931 << "DidFinishImplFrame called while not inside an impl frame!"; |
| 962 inside_impl_frame_ = false; | 932 inside_impl_frame_ = false; |
| 963 #endif | 933 #endif |
| 964 } | 934 } |
| 965 | 935 |
| 966 void SingleThreadProxy::SendBeginFramesToChildren(const BeginFrameArgs& args) { | 936 void SingleThreadProxy::SendBeginFramesToChildren(const BeginFrameArgs& args) { |
| 967 layer_tree_host_->SendBeginFramesToChildren(args); | 937 layer_tree_host_->SendBeginFramesToChildren(args); |
| 968 } | 938 } |
| 969 | 939 |
| 970 } // namespace cc | 940 } // namespace cc |
| OLD | NEW |