blob: 065986002f255301855187e5613ee82233e67098 [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "third_party/blink/renderer/platform/scheduler/worker/non_main_thread_task_queue.h"
#include "base/bind.h"
#include "third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_impl.h"
namespace blink {
namespace scheduler {
using base::sequence_manager::TaskQueue;
NonMainThreadTaskQueue::NonMainThreadTaskQueue(
std::unique_ptr<base::sequence_manager::internal::TaskQueueImpl> impl,
const TaskQueue::Spec& spec,
NonMainThreadSchedulerImpl* non_main_thread_scheduler)
: TaskQueue(std::move(impl), spec),
non_main_thread_scheduler_(non_main_thread_scheduler) {
if (GetTaskQueueImpl() && spec.should_notify_observers) {
// TaskQueueImpl may be null for tests.
GetTaskQueueImpl()->SetOnTaskCompletedHandler(base::BindRepeating(
&NonMainThreadTaskQueue::OnTaskCompleted, base::Unretained(this)));
}
}
NonMainThreadTaskQueue::~NonMainThreadTaskQueue() = default;
void NonMainThreadTaskQueue::OnTaskCompleted(
const base::sequence_manager::Task& task,
TaskQueue::TaskTiming* task_timing,
base::sequence_manager::LazyNow* lazy_now) {
// |non_main_thread_scheduler_| can be nullptr in tests.
if (non_main_thread_scheduler_) {
non_main_thread_scheduler_->OnTaskCompleted(this, task, task_timing,
lazy_now);
}
}
} // namespace scheduler
} // namespace blink