Make IPC::ChannelMojo's proxy task runner changeable
This CL adds an argument for listener task runner to IPC::ChannelMojo::
Create{Server,Client} so that we can have more flexible task scheduling.
Now all arguments are base::ThreadTaskRunnerHandle::Get() and this CL
doesn't change the behavior. This CL is just a preparation.
Doc: https://docs.google.com/document/d/1yOhE6-1HLb3aeNWmoa9O2LlnegWjd4awYUn2OhUL4vk/edit#
Change-Id: I2f5c70ff3af499766e7b42de8e33f13dafcefbff
Reviewed-on: https://chromium-review.googlesource.com/756821
Reviewed-by: Yuzhu Shen <[email protected]>
Reviewed-by: Ken Rockot <[email protected]>
Reviewed-by: John Abd-El-Malek <[email protected]>
Reviewed-by: Alexander Timin <[email protected]>
Commit-Queue: Hajime Hoshi <[email protected]>
Cr-Commit-Position: refs/heads/master@{#517764}
diff --git a/ipc/ipc_channel_mojo.cc b/ipc/ipc_channel_mojo.cc
index 83327ec..2dafc7b 100644
--- a/ipc/ipc_channel_mojo.cc
+++ b/ipc/ipc_channel_mojo.cc
@@ -38,14 +38,16 @@
MojoChannelFactory(
mojo::ScopedMessagePipeHandle handle,
Channel::Mode mode,
- const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner)
+ const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner,
+ const scoped_refptr<base::SingleThreadTaskRunner>& proxy_task_runner)
: handle_(std::move(handle)),
mode_(mode),
- ipc_task_runner_(ipc_task_runner) {}
+ ipc_task_runner_(ipc_task_runner),
+ proxy_task_runner_(proxy_task_runner) {}
std::unique_ptr<Channel> BuildChannel(Listener* listener) override {
- return ChannelMojo::Create(
- std::move(handle_), mode_, listener, ipc_task_runner_);
+ return ChannelMojo::Create(std::move(handle_), mode_, listener,
+ ipc_task_runner_, proxy_task_runner_);
}
scoped_refptr<base::SingleThreadTaskRunner> GetIPCTaskRunner() override {
@@ -56,6 +58,7 @@
mojo::ScopedMessagePipeHandle handle_;
const Channel::Mode mode_;
scoped_refptr<base::SingleThreadTaskRunner> ipc_task_runner_;
+ scoped_refptr<base::SingleThreadTaskRunner> proxy_task_runner_;
DISALLOW_COPY_AND_ASSIGN(MojoChannelFactory);
};
@@ -81,38 +84,45 @@
mojo::ScopedMessagePipeHandle handle,
Mode mode,
Listener* listener,
- const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner) {
- return base::WrapUnique(
- new ChannelMojo(std::move(handle), mode, listener, ipc_task_runner));
+ const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner,
+ const scoped_refptr<base::SingleThreadTaskRunner>& proxy_task_runner) {
+ return base::WrapUnique(new ChannelMojo(std::move(handle), mode, listener,
+ ipc_task_runner, proxy_task_runner));
}
// static
std::unique_ptr<ChannelFactory> ChannelMojo::CreateServerFactory(
mojo::ScopedMessagePipeHandle handle,
- const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner) {
+ const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner,
+ const scoped_refptr<base::SingleThreadTaskRunner>& proxy_task_runner) {
return std::make_unique<MojoChannelFactory>(
- std::move(handle), Channel::MODE_SERVER, ipc_task_runner);
+ std::move(handle), Channel::MODE_SERVER, ipc_task_runner,
+ proxy_task_runner);
}
// static
std::unique_ptr<ChannelFactory> ChannelMojo::CreateClientFactory(
mojo::ScopedMessagePipeHandle handle,
- const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner) {
+ const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner,
+ const scoped_refptr<base::SingleThreadTaskRunner>& proxy_task_runner) {
return std::make_unique<MojoChannelFactory>(
- std::move(handle), Channel::MODE_CLIENT, ipc_task_runner);
+ std::move(handle), Channel::MODE_CLIENT, ipc_task_runner,
+ proxy_task_runner);
}
ChannelMojo::ChannelMojo(
mojo::ScopedMessagePipeHandle handle,
Mode mode,
Listener* listener,
- const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner)
+ const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner,
+ const scoped_refptr<base::SingleThreadTaskRunner>& proxy_task_runner)
: task_runner_(ipc_task_runner),
pipe_(handle.get()),
listener_(listener),
weak_factory_(this) {
weak_ptr_ = weak_factory_.GetWeakPtr();
- bootstrap_ = MojoBootstrap::Create(std::move(handle), mode, ipc_task_runner);
+ bootstrap_ = MojoBootstrap::Create(std::move(handle), mode, ipc_task_runner,
+ proxy_task_runner);
}
void ChannelMojo::ForwardMessageFromThreadSafePtr(mojo::Message message) {