diff options
Diffstat (limited to 'chromium/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_task_queue.cc')
-rw-r--r-- | chromium/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_task_queue.cc | 47 |
1 files changed, 27 insertions, 20 deletions
diff --git a/chromium/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_task_queue.cc b/chromium/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_task_queue.cc index eed8a8c649e..f45ef3bc99a 100644 --- a/chromium/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_task_queue.cc +++ b/chromium/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_task_queue.cc @@ -115,7 +115,14 @@ MainThreadTaskQueue::MainThreadTaskQueue( agent_group_scheduler_(params.agent_group_scheduler), frame_scheduler_(params.frame_scheduler) { task_queue_ = base::MakeRefCounted<TaskQueue>(std::move(impl), spec); + // Throttling needs |should_notify_observers| to get task timing. + DCHECK(!params.queue_traits.can_be_throttled || spec.should_notify_observers) + << "Throttled queue is not supported with |!should_notify_observers|"; if (task_queue_->HasImpl() && spec.should_notify_observers) { + if (params.queue_traits.can_be_throttled) { + throttler_.emplace(task_queue_.get(), + main_thread_scheduler_->GetTickClock()); + } // TaskQueueImpl may be null for tests. // TODO(scheduler-dev): Consider mapping directly to // MainThreadSchedulerImpl::OnTaskStarted/Completed. At the moment this @@ -128,7 +135,9 @@ MainThreadTaskQueue::MainThreadTaskQueue( } } -MainThreadTaskQueue::~MainThreadTaskQueue() = default; +MainThreadTaskQueue::~MainThreadTaskQueue() { + DCHECK(!wake_up_budget_pool_); +} void MainThreadTaskQueue::OnTaskStarted( const base::sequence_manager::Task& task, @@ -149,8 +158,10 @@ void MainThreadTaskQueue::OnTaskCompleted( void MainThreadTaskQueue::OnTaskRunTimeReported( TaskQueue::TaskTiming* task_timing) { - main_thread_scheduler_->task_queue_throttler()->OnTaskRunTimeReported( - task_queue_.get(), task_timing->start_time(), task_timing->end_time()); + if (throttler_) { + throttler_->OnTaskRunTimeReported(task_timing->start_time(), + task_timing->end_time()); + } } void MainThreadTaskQueue::DetachFromMainThreadScheduler() { @@ -191,6 +202,7 @@ void MainThreadTaskQueue::DetachOnIPCTaskPostedWhileInBackForwardCache() { void MainThreadTaskQueue::ShutdownTaskQueue() { ClearReferencesToSchedulers(); + throttler_.reset(); task_queue_->ShutdownTaskQueue(); } @@ -212,11 +224,6 @@ WebAgentGroupScheduler* MainThreadTaskQueue::GetAgentGroupScheduler() { void MainThreadTaskQueue::ClearReferencesToSchedulers() { if (main_thread_scheduler_) { main_thread_scheduler_->OnShutdownTaskQueue(this); - - if (main_thread_scheduler_->task_queue_throttler()) { - main_thread_scheduler_->task_queue_throttler()->ShutdownTaskQueue( - task_queue_.get()); - } } main_thread_scheduler_ = nullptr; agent_group_scheduler_ = nullptr; @@ -251,6 +258,10 @@ void MainThreadTaskQueue::SetWebSchedulingPriority( frame_scheduler_->OnWebSchedulingTaskQueuePriorityChanged(this); } +void MainThreadTaskQueue::OnWebSchedulingTaskQueueDestroyed() { + frame_scheduler_->OnWebSchedulingTaskQueueDestroyed(this); +} + absl::optional<WebSchedulingPriority> MainThreadTaskQueue::web_scheduling_priority() const { return web_scheduling_priority_; @@ -258,8 +269,7 @@ MainThreadTaskQueue::web_scheduling_priority() const { bool MainThreadTaskQueue::IsThrottled() const { if (main_thread_scheduler_) { - return main_thread_scheduler_->task_queue_throttler()->IsThrottled( - task_queue_.get()); + return throttler_.has_value() && throttler_->IsThrottled(); } else { // When the frame detaches the task queue is removed from the throttler. return false; @@ -268,32 +278,29 @@ bool MainThreadTaskQueue::IsThrottled() const { MainThreadTaskQueue::ThrottleHandle MainThreadTaskQueue::Throttle() { DCHECK(CanBeThrottled()); - return ThrottleHandle( - task_queue_.get()->AsWeakPtr(), - main_thread_scheduler_->task_queue_throttler()->AsWeakPtr()); + return ThrottleHandle(AsWeakPtr()); } void MainThreadTaskQueue::AddToBudgetPool(base::TimeTicks now, BudgetPool* pool) { - pool->AddQueue(now, task_queue_.get()); + pool->AddThrottler(now, &throttler_.value()); } void MainThreadTaskQueue::RemoveFromBudgetPool(base::TimeTicks now, BudgetPool* pool) { - pool->RemoveQueue(now, task_queue_.get()); + pool->RemoveThrottler(now, &throttler_.value()); } -void MainThreadTaskQueue::SetImmediateWakeUpForTest() { - if (main_thread_scheduler_) { - main_thread_scheduler_->task_queue_throttler()->OnQueueNextWakeUpChanged( - task_queue_.get(), base::TimeTicks()); - } +void MainThreadTaskQueue::SetWakeUpBudgetPool( + WakeUpBudgetPool* wake_up_budget_pool) { + wake_up_budget_pool_ = wake_up_budget_pool; } void MainThreadTaskQueue::WriteIntoTrace(perfetto::TracedValue context) const { auto dict = std::move(context).WriteDictionary(); dict.Add("type", queue_type_); dict.Add("traits", queue_traits_); + dict.Add("throttler", throttler_); } void MainThreadTaskQueue::QueueTraits::WriteIntoTrace( |