diff options
Diffstat (limited to 'chromium/base/task/task_executor.cc')
-rw-r--r-- | chromium/base/task/task_executor.cc | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/chromium/base/task/task_executor.cc b/chromium/base/task/task_executor.cc index 8b527b0cd5b..355fa3f445f 100644 --- a/chromium/base/task/task_executor.cc +++ b/chromium/base/task/task_executor.cc @@ -6,8 +6,10 @@ #include <type_traits> +#include "base/no_destructor.h" #include "base/task/task_traits.h" #include "base/task/task_traits_extension.h" +#include "base/threading/thread_local.h" namespace base { @@ -30,6 +32,21 @@ static_assert( } // namespace +ThreadLocalPointer<TaskExecutor>* GetTLSForCurrentTaskExecutor() { + static NoDestructor<ThreadLocalPointer<TaskExecutor>> instance; + return instance.get(); +} + +void SetTaskExecutorForCurrentThread(TaskExecutor* task_executor) { + DCHECK(!task_executor || !GetTLSForCurrentTaskExecutor()->Get() || + GetTLSForCurrentTaskExecutor()->Get() == task_executor); + GetTLSForCurrentTaskExecutor()->Set(task_executor); +} + +TaskExecutor* GetTaskExecutorForCurrentThread() { + return GetTLSForCurrentTaskExecutor()->Get(); +} + void RegisterTaskExecutor(uint8_t extension_id, TaskExecutor* task_executor) { DCHECK_NE(extension_id, TaskTraitsExtensionStorage::kInvalidExtensionId); DCHECK_LE(extension_id, TaskTraitsExtensionStorage::kMaxExtensionId); @@ -57,4 +74,4 @@ TaskExecutor* GetRegisteredTaskExecutorForTraits(const TaskTraits& traits) { return nullptr; } -} // namespace base
\ No newline at end of file +} // namespace base |