blob: 71fbd733595d8f685255730be7dfea4f98feca85 [file] [log] [blame]
// 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 <chrono> // NOLINT
#include <utility>
#include "base/bind.h"
#include "base/location.h"
#include "base/task/post_task.h"
#include "base/task/task_traits.h"
#include "base/time/time.h"
#include "components/openscreen_platform/task_runner.h"
namespace openscreen_platform {
using openscreen::Clock;
using Task = openscreen::TaskRunner::Task;
namespace {
void ExecuteTask(Task task) {
task();
}
} // namespace
TaskRunner::TaskRunner(scoped_refptr<base::SequencedTaskRunner> task_runner) {
task_runner_ = task_runner;
}
TaskRunner::~TaskRunner() = default;
void TaskRunner::PostPackagedTask(Task task) {
task_runner_->PostTask(FROM_HERE,
base::BindOnce(ExecuteTask, std::move(task)));
}
void TaskRunner::PostPackagedTaskWithDelay(Task task, Clock::duration delay) {
auto time_delta = base::TimeDelta::FromMicroseconds(
std::chrono::duration_cast<std::chrono::microseconds>(delay).count());
task_runner_->PostDelayedTask(
FROM_HERE, base::BindOnce(ExecuteTask, std::move(task)), time_delta);
}
bool TaskRunner::IsRunningOnTaskRunner() {
return task_runner_->RunsTasksInCurrentSequence();
}
} // namespace openscreen_platform