blob: c3e0574a1bf0c0bf5633f37fd01453657fdbc1be [file] [log] [blame]
akalin@chromium.org062f9682012-02-15 10:43:19 +09001// Copyright (c) 2012 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 "base/task_runner.h"
6
tzikec394422017-02-08 21:29:47 +09007#include <utility>
8
akalin@chromium.org062f9682012-02-15 10:43:19 +09009#include "base/compiler_specific.h"
10#include "base/logging.h"
11#include "base/threading/post_task_and_reply_impl.h"
12
13namespace base {
14
15namespace {
16
17// TODO(akalin): There's only one other implementation of
18// PostTaskAndReplyImpl in WorkerPool. Investigate whether it'll be
19// possible to merge the two.
20class PostTaskAndReplyTaskRunner : public internal::PostTaskAndReplyImpl {
21 public:
hans@chromium.org07615b42013-01-15 19:52:11 +090022 explicit PostTaskAndReplyTaskRunner(TaskRunner* destination);
akalin@chromium.org062f9682012-02-15 10:43:19 +090023
24 private:
dcheng7dc8df52014-10-21 19:54:51 +090025 bool PostTask(const tracked_objects::Location& from_here,
tzik8f0ce102017-04-05 19:13:21 +090026 OnceClosure task) override;
akalin@chromium.org062f9682012-02-15 10:43:19 +090027
28 // Non-owning.
29 TaskRunner* destination_;
30};
31
32PostTaskAndReplyTaskRunner::PostTaskAndReplyTaskRunner(
33 TaskRunner* destination) : destination_(destination) {
34 DCHECK(destination_);
35}
36
37bool PostTaskAndReplyTaskRunner::PostTask(
38 const tracked_objects::Location& from_here,
tzik8f0ce102017-04-05 19:13:21 +090039 OnceClosure task) {
tzik622d59e2017-03-29 14:28:12 +090040 return destination_->PostTask(from_here, std::move(task));
akalin@chromium.org062f9682012-02-15 10:43:19 +090041}
42
43} // namespace
44
45bool TaskRunner::PostTask(const tracked_objects::Location& from_here,
tzik8f0ce102017-04-05 19:13:21 +090046 OnceClosure task) {
tzik622d59e2017-03-29 14:28:12 +090047 return PostDelayedTask(from_here, std::move(task), base::TimeDelta());
akalin@chromium.org062f9682012-02-15 10:43:19 +090048}
49
tzikec394422017-02-08 21:29:47 +090050bool TaskRunner::PostTaskAndReply(const tracked_objects::Location& from_here,
tzik8f0ce102017-04-05 19:13:21 +090051 OnceClosure task,
52 OnceClosure reply) {
akalin@chromium.org062f9682012-02-15 10:43:19 +090053 return PostTaskAndReplyTaskRunner(this).PostTaskAndReply(
tzikec394422017-02-08 21:29:47 +090054 from_here, std::move(task), std::move(reply));
akalin@chromium.org062f9682012-02-15 10:43:19 +090055}
56
57TaskRunner::TaskRunner() {}
58
59TaskRunner::~TaskRunner() {}
60
61void TaskRunner::OnDestruct() const {
62 delete this;
63}
64
65void TaskRunnerTraits::Destruct(const TaskRunner* task_runner) {
66 task_runner->OnDestruct();
67}
68
69} // namespace base