blob: f6b83f880830574c2f2cda34b2f231d37676dbf0 [file] [log] [blame]
Avi Drissman4e1b7bc32022-09-15 14:03:501// Copyright 2019 The Chromium Authors
Carlos Caballeroe840fc32019-05-27 14:16:372// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Gabriel Charette748577aa2019-08-12 12:53:555#include "content/browser/scheduler/browser_io_thread_delegate.h"
Carlos Caballeroe840fc32019-05-27 14:16:376
Keishi Hattori0e45c022021-11-27 09:25:527#include "base/memory/raw_ptr.h"
Carlos Caballero92aab29e2019-09-24 15:41:118#include "base/message_loop/message_pump.h"
Chris Sharp7840c582019-08-02 15:45:329#include "base/message_loop/message_pump_type.h"
Carlos Caballeroe840fc32019-05-27 14:16:3710#include "base/task/sequence_manager/sequence_manager.h"
11#include "base/task/sequence_manager/task_queue.h"
Sean Mahere672a662023-01-09 21:42:2812#include "base/task/single_thread_task_runner.h"
Scott Haseley72d89b02023-02-17 03:29:2513#include "content/browser/scheduler/browser_task_priority.h"
Carlos Caballeroe840fc32019-05-27 14:16:3714#include "content/public/browser/browser_thread.h"
15
16namespace content {
17
18using ::base::sequence_manager::CreateUnboundSequenceManager;
19using ::base::sequence_manager::SequenceManager;
20using ::base::sequence_manager::TaskQueue;
21
Alex Clarkebbf891dc2019-10-09 14:18:0222BrowserIOThreadDelegate::BrowserIOThreadDelegate()
23 : owned_sequence_manager_(CreateUnboundSequenceManager(
Carlos Caballeroe840fc32019-05-27 14:16:3724 SequenceManager::Settings::Builder()
Chris Sharp7840c582019-08-02 15:45:3225 .SetMessagePumpType(base::MessagePumpType::IO)
Scott Haseley72d89b02023-02-17 03:29:2526 .SetPrioritySettings(
27 internal::CreateBrowserTaskPrioritySettings())
Karolina Soltysb083f932019-09-25 16:18:0628 .Build())),
Alex Clarkebbf891dc2019-10-09 14:18:0229 sequence_manager_(owned_sequence_manager_.get()) {
30 Init();
Carlos Caballeroe840fc32019-05-27 14:16:3731}
32
Gabriel Charette748577aa2019-08-12 12:53:5533BrowserIOThreadDelegate::BrowserIOThreadDelegate(
Carlos Caballeroe840fc32019-05-27 14:16:3734 SequenceManager* sequence_manager)
Michael Thiessen7f5dfb92023-03-30 16:50:2135 : sequence_manager_(sequence_manager) {
Alex Clarkebbf891dc2019-10-09 14:18:0236 Init();
Carlos Caballeroe840fc32019-05-27 14:16:3737}
38
Alex Clarkebbf891dc2019-10-09 14:18:0239void BrowserIOThreadDelegate::Init() {
Etienne Pierre-doray40545ac2021-11-11 13:34:2840 task_queues_ =
41 std::make_unique<BrowserTaskQueues>(BrowserThread::IO, sequence_manager_);
Alex Clarke49854cc2019-06-27 08:25:4942 default_task_runner_ = task_queues_->GetHandle()->GetDefaultTaskRunner();
Carlos Caballeroe840fc32019-05-27 14:16:3743}
44
45scoped_refptr<base::SingleThreadTaskRunner>
Gabriel Charette748577aa2019-08-12 12:53:5546BrowserIOThreadDelegate::GetDefaultTaskRunner() {
Carlos Caballeroe840fc32019-05-27 14:16:3747 return default_task_runner_;
48}
49
Michael Thiessen7f5dfb92023-03-30 16:50:2150BrowserIOThreadDelegate::~BrowserIOThreadDelegate() = default;
Carlos Caballeroe840fc32019-05-27 14:16:3751
Etienne Pierre-dorayef5dcca2023-07-11 16:46:2752void BrowserIOThreadDelegate::BindToCurrentThread() {
Carlos Caballeroe840fc32019-05-27 14:16:3753 DCHECK(sequence_manager_);
54 sequence_manager_->BindToMessagePump(
Chris Sharp7840c582019-08-02 15:45:3255 base::MessagePump::Create(base::MessagePumpType::IO));
Carlos Caballeroe840fc32019-05-27 14:16:3756 sequence_manager_->SetDefaultTaskRunner(GetDefaultTaskRunner());
Alex Clarke1b5487d2019-11-18 10:40:1157 sequence_manager_->EnableCrashKeys("io_scheduler_async_stack");
Carlos Caballeroe840fc32019-05-27 14:16:3758}
59
Jiahe Zhang93e2eda2025-07-16 03:32:3460void BrowserIOThreadDelegate::AddTaskObserver(base::TaskObserver* observer) {
61 DCHECK(sequence_manager_);
62 sequence_manager_->AddTaskObserver(observer);
63}
64
Carlos Caballeroe840fc32019-05-27 14:16:3765} // namespace content