diff options
author | rockot <rockot@chromium.org> | 2016-03-18 11:58:15 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-03-18 18:59:44 +0000 |
commit | 9691a7bf20f969e72b523e5006823901e34cd825 (patch) | |
tree | 5ba43382c2b35806dd3f9426ecde7b06b6ee33d3 | |
parent | cd4e139b12f45f81a77d6293f1bb9339464f80f4 (diff) | |
download | chromium_src-9691a7bf20f969e72b523e5006823901e34cd825.zip chromium_src-9691a7bf20f969e72b523e5006823901e34cd825.tar.gz chromium_src-9691a7bf20f969e72b523e5006823901e34cd825.tar.bz2 |
ChannelMojo: Remove intermediate Message struct
This passes the data and handles directly in the Receive
message rather than using an intermediate Message struct.
One less alloc per Send, which seems worthwhile even though
the performance delta is marginal.
R=sammc@chromium.org
BUG=
Review URL: https://codereview.chromium.org/1809323002
Cr-Commit-Position: refs/heads/master@{#382037}
-rw-r--r-- | ipc/mojo/ipc.mojom | 7 | ||||
-rw-r--r-- | ipc/mojo/ipc_message_pipe_reader.cc | 26 | ||||
-rw-r--r-- | ipc/mojo/ipc_message_pipe_reader.h | 3 |
3 files changed, 16 insertions, 20 deletions
diff --git a/ipc/mojo/ipc.mojom b/ipc/mojo/ipc.mojom index 6b69ced..d15a23c 100644 --- a/ipc/mojo/ipc.mojom +++ b/ipc/mojo/ipc.mojom @@ -16,13 +16,8 @@ struct SerializedHandle { Type type; }; -struct Message { - array<uint8> data; - array<SerializedHandle>? handles; -}; - interface Channel { - Receive(Message message); + Receive(array<uint8> data, array<SerializedHandle>? handles); }; // An interface for connecting a pair of Channel interfaces representing a diff --git a/ipc/mojo/ipc_message_pipe_reader.cc b/ipc/mojo/ipc_message_pipe_reader.cc index 76e323b..495a3a5 100644 --- a/ipc/mojo/ipc_message_pipe_reader.cc +++ b/ipc/mojo/ipc_message_pipe_reader.cc @@ -58,33 +58,33 @@ bool MessagePipeReader::Send(scoped_ptr<Message> message) { "MessagePipeReader::Send", message->flags(), TRACE_EVENT_FLAG_FLOW_OUT); - mojom::MessagePtr ipc_message = mojom::Message::New(); + mojo::Array<mojom::SerializedHandlePtr> handles(nullptr); MojoResult result = MOJO_RESULT_OK; - result = ChannelMojo::ReadFromMessageAttachmentSet(message.get(), - &ipc_message->handles); + result = ChannelMojo::ReadFromMessageAttachmentSet(message.get(), &handles); if (result != MOJO_RESULT_OK) { CloseWithError(result); return false; } - ipc_message->data.resize(message->size()); + mojo::Array<uint8_t> data(message->size()); std::copy(reinterpret_cast<const uint8_t*>(message->data()), reinterpret_cast<const uint8_t*>(message->data()) + message->size(), - &ipc_message->data[0]); - sender_->Receive(std::move(ipc_message)); + &data[0]); + sender_->Receive(std::move(data), std::move(handles)); DVLOG(4) << "Send " << message->type() << ": " << message->size(); return true; } -void MessagePipeReader::Receive(mojom::MessagePtr ipc_message) { - Message message(ipc_message->data.size() == 0 - ? "" - : reinterpret_cast<const char*>(&ipc_message->data[0]), - static_cast<uint32_t>(ipc_message->data.size())); +void MessagePipeReader::Receive( + mojo::Array<uint8_t> data, + mojo::Array<mojom::SerializedHandlePtr> handles) { + Message message( + data.size() == 0 ? "" : reinterpret_cast<const char*>(&data[0]), + static_cast<uint32_t>(data.size())); message.set_sender_pid(peer_pid_); DVLOG(4) << "Receive " << message.type() << ": " << message.size(); - MojoResult write_result = ChannelMojo::WriteToMessageAttachmentSet( - std::move(ipc_message->handles), &message); + MojoResult write_result = + ChannelMojo::WriteToMessageAttachmentSet(std::move(handles), &message); if (write_result != MOJO_RESULT_OK) { CloseWithError(write_result); return; diff --git a/ipc/mojo/ipc_message_pipe_reader.h b/ipc/mojo/ipc_message_pipe_reader.h index 75fe7ad..3989c25 100644 --- a/ipc/mojo/ipc_message_pipe_reader.h +++ b/ipc/mojo/ipc_message_pipe_reader.h @@ -92,7 +92,8 @@ class MessagePipeReader : public mojom::Channel { void OnPipeError(MojoResult error); private: - void Receive(mojom::MessagePtr message) override; + void Receive(mojo::Array<uint8_t> data, + mojo::Array<mojom::SerializedHandlePtr> handles) override; // |delegate_| is null once the message pipe is closed. Delegate* delegate_; |