diff options
author | alexclarke <alexclarke@chromium.org> | 2015-11-27 02:08:42 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-11-27 10:09:37 +0000 |
commit | ec5adec0a9879a31866e98c65ddc7b506b9f49c3 (patch) | |
tree | 349ebd7c25c796c03a562467553caf22c2e17724 /components/scheduler/renderer/renderer_scheduler_impl.cc | |
parent | 73be357897b5496f6bfa8d5ddefbccfca24b7c62 (diff) | |
download | chromium_src-ec5adec0a9879a31866e98c65ddc7b506b9f49c3.zip chromium_src-ec5adec0a9879a31866e98c65ddc7b506b9f49c3.tar.gz chromium_src-ec5adec0a9879a31866e98c65ddc7b506b9f49c3.tar.bz2 |
Move throttling of background timers into the renderer scheduler
Not only does this simplify the code, it's more efficent since
previously setting the timer alignment resulted in mass cancellation
and reposting of timers.
BUG=510398, 546953, 560402
Review URL: https://codereview.chromium.org/1441073006
Cr-Commit-Position: refs/heads/master@{#361971}
Diffstat (limited to 'components/scheduler/renderer/renderer_scheduler_impl.cc')
-rw-r--r-- | components/scheduler/renderer/renderer_scheduler_impl.cc | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/components/scheduler/renderer/renderer_scheduler_impl.cc b/components/scheduler/renderer/renderer_scheduler_impl.cc index 0ee5481d..0ef81cd 100644 --- a/components/scheduler/renderer/renderer_scheduler_impl.cc +++ b/components/scheduler/renderer/renderer_scheduler_impl.cc @@ -12,6 +12,7 @@ #include "cc/output/begin_frame_args.h" #include "components/scheduler/base/task_queue_impl.h" #include "components/scheduler/base/task_queue_selector.h" +#include "components/scheduler/base/virtual_time_domain.h" #include "components/scheduler/child/scheduler_tqm_delegate.h" #include "components/scheduler/renderer/webthread_impl_for_renderer_scheduler.h" @@ -41,6 +42,7 @@ RendererSchedulerImpl::RendererSchedulerImpl( TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), "RendererSchedulerIdlePeriod", base::TimeDelta()), + throttling_helper_(this, "renderer.scheduler"), render_widget_scheduler_signals_(this), control_task_runner_(helper_.ControlTaskRunner()), compositor_task_runner_( @@ -176,6 +178,11 @@ scoped_refptr<TaskQueue> RendererSchedulerImpl::TimerTaskRunner() { return default_timer_task_runner_; } +scoped_refptr<TaskQueue> RendererSchedulerImpl::ControlTaskRunner() { + helper_.CheckOnValidThread(); + return helper_.ControlTaskRunner(); +} + scoped_refptr<TaskQueue> RendererSchedulerImpl::NewLoadingTaskRunner( const char* name) { helper_.CheckOnValidThread(); @@ -535,7 +542,7 @@ bool RendererSchedulerImpl::ShouldYieldForHighPriorityWork() { case UseCase::MAIN_THREAD_GESTURE: case UseCase::SYNCHRONIZED_GESTURE: - return !compositor_task_runner_->IsQueueEmpty() || + return compositor_task_runner_->HasPendingImmediateTask() || MainThreadOnly().touchstart_expected_soon; case UseCase::TOUCHSTART: @@ -1046,4 +1053,16 @@ double RendererSchedulerImpl::MonotonicallyIncreasingTimeSeconds() const { static_cast<double>(base::Time::kMicrosecondsPerSecond); } +void RendererSchedulerImpl::RegisterTimeDomain(TimeDomain* time_domain) { + helper_.RegisterTimeDomain(time_domain); +} + +void RendererSchedulerImpl::UnregisterTimeDomain(TimeDomain* time_domain) { + helper_.UnregisterTimeDomain(time_domain); +} + +base::TickClock* RendererSchedulerImpl::tick_clock() const { + return helper_.scheduler_tqm_delegate().get(); +} + } // namespace scheduler |