simple_task_executor.cc 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. // Copyright 2019 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. #include "base/task/simple_task_executor.h"
  5. #include "base/notreached.h"
  6. #include "base/time/time.h"
  7. #include "build/build_config.h"
  8. namespace base {
  9. SimpleTaskExecutor::SimpleTaskExecutor(
  10. scoped_refptr<SingleThreadTaskRunner> task_queue)
  11. : task_queue_(std::move(task_queue)),
  12. previous_task_executor_(GetTaskExecutorForCurrentThread()) {
  13. DCHECK(task_queue_);
  14. // The TaskExecutor API does not expect nesting, but this can happen in tests
  15. // so we have to work around it here.
  16. if (previous_task_executor_)
  17. SetTaskExecutorForCurrentThread(nullptr);
  18. SetTaskExecutorForCurrentThread(this);
  19. }
  20. SimpleTaskExecutor::~SimpleTaskExecutor() {
  21. if (previous_task_executor_)
  22. SetTaskExecutorForCurrentThread(nullptr);
  23. SetTaskExecutorForCurrentThread(previous_task_executor_);
  24. }
  25. bool SimpleTaskExecutor::PostDelayedTask(const Location& from_here,
  26. const TaskTraits& traits,
  27. OnceClosure task,
  28. TimeDelta delay) {
  29. return task_queue_->PostDelayedTask(from_here, std::move(task), delay);
  30. }
  31. scoped_refptr<TaskRunner> SimpleTaskExecutor::CreateTaskRunner(
  32. const TaskTraits& traits) {
  33. return task_queue_;
  34. }
  35. scoped_refptr<SequencedTaskRunner>
  36. SimpleTaskExecutor::CreateSequencedTaskRunner(const TaskTraits& traits) {
  37. return task_queue_;
  38. }
  39. scoped_refptr<SingleThreadTaskRunner>
  40. SimpleTaskExecutor::CreateSingleThreadTaskRunner(
  41. const TaskTraits& traits,
  42. SingleThreadTaskRunnerThreadMode thread_mode) {
  43. return task_queue_;
  44. }
  45. #if BUILDFLAG(IS_WIN)
  46. scoped_refptr<SingleThreadTaskRunner>
  47. SimpleTaskExecutor::CreateCOMSTATaskRunner(
  48. const TaskTraits& traits,
  49. SingleThreadTaskRunnerThreadMode thread_mode) {
  50. // It seems pretty unlikely this will be used on a comsta task thread.
  51. NOTREACHED();
  52. return task_queue_;
  53. }
  54. #endif // BUILDFLAG(IS_WIN)
  55. } // namespace base