Jordan Bayles | a4dbdae | 2019-07-23 01:01:26 | [diff] [blame] | 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 | |
| 5 | #include <chrono> // NOLINT |
| 6 | #include <utility> |
| 7 | |
| 8 | #include "base/bind.h" |
| 9 | #include "base/location.h" |
Jordan Bayles | a4dbdae | 2019-07-23 01:01:26 | [diff] [blame] | 10 | #include "base/task/task_traits.h" |
| 11 | #include "base/time/time.h" |
| 12 | |
btolsch | 496b728df | 2020-02-21 06:01:18 | [diff] [blame] | 13 | #include "components/openscreen_platform/task_runner.h" |
Jordan Bayles | a4dbdae | 2019-07-23 01:01:26 | [diff] [blame] | 14 | |
Fabrice de Gans-Riberi | e17abf54b | 2020-01-28 00:29:54 | [diff] [blame] | 15 | namespace openscreen_platform { |
Jordan Bayles | a7d6858 | 2019-10-21 22:25:26 | [diff] [blame] | 16 | |
Yuri Wiitala | 9fca519b3 | 2019-12-06 02:03:52 | [diff] [blame] | 17 | using openscreen::Clock; |
btolsch | 496b728df | 2020-02-21 06:01:18 | [diff] [blame] | 18 | using Task = openscreen::TaskRunner::Task; |
Jordan Bayles | a4dbdae | 2019-07-23 01:01:26 | [diff] [blame] | 19 | |
| 20 | namespace { |
btolsch | 496b728df | 2020-02-21 06:01:18 | [diff] [blame] | 21 | void ExecuteTask(Task task) { |
Jordan Bayles | a4dbdae | 2019-07-23 01:01:26 | [diff] [blame] | 22 | task(); |
| 23 | } |
| 24 | } // namespace |
| 25 | |
btolsch | 496b728df | 2020-02-21 06:01:18 | [diff] [blame] | 26 | TaskRunner::TaskRunner(scoped_refptr<base::SequencedTaskRunner> task_runner) { |
Jordan Bayles | a4dbdae | 2019-07-23 01:01:26 | [diff] [blame] | 27 | task_runner_ = task_runner; |
| 28 | } |
| 29 | |
btolsch | 496b728df | 2020-02-21 06:01:18 | [diff] [blame] | 30 | TaskRunner::~TaskRunner() = default; |
Jordan Bayles | a4dbdae | 2019-07-23 01:01:26 | [diff] [blame] | 31 | |
btolsch | 496b728df | 2020-02-21 06:01:18 | [diff] [blame] | 32 | void TaskRunner::PostPackagedTask(Task task) { |
Jordan Bayles | a4dbdae | 2019-07-23 01:01:26 | [diff] [blame] | 33 | task_runner_->PostTask(FROM_HERE, |
| 34 | base::BindOnce(ExecuteTask, std::move(task))); |
| 35 | } |
| 36 | |
btolsch | 496b728df | 2020-02-21 06:01:18 | [diff] [blame] | 37 | void TaskRunner::PostPackagedTaskWithDelay(Task task, Clock::duration delay) { |
Peter Kasting | e5a38ed | 2021-10-02 03:06:35 | [diff] [blame] | 38 | auto time_delta = base::Microseconds( |
Yuri Wiitala | be152d8 | 2020-01-18 01:00:19 | [diff] [blame] | 39 | std::chrono::duration_cast<std::chrono::microseconds>(delay).count()); |
Jordan Bayles | a4dbdae | 2019-07-23 01:01:26 | [diff] [blame] | 40 | task_runner_->PostDelayedTask( |
| 41 | FROM_HERE, base::BindOnce(ExecuteTask, std::move(task)), time_delta); |
| 42 | } |
| 43 | |
btolsch | 496b728df | 2020-02-21 06:01:18 | [diff] [blame] | 44 | bool TaskRunner::IsRunningOnTaskRunner() { |
mark a. foltz | 3f823a9 | 2020-02-06 18:11:43 | [diff] [blame] | 45 | return task_runner_->RunsTasksInCurrentSequence(); |
| 46 | } |
| 47 | |
Fabrice de Gans-Riberi | e17abf54b | 2020-01-28 00:29:54 | [diff] [blame] | 48 | } // namespace openscreen_platform |