1 // Copyright 2017 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 #ifndef BASE_TASK_SCHEDULER_ENVIRONMENT_CONFIG_H_ 6 #define BASE_TASK_SCHEDULER_ENVIRONMENT_CONFIG_H_ 7 8 #include <stddef.h> 9 10 #include "base/base_export.h" 11 #include "base/task_scheduler/task_traits.h" 12 #include "base/threading/thread.h" 13 14 namespace base { 15 namespace internal { 16 17 enum EnvironmentType { 18 FOREGROUND = 0, 19 FOREGROUND_BLOCKING, 20 // Pools will only be created for the environment above on platforms that 21 // don't support SchedulerWorkers running with a background priority. 22 ENVIRONMENT_COUNT_WITHOUT_BACKGROUND_PRIORITY, 23 BACKGROUND = ENVIRONMENT_COUNT_WITHOUT_BACKGROUND_PRIORITY, 24 BACKGROUND_BLOCKING, 25 ENVIRONMENT_COUNT // Always last. 26 }; 27 28 // Order must match the EnvironmentType enum. 29 constexpr struct { 30 // The threads and histograms of this environment will be labeled with 31 // the task scheduler name concatenated to this. 32 const char* name_suffix; 33 34 // Preferred priority for threads in this environment; the actual thread 35 // priority depends on shutdown state and platform capabilities. 36 ThreadPriority priority_hint; 37 } kEnvironmentParams[] = { 38 {"Foreground", base::ThreadPriority::NORMAL}, 39 {"ForegroundBlocking", base::ThreadPriority::NORMAL}, 40 {"Background", base::ThreadPriority::BACKGROUND}, 41 {"BackgroundBlocking", base::ThreadPriority::BACKGROUND}, 42 }; 43 44 size_t BASE_EXPORT GetEnvironmentIndexForTraits(const TaskTraits& traits); 45 46 // Returns true if this platform supports having SchedulerWorkers running with a 47 // background priority. 48 bool BASE_EXPORT CanUseBackgroundPriorityForSchedulerWorker(); 49 50 } // namespace internal 51 } // namespace base 52 53 #endif // BASE_TASK_SCHEDULER_ENVIRONMENT_CONFIG_H_ 54