| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "platform/scheduler/renderer/task_queue_throttler.h" | 5 #include "platform/scheduler/renderer/task_queue_throttler.h" |
| 6 | 6 |
| 7 #include <cstdint> | 7 #include <cstdint> |
| 8 | 8 |
| 9 #include "base/format_macros.h" | 9 #include "base/format_macros.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 328 "task_queue", task_queue); | 328 "task_queue", task_queue); |
| 329 | 329 |
| 330 if (!allow_throttling_) | 330 if (!allow_throttling_) |
| 331 return; | 331 return; |
| 332 | 332 |
| 333 task_queue->SetTimeDomain(time_domain_.get()); | 333 task_queue->SetTimeDomain(time_domain_.get()); |
| 334 // This blocks any tasks from |task_queue| until PumpThrottledTasks() to | 334 // This blocks any tasks from |task_queue| until PumpThrottledTasks() to |
| 335 // enforce task alignment. | 335 // enforce task alignment. |
| 336 task_queue->InsertFence(TaskQueue::InsertFencePosition::BEGINNING_OF_TIME); | 336 task_queue->InsertFence(TaskQueue::InsertFencePosition::BEGINNING_OF_TIME); |
| 337 | 337 |
| 338 if (!task_queue->IsQueueEnabled()) |
| 339 return; |
| 340 |
| 338 if (!task_queue->IsEmpty()) { | 341 if (!task_queue->IsEmpty()) { |
| 339 if (task_queue->HasPendingImmediateWork()) { | 342 if (task_queue->HasPendingImmediateWork()) { |
| 340 OnTimeDomainHasImmediateWork(task_queue); | 343 OnTimeDomainHasImmediateWork(task_queue); |
| 341 } else { | 344 } else { |
| 342 OnTimeDomainHasDelayedWork(task_queue); | 345 OnTimeDomainHasDelayedWork(task_queue); |
| 343 } | 346 } |
| 344 } | 347 } |
| 345 } | 348 } |
| 346 | 349 |
| 347 void TaskQueueThrottler::DecreaseThrottleRefCount(TaskQueue* task_queue) { | 350 void TaskQueueThrottler::DecreaseThrottleRefCount(TaskQueue* task_queue) { |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 390 void TaskQueueThrottler::OnTimeDomainHasImmediateWork(TaskQueue* queue) { | 393 void TaskQueueThrottler::OnTimeDomainHasImmediateWork(TaskQueue* queue) { |
| 391 // Forward to the main thread if called from another thread | 394 // Forward to the main thread if called from another thread |
| 392 if (!task_runner_->RunsTasksOnCurrentThread()) { | 395 if (!task_runner_->RunsTasksOnCurrentThread()) { |
| 393 task_runner_->PostTask(FROM_HERE, | 396 task_runner_->PostTask(FROM_HERE, |
| 394 base::Bind(forward_immediate_work_callback_, queue)); | 397 base::Bind(forward_immediate_work_callback_, queue)); |
| 395 return; | 398 return; |
| 396 } | 399 } |
| 397 TRACE_EVENT0(tracing_category_, | 400 TRACE_EVENT0(tracing_category_, |
| 398 "TaskQueueThrottler::OnTimeDomainHasImmediateWork"); | 401 "TaskQueueThrottler::OnTimeDomainHasImmediateWork"); |
| 399 | 402 |
| 403 // We don't expect this to get called for disabled queues, but we can't DCHECK |
| 404 // because of the above thread hop. Just bail out if the queue is disabled. |
| 405 if (!queue->IsQueueEnabled()) |
| 406 return; |
| 407 |
| 400 base::TimeTicks now = tick_clock_->NowTicks(); | 408 base::TimeTicks now = tick_clock_->NowTicks(); |
| 401 base::TimeTicks next_allowed_run_time = GetNextAllowedRunTime(now, queue); | 409 base::TimeTicks next_allowed_run_time = GetNextAllowedRunTime(now, queue); |
| 402 MaybeSchedulePumpThrottledTasks(FROM_HERE, now, next_allowed_run_time); | 410 MaybeSchedulePumpThrottledTasks(FROM_HERE, now, next_allowed_run_time); |
| 403 } | 411 } |
| 404 | 412 |
| 405 void TaskQueueThrottler::OnTimeDomainHasDelayedWork(TaskQueue* queue) { | 413 void TaskQueueThrottler::OnTimeDomainHasDelayedWork(TaskQueue* queue) { |
| 406 TRACE_EVENT0(tracing_category_, | 414 TRACE_EVENT0(tracing_category_, |
| 407 "TaskQueueThrottler::OnTimeDomainHasDelayedWork"); | 415 "TaskQueueThrottler::OnTimeDomainHasDelayedWork"); |
| 416 DCHECK(queue->IsQueueEnabled()); |
| 408 base::TimeTicks now = tick_clock_->NowTicks(); | 417 base::TimeTicks now = tick_clock_->NowTicks(); |
| 409 LazyNow lazy_now(now); | 418 LazyNow lazy_now(now); |
| 410 | 419 |
| 411 base::Optional<base::TimeTicks> next_scheduled_delayed_task = | 420 base::Optional<base::TimeTicks> next_scheduled_delayed_task = |
| 412 NextTaskRunTime(&lazy_now, queue); | 421 NextTaskRunTime(&lazy_now, queue); |
| 413 DCHECK(next_scheduled_delayed_task); | 422 DCHECK(next_scheduled_delayed_task); |
| 414 MaybeSchedulePumpThrottledTasks(FROM_HERE, now, | 423 MaybeSchedulePumpThrottledTasks(FROM_HERE, now, |
| 415 next_scheduled_delayed_task.value()); | 424 next_scheduled_delayed_task.value()); |
| 416 } | 425 } |
| 417 | 426 |
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 640 queue->SetTimeDomain(time_domain_.get()); | 649 queue->SetTimeDomain(time_domain_.get()); |
| 641 MaybeSchedulePumpQueue(FROM_HERE, lazy_now.Now(), queue, | 650 MaybeSchedulePumpQueue(FROM_HERE, lazy_now.Now(), queue, |
| 642 GetNextAllowedRunTime(lazy_now.Now(), queue)); | 651 GetNextAllowedRunTime(lazy_now.Now(), queue)); |
| 643 } | 652 } |
| 644 | 653 |
| 645 TRACE_EVENT0(tracing_category_, "TaskQueueThrottler_EnableThrottling"); | 654 TRACE_EVENT0(tracing_category_, "TaskQueueThrottler_EnableThrottling"); |
| 646 } | 655 } |
| 647 | 656 |
| 648 } // namespace scheduler | 657 } // namespace scheduler |
| 649 } // namespace blink | 658 } // namespace blink |
| OLD | NEW |