xref: /aosp_15_r20/external/cronet/base/task/single_thread_task_executor.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2019 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "base/task/single_thread_task_executor.h"
6 
7 #include "base/message_loop/message_pump.h"
8 #include "base/message_loop/message_pump_type.h"
9 #include "base/task/sequence_manager/sequence_manager.h"
10 #include "base/task/sequence_manager/sequence_manager_impl.h"
11 #include "build/build_config.h"
12 
13 namespace base {
14 
SingleThreadTaskExecutor(MessagePumpType type)15 SingleThreadTaskExecutor::SingleThreadTaskExecutor(MessagePumpType type)
16     : SingleThreadTaskExecutor(type, MessagePump::Create(type)) {
17   DCHECK_NE(type, MessagePumpType::CUSTOM);
18 }
19 
SingleThreadTaskExecutor(std::unique_ptr<MessagePump> pump)20 SingleThreadTaskExecutor::SingleThreadTaskExecutor(
21     std::unique_ptr<MessagePump> pump)
22     : SingleThreadTaskExecutor(MessagePumpType::CUSTOM, std::move(pump)) {}
23 
SingleThreadTaskExecutor(MessagePumpType type,std::unique_ptr<MessagePump> pump)24 SingleThreadTaskExecutor::SingleThreadTaskExecutor(
25     MessagePumpType type,
26     std::unique_ptr<MessagePump> pump)
27     : sequence_manager_(sequence_manager::CreateUnboundSequenceManager(
28           sequence_manager::SequenceManager::Settings::Builder()
29               .SetMessagePumpType(type)
30               .Build())),
31       default_task_queue_(
32           sequence_manager_->CreateTaskQueue(sequence_manager::TaskQueue::Spec(
33               sequence_manager::QueueName::DEFAULT_TQ))),
34       type_(type) {
35   sequence_manager_->SetDefaultTaskRunner(task_runner());
36   sequence_manager_->BindToMessagePump(std::move(pump));
37 }
38 
39 SingleThreadTaskExecutor::~SingleThreadTaskExecutor() = default;
40 
41 const scoped_refptr<SingleThreadTaskRunner>&
task_runner() const42 SingleThreadTaskExecutor::task_runner() const {
43   return default_task_queue_->task_runner();
44 }
45 
SetWorkBatchSize(int work_batch_size)46 void SingleThreadTaskExecutor::SetWorkBatchSize(int work_batch_size) {
47   sequence_manager_->SetWorkBatchSize(work_batch_size);
48 }
49 
50 }  // namespace base
51