Migrate base::TaskRunner from Closure to OnceClosure
Migrate base::TaskRunner from Closure to OnceClosure https://codereview.chromium.org/2637843002 Pass Callback to TaskRunner by value and consume it on invocation (1) https://codereview.chromium.org/2726523002 Replace base::get with std::get https://codereview.chromium.org/2797133002
This commit is contained in:
parent
ffbb16e854
commit
d09cab2e21
4 changed files with 20 additions and 17 deletions
|
@ -2,6 +2,8 @@
|
||||||
// Use of this source code is governed by the MIT license that can be
|
// Use of this source code is governed by the MIT license that can be
|
||||||
// found in the LICENSE file.
|
// found in the LICENSE file.
|
||||||
|
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
#include "atom/app/uv_task_runner.h"
|
#include "atom/app/uv_task_runner.h"
|
||||||
|
|
||||||
#include "base/stl_util.h"
|
#include "base/stl_util.h"
|
||||||
|
@ -19,13 +21,13 @@ UvTaskRunner::~UvTaskRunner() {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool UvTaskRunner::PostDelayedTask(const tracked_objects::Location& from_here,
|
bool UvTaskRunner::PostDelayedTask(const tracked_objects::Location& from_here,
|
||||||
const base::Closure& task,
|
base::OnceClosure task,
|
||||||
base::TimeDelta delay) {
|
base::TimeDelta delay) {
|
||||||
auto* timer = new uv_timer_t;
|
auto* timer = new uv_timer_t;
|
||||||
timer->data = this;
|
timer->data = this;
|
||||||
uv_timer_init(loop_, timer);
|
uv_timer_init(loop_, timer);
|
||||||
uv_timer_start(timer, UvTaskRunner::OnTimeout, delay.InMilliseconds(), 0);
|
uv_timer_start(timer, UvTaskRunner::OnTimeout, delay.InMilliseconds(), 0);
|
||||||
tasks_[timer] = task;
|
tasks_[timer] = std::move(task);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,9 +37,9 @@ bool UvTaskRunner::RunsTasksOnCurrentThread() const {
|
||||||
|
|
||||||
bool UvTaskRunner::PostNonNestableDelayedTask(
|
bool UvTaskRunner::PostNonNestableDelayedTask(
|
||||||
const tracked_objects::Location& from_here,
|
const tracked_objects::Location& from_here,
|
||||||
const base::Closure& task,
|
base::OnceClosure task,
|
||||||
base::TimeDelta delay) {
|
base::TimeDelta delay) {
|
||||||
return PostDelayedTask(from_here, task, delay);
|
return PostDelayedTask(from_here, std::move(task), delay);
|
||||||
}
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
|
@ -46,7 +48,7 @@ void UvTaskRunner::OnTimeout(uv_timer_t* timer) {
|
||||||
if (!ContainsKey(self->tasks_, timer))
|
if (!ContainsKey(self->tasks_, timer))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
self->tasks_[timer].Run();
|
std::move(self->tasks_[timer]).Run();
|
||||||
self->tasks_.erase(timer);
|
self->tasks_.erase(timer);
|
||||||
uv_timer_stop(timer);
|
uv_timer_stop(timer);
|
||||||
uv_close(reinterpret_cast<uv_handle_t*>(timer), UvTaskRunner::OnClose);
|
uv_close(reinterpret_cast<uv_handle_t*>(timer), UvTaskRunner::OnClose);
|
||||||
|
|
|
@ -21,12 +21,12 @@ class UvTaskRunner : public base::SingleThreadTaskRunner {
|
||||||
|
|
||||||
// base::SingleThreadTaskRunner:
|
// base::SingleThreadTaskRunner:
|
||||||
bool PostDelayedTask(const tracked_objects::Location& from_here,
|
bool PostDelayedTask(const tracked_objects::Location& from_here,
|
||||||
const base::Closure& task,
|
base::OnceClosure task,
|
||||||
base::TimeDelta delay) override;
|
base::TimeDelta delay) override;
|
||||||
bool RunsTasksOnCurrentThread() const override;
|
bool RunsTasksOnCurrentThread() const override;
|
||||||
bool PostNonNestableDelayedTask(
|
bool PostNonNestableDelayedTask(
|
||||||
const tracked_objects::Location& from_here,
|
const tracked_objects::Location& from_here,
|
||||||
const base::Closure& task,
|
base::OnceClosure task,
|
||||||
base::TimeDelta delay) override;
|
base::TimeDelta delay) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -35,7 +35,7 @@ class UvTaskRunner : public base::SingleThreadTaskRunner {
|
||||||
|
|
||||||
uv_loop_t* loop_;
|
uv_loop_t* loop_;
|
||||||
|
|
||||||
std::map<uv_timer_t*, base::Closure> tasks_;
|
std::map<uv_timer_t*, base::OnceClosure> tasks_;
|
||||||
|
|
||||||
DISALLOW_COPY_AND_ASSIGN(UvTaskRunner);
|
DISALLOW_COPY_AND_ASSIGN(UvTaskRunner);
|
||||||
};
|
};
|
||||||
|
|
|
@ -13,17 +13,17 @@ void BridgeTaskRunner::MessageLoopIsReady() {
|
||||||
CHECK(message_loop);
|
CHECK(message_loop);
|
||||||
for (const TaskPair& task : tasks_) {
|
for (const TaskPair& task : tasks_) {
|
||||||
message_loop->task_runner()->PostDelayedTask(
|
message_loop->task_runner()->PostDelayedTask(
|
||||||
base::get<0>(task), base::get<1>(task), base::get<2>(task));
|
std::get<0>(task), std::get<1>(task), std::get<2>(task));
|
||||||
}
|
}
|
||||||
for (const TaskPair& task : non_nestable_tasks_) {
|
for (const TaskPair& task : non_nestable_tasks_) {
|
||||||
message_loop->task_runner()->PostNonNestableDelayedTask(
|
message_loop->task_runner()->PostNonNestableDelayedTask(
|
||||||
base::get<0>(task), base::get<1>(task), base::get<2>(task));
|
std::get<0>(task), std::get<1>(task), std::get<2>(task));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BridgeTaskRunner::PostDelayedTask(
|
bool BridgeTaskRunner::PostDelayedTask(
|
||||||
const tracked_objects::Location& from_here,
|
const tracked_objects::Location& from_here,
|
||||||
const base::Closure& task,
|
base::OnceClosure task,
|
||||||
base::TimeDelta delay) {
|
base::TimeDelta delay) {
|
||||||
auto message_loop = base::MessageLoop::current();
|
auto message_loop = base::MessageLoop::current();
|
||||||
if (!message_loop) {
|
if (!message_loop) {
|
||||||
|
@ -31,7 +31,8 @@ bool BridgeTaskRunner::PostDelayedTask(
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return message_loop->task_runner()->PostDelayedTask(from_here, task, delay);
|
return message_loop->task_runner()->PostDelayedTask(
|
||||||
|
from_here, std::move(task), delay);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BridgeTaskRunner::RunsTasksOnCurrentThread() const {
|
bool BridgeTaskRunner::RunsTasksOnCurrentThread() const {
|
||||||
|
@ -44,7 +45,7 @@ bool BridgeTaskRunner::RunsTasksOnCurrentThread() const {
|
||||||
|
|
||||||
bool BridgeTaskRunner::PostNonNestableDelayedTask(
|
bool BridgeTaskRunner::PostNonNestableDelayedTask(
|
||||||
const tracked_objects::Location& from_here,
|
const tracked_objects::Location& from_here,
|
||||||
const base::Closure& task,
|
base::OnceClosure task,
|
||||||
base::TimeDelta delay) {
|
base::TimeDelta delay) {
|
||||||
auto message_loop = base::MessageLoop::current();
|
auto message_loop = base::MessageLoop::current();
|
||||||
if (!message_loop) {
|
if (!message_loop) {
|
||||||
|
@ -53,7 +54,7 @@ bool BridgeTaskRunner::PostNonNestableDelayedTask(
|
||||||
}
|
}
|
||||||
|
|
||||||
return message_loop->task_runner()->PostNonNestableDelayedTask(
|
return message_loop->task_runner()->PostNonNestableDelayedTask(
|
||||||
from_here, task, delay);
|
from_here, std::move(task), delay);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace atom
|
} // namespace atom
|
||||||
|
|
|
@ -25,17 +25,17 @@ class BridgeTaskRunner : public base::SingleThreadTaskRunner {
|
||||||
|
|
||||||
// base::SingleThreadTaskRunner:
|
// base::SingleThreadTaskRunner:
|
||||||
bool PostDelayedTask(const tracked_objects::Location& from_here,
|
bool PostDelayedTask(const tracked_objects::Location& from_here,
|
||||||
const base::Closure& task,
|
base::OnceClosure task,
|
||||||
base::TimeDelta delay) override;
|
base::TimeDelta delay) override;
|
||||||
bool RunsTasksOnCurrentThread() const override;
|
bool RunsTasksOnCurrentThread() const override;
|
||||||
bool PostNonNestableDelayedTask(
|
bool PostNonNestableDelayedTask(
|
||||||
const tracked_objects::Location& from_here,
|
const tracked_objects::Location& from_here,
|
||||||
const base::Closure& task,
|
base::OnceClosure task,
|
||||||
base::TimeDelta delay) override;
|
base::TimeDelta delay) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
using TaskPair = std::tuple<
|
using TaskPair = std::tuple<
|
||||||
tracked_objects::Location, base::Closure, base::TimeDelta>;
|
tracked_objects::Location, base::OnceClosure, base::TimeDelta>;
|
||||||
std::vector<TaskPair> tasks_;
|
std::vector<TaskPair> tasks_;
|
||||||
std::vector<TaskPair> non_nestable_tasks_;
|
std::vector<TaskPair> non_nestable_tasks_;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue