1 // Copyright 2019 The Chromium Authors. All rights reserved.
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_(sequence_manager_->CreateTaskQueue(
32           sequence_manager::TaskQueue::Spec("default_tq"))),
33       type_(type),
34       simple_task_executor_(task_runner()) {
35   sequence_manager_->SetDefaultTaskRunner(default_task_queue_->task_runner());
36   sequence_manager_->BindToMessagePump(std::move(pump));
37 }
38 
39 SingleThreadTaskExecutor::~SingleThreadTaskExecutor() = default;
40 
task_runner() const41 scoped_refptr<SingleThreadTaskRunner> SingleThreadTaskExecutor::task_runner()
42     const {
43   return default_task_queue_->task_runner();
44 }
45 
SetWorkBatchSize(size_t work_batch_size)46 void SingleThreadTaskExecutor::SetWorkBatchSize(size_t work_batch_size) {
47   sequence_manager_->SetWorkBatchSize(work_batch_size);
48 }
49 
50 }  // namespace base
51