| // Copyright 2016 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 "flutter/glue/task_runner_adaptor.h" |
| |
| #include <utility> |
| |
| #include "base/bind.h" |
| #include "base/location.h" |
| #include "base/task_runner.h" |
| |
| namespace glue { |
| namespace { |
| |
| void RunClosure(ftl::Closure task) { |
| task(); |
| } |
| |
| } // namespace |
| |
| TaskRunnerAdaptor::TaskRunnerAdaptor(scoped_refptr<base::TaskRunner> runner) |
| : runner_(std::move(runner)) { |
| FTL_DCHECK(runner_); |
| } |
| |
| TaskRunnerAdaptor::~TaskRunnerAdaptor() {} |
| |
| void TaskRunnerAdaptor::PostTask(ftl::Closure task) { |
| runner_->PostTask(FROM_HERE, base::Bind(RunClosure, task)); |
| } |
| |
| void TaskRunnerAdaptor::PostTaskForTime(ftl::Closure task, |
| ftl::TimePoint target_time) { |
| ftl::TimePoint now = ftl::TimePoint::Now(); |
| runner_->PostDelayedTask(FROM_HERE, base::Bind(RunClosure, task), |
| target_time <= now |
| ? base::TimeDelta() |
| : base::TimeDelta::FromMicroseconds( |
| (target_time - now).ToMicroseconds())); |
| } |
| |
| void TaskRunnerAdaptor::PostDelayedTask(ftl::Closure task, |
| ftl::TimeDelta delay) { |
| runner_->PostDelayedTask( |
| FROM_HERE, base::Bind(RunClosure, task), |
| base::TimeDelta::FromMicroseconds(delay.ToMicroseconds())); |
| } |
| |
| bool TaskRunnerAdaptor::RunsTasksOnCurrentThread() { |
| return runner_->RunsTasksOnCurrentThread(); |
| } |
| |
| } // namespace glue |