blob: 0a16f41fbe4ec7651d89e089b821dffe47bc7b63 [file] [log] [blame]
Jordan Baylesa4dbdae2019-07-23 01:01:261// 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 Baylesa4dbdae2019-07-23 01:01:2610#include "base/task/task_traits.h"
11#include "base/time/time.h"
12
btolsch496b728df2020-02-21 06:01:1813#include "components/openscreen_platform/task_runner.h"
Jordan Baylesa4dbdae2019-07-23 01:01:2614
Fabrice de Gans-Riberie17abf54b2020-01-28 00:29:5415namespace openscreen_platform {
Jordan Baylesa7d68582019-10-21 22:25:2616
Yuri Wiitala9fca519b32019-12-06 02:03:5217using openscreen::Clock;
btolsch496b728df2020-02-21 06:01:1818using Task = openscreen::TaskRunner::Task;
Jordan Baylesa4dbdae2019-07-23 01:01:2619
20namespace {
btolsch496b728df2020-02-21 06:01:1821void ExecuteTask(Task task) {
Jordan Baylesa4dbdae2019-07-23 01:01:2622 task();
23}
24} // namespace
25
btolsch496b728df2020-02-21 06:01:1826TaskRunner::TaskRunner(scoped_refptr<base::SequencedTaskRunner> task_runner) {
Jordan Baylesa4dbdae2019-07-23 01:01:2627 task_runner_ = task_runner;
28}
29
btolsch496b728df2020-02-21 06:01:1830TaskRunner::~TaskRunner() = default;
Jordan Baylesa4dbdae2019-07-23 01:01:2631
btolsch496b728df2020-02-21 06:01:1832void TaskRunner::PostPackagedTask(Task task) {
Jordan Baylesa4dbdae2019-07-23 01:01:2633 task_runner_->PostTask(FROM_HERE,
34 base::BindOnce(ExecuteTask, std::move(task)));
35}
36
btolsch496b728df2020-02-21 06:01:1837void TaskRunner::PostPackagedTaskWithDelay(Task task, Clock::duration delay) {
Peter Kastinge5a38ed2021-10-02 03:06:3538 auto time_delta = base::Microseconds(
Yuri Wiitalabe152d82020-01-18 01:00:1939 std::chrono::duration_cast<std::chrono::microseconds>(delay).count());
Jordan Baylesa4dbdae2019-07-23 01:01:2640 task_runner_->PostDelayedTask(
41 FROM_HERE, base::BindOnce(ExecuteTask, std::move(task)), time_delta);
42}
43
btolsch496b728df2020-02-21 06:01:1844bool TaskRunner::IsRunningOnTaskRunner() {
mark a. foltz3f823a92020-02-06 18:11:4345 return task_runner_->RunsTasksInCurrentSequence();
46}
47
Fabrice de Gans-Riberie17abf54b2020-01-28 00:29:5448} // namespace openscreen_platform