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()19TaskTraits::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()27TaskTraits& TaskTraits::MayBlock() { 28 may_block_ = true; 29 return *this; 30 } 31 WithBaseSyncPrimitives()32TaskTraits& TaskTraits::WithBaseSyncPrimitives() { 33 with_base_sync_primitives_ = true; 34 return *this; 35 } 36 WithPriority(TaskPriority priority)37TaskTraits& TaskTraits::WithPriority(TaskPriority priority) { 38 priority_ = priority; 39 return *this; 40 } 41 WithShutdownBehavior(TaskShutdownBehavior shutdown_behavior)42TaskTraits& TaskTraits::WithShutdownBehavior( 43 TaskShutdownBehavior shutdown_behavior) { 44 shutdown_behavior_ = shutdown_behavior; 45 return *this; 46 } 47 TaskPriorityToString(TaskPriority task_priority)48const 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)61const 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)75std::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)80std::ostream& operator<<(std::ostream& os, 81 const TaskShutdownBehavior& shutdown_behavior) { 82 os << TaskShutdownBehaviorToString(shutdown_behavior); 83 return os; 84 } 85 86 } // namespace base 87