123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- // 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<SingleThreadTaskRunner> 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<TaskRunner> SimpleTaskExecutor::CreateTaskRunner(
- const TaskTraits& traits) {
- return task_queue_;
- }
- scoped_refptr<SequencedTaskRunner>
- SimpleTaskExecutor::CreateSequencedTaskRunner(const TaskTraits& traits) {
- return task_queue_;
- }
- scoped_refptr<SingleThreadTaskRunner>
- SimpleTaskExecutor::CreateSingleThreadTaskRunner(
- const TaskTraits& traits,
- SingleThreadTaskRunnerThreadMode thread_mode) {
- return task_queue_;
- }
- #if BUILDFLAG(IS_WIN)
- scoped_refptr<SingleThreadTaskRunner>
- 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
|