• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2016 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_scheduler/task_traits.h"
6 
7 #include <stddef.h>
8 
9 #include <ostream>
10 
11 #include "base/logging.h"
12 #include "base/task_scheduler/scoped_set_task_priority_for_current_thread.h"
13 
14 namespace base {
15 
16 // Do not rely on defaults hard-coded below beyond the guarantees described in
17 // the header; anything else is subject to change. Tasks should explicitly
18 // request defaults if the behavior is critical to the task.
TaskTraits()19 TaskTraits::TaskTraits()
20     : may_block_(false),
21       with_base_sync_primitives_(false),
22       priority_(internal::GetTaskPriorityForCurrentThread()),
23       shutdown_behavior_(TaskShutdownBehavior::SKIP_ON_SHUTDOWN) {}
24 
25 TaskTraits::~TaskTraits() = default;
26 
MayBlock()27 TaskTraits& TaskTraits::MayBlock() {
28   may_block_ = true;
29   return *this;
30 }
31 
WithBaseSyncPrimitives()32 TaskTraits& TaskTraits::WithBaseSyncPrimitives() {
33   with_base_sync_primitives_ = true;
34   return *this;
35 }
36 
WithPriority(TaskPriority priority)37 TaskTraits& TaskTraits::WithPriority(TaskPriority priority) {
38   priority_ = priority;
39   return *this;
40 }
41 
WithShutdownBehavior(TaskShutdownBehavior shutdown_behavior)42 TaskTraits& TaskTraits::WithShutdownBehavior(
43     TaskShutdownBehavior shutdown_behavior) {
44   shutdown_behavior_ = shutdown_behavior;
45   return *this;
46 }
47 
TaskPriorityToString(TaskPriority task_priority)48 const char* TaskPriorityToString(TaskPriority task_priority) {
49   switch (task_priority) {
50     case TaskPriority::BACKGROUND:
51       return "BACKGROUND";
52     case TaskPriority::USER_VISIBLE:
53       return "USER_VISIBLE";
54     case TaskPriority::USER_BLOCKING:
55       return "USER_BLOCKING";
56   }
57   NOTREACHED();
58   return "";
59 }
60 
TaskShutdownBehaviorToString(TaskShutdownBehavior shutdown_behavior)61 const char* TaskShutdownBehaviorToString(
62     TaskShutdownBehavior shutdown_behavior) {
63   switch (shutdown_behavior) {
64     case TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN:
65       return "CONTINUE_ON_SHUTDOWN";
66     case TaskShutdownBehavior::SKIP_ON_SHUTDOWN:
67       return "SKIP_ON_SHUTDOWN";
68     case TaskShutdownBehavior::BLOCK_SHUTDOWN:
69       return "BLOCK_SHUTDOWN";
70   }
71   NOTREACHED();
72   return "";
73 }
74 
operator <<(std::ostream & os,const TaskPriority & task_priority)75 std::ostream& operator<<(std::ostream& os, const TaskPriority& task_priority) {
76   os << TaskPriorityToString(task_priority);
77   return os;
78 }
79 
operator <<(std::ostream & os,const TaskShutdownBehavior & shutdown_behavior)80 std::ostream& operator<<(std::ostream& os,
81                          const TaskShutdownBehavior& shutdown_behavior) {
82   os << TaskShutdownBehaviorToString(shutdown_behavior);
83   return os;
84 }
85 
86 }  // namespace base
87