// Copyright 2019 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "base/task/simple_task_executor.h" #include "base/notreached.h" #include "base/time/time.h" #include "build/build_config.h" namespace base { SimpleTaskExecutor::SimpleTaskExecutor( scoped_refptr task_queue) : task_queue_(std::move(task_queue)), previous_task_executor_(GetTaskExecutorForCurrentThread()) { DCHECK(task_queue_); // The TaskExecutor API does not expect nesting, but this can happen in tests // so we have to work around it here. if (previous_task_executor_) SetTaskExecutorForCurrentThread(nullptr); SetTaskExecutorForCurrentThread(this); } SimpleTaskExecutor::~SimpleTaskExecutor() { if (previous_task_executor_) SetTaskExecutorForCurrentThread(nullptr); SetTaskExecutorForCurrentThread(previous_task_executor_); } bool SimpleTaskExecutor::PostDelayedTask(const Location& from_here, const TaskTraits& traits, OnceClosure task, TimeDelta delay) { return task_queue_->PostDelayedTask(from_here, std::move(task), delay); } scoped_refptr SimpleTaskExecutor::CreateTaskRunner( const TaskTraits& traits) { return task_queue_; } scoped_refptr SimpleTaskExecutor::CreateSequencedTaskRunner(const TaskTraits& traits) { return task_queue_; } scoped_refptr SimpleTaskExecutor::CreateSingleThreadTaskRunner( const TaskTraits& traits, SingleThreadTaskRunnerThreadMode thread_mode) { return task_queue_; } #if BUILDFLAG(IS_WIN) scoped_refptr SimpleTaskExecutor::CreateCOMSTATaskRunner( const TaskTraits& traits, SingleThreadTaskRunnerThreadMode thread_mode) { // It seems pretty unlikely this will be used on a comsta task thread. NOTREACHED(); return task_queue_; } #endif // BUILDFLAG(IS_WIN) } // namespace base