1 // Copyright 2018 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/sequence_manager/sequence_manager.h"
6 
7 namespace base {
8 namespace sequence_manager {
9 
10 NativeWorkHandle::~NativeWorkHandle() = default;
11 
MetricRecordingSettings(double task_thread_time_sampling_rate)12 SequenceManager::MetricRecordingSettings::MetricRecordingSettings(
13     double task_thread_time_sampling_rate)
14     : task_sampling_rate_for_recording_cpu_time(
15           base::ThreadTicks::IsSupported() ? task_thread_time_sampling_rate
16                                            : 0) {}
17 
18 SequenceManager::Settings::Settings() = default;
19 
20 SequenceManager::Settings::Settings(Settings&& move_from) noexcept = default;
21 
22 SequenceManager::Settings::Builder::Builder() = default;
23 
24 SequenceManager::Settings::Builder::~Builder() = default;
25 
26 SequenceManager::Settings::Builder&
SetMessagePumpType(MessagePumpType message_loop_type_val)27 SequenceManager::Settings::Builder::SetMessagePumpType(
28     MessagePumpType message_loop_type_val) {
29   settings_.message_loop_type = message_loop_type_val;
30   return *this;
31 }
32 
33 SequenceManager::Settings::Builder&
SetRandomisedSamplingEnabled(bool randomised_sampling_enabled_val)34 SequenceManager::Settings::Builder::SetRandomisedSamplingEnabled(
35     bool randomised_sampling_enabled_val) {
36   settings_.randomised_sampling_enabled = randomised_sampling_enabled_val;
37   return *this;
38 }
39 
40 SequenceManager::Settings::Builder&
SetTickClock(const TickClock * clock_val)41 SequenceManager::Settings::Builder::SetTickClock(const TickClock* clock_val) {
42   settings_.clock = clock_val;
43   return *this;
44 }
45 
46 SequenceManager::Settings::Builder&
SetAddQueueTimeToTasks(bool add_queue_time_to_tasks_val)47 SequenceManager::Settings::Builder::SetAddQueueTimeToTasks(
48     bool add_queue_time_to_tasks_val) {
49   settings_.add_queue_time_to_tasks = add_queue_time_to_tasks_val;
50   return *this;
51 }
52 
53 #if DCHECK_IS_ON()
54 
55 SequenceManager::Settings::Builder&
SetTaskLogging(TaskLogging task_execution_logging_val)56 SequenceManager::Settings::Builder::SetTaskLogging(
57     TaskLogging task_execution_logging_val) {
58   settings_.task_execution_logging = task_execution_logging_val;
59   return *this;
60 }
61 
62 SequenceManager::Settings::Builder&
SetLogPostTask(bool log_post_task_val)63 SequenceManager::Settings::Builder::SetLogPostTask(bool log_post_task_val) {
64   settings_.log_post_task = log_post_task_val;
65   return *this;
66 }
67 
68 SequenceManager::Settings::Builder&
SetLogTaskDelayExpiry(bool log_task_delay_expiry_val)69 SequenceManager::Settings::Builder::SetLogTaskDelayExpiry(
70     bool log_task_delay_expiry_val) {
71   settings_.log_task_delay_expiry = log_task_delay_expiry_val;
72   return *this;
73 }
74 
75 SequenceManager::Settings::Builder&
SetLogRunloopQuitAndQuitWhenIdle(bool log_runloop_quit_and_quit_when_idle_val)76 SequenceManager::Settings::Builder::SetLogRunloopQuitAndQuitWhenIdle(
77     bool log_runloop_quit_and_quit_when_idle_val) {
78   settings_.log_runloop_quit_and_quit_when_idle =
79       log_runloop_quit_and_quit_when_idle_val;
80   return *this;
81 }
82 
83 SequenceManager::Settings::Builder&
SetPerPriorityCrossThreadTaskDelay(std::array<TimeDelta,TaskQueue::kQueuePriorityCount> per_priority_cross_thread_task_delay_val)84 SequenceManager::Settings::Builder::SetPerPriorityCrossThreadTaskDelay(
85     std::array<TimeDelta, TaskQueue::kQueuePriorityCount>
86         per_priority_cross_thread_task_delay_val) {
87   settings_.per_priority_cross_thread_task_delay =
88       per_priority_cross_thread_task_delay_val;
89   return *this;
90 }
91 
92 SequenceManager::Settings::Builder&
SetPerPrioritySameThreadTaskDelay(std::array<TimeDelta,TaskQueue::kQueuePriorityCount> per_priority_same_thread_task_delay_val)93 SequenceManager::Settings::Builder::SetPerPrioritySameThreadTaskDelay(
94     std::array<TimeDelta, TaskQueue::kQueuePriorityCount>
95         per_priority_same_thread_task_delay_val) {
96   settings_.per_priority_same_thread_task_delay =
97       per_priority_same_thread_task_delay_val;
98   return *this;
99 }
100 
101 SequenceManager::Settings::Builder&
SetRandomTaskSelectionSeed(int random_task_selection_seed_val)102 SequenceManager::Settings::Builder::SetRandomTaskSelectionSeed(
103     int random_task_selection_seed_val) {
104   settings_.random_task_selection_seed = random_task_selection_seed_val;
105   return *this;
106 }
107 
108 #endif  // DCHECK_IS_ON()
109 
Build()110 SequenceManager::Settings SequenceManager::Settings::Builder::Build() {
111   return std::move(settings_);
112 }
113 
114 }  // namespace sequence_manager
115 }  // namespace base
116