Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(35)

Unified Diff: third_party/mojo/src/mojo/edk/system/message_pipe.cc

Issue 929433005: WIP: A couple of more ChannelMojo speedup ideas (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Build and test fix Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/mojo/src/mojo/edk/system/message_pipe.cc
diff --git a/third_party/mojo/src/mojo/edk/system/message_pipe.cc b/third_party/mojo/src/mojo/edk/system/message_pipe.cc
index 554401e875bd2ab8103ae07931406abe6b823928..34053c82d4e3a90f2a38d92152fc2b66bf935e97 100644
--- a/third_party/mojo/src/mojo/edk/system/message_pipe.cc
+++ b/third_party/mojo/src/mojo/edk/system/message_pipe.cc
@@ -206,6 +206,14 @@ void MessagePipe::RemoveAwakable(unsigned port,
endpoints_[port]->RemoveAwakable(awakable, signals_state);
}
+MojoResult MessagePipe::SetAsyncMessageCallback(
+ unsigned port,
+ const AsyncMessageCallback& callback) {
+ base::AutoLock locker(lock_);
+ DCHECK(endpoints_[port]);
+ return endpoints_[port]->SetAsyncMessageCallback(callback);
+}
+
void MessagePipe::StartSerialize(unsigned /*port*/,
Channel* channel,
size_t* max_size,
@@ -273,7 +281,9 @@ bool MessagePipe::EndSerialize(
return true;
}
-bool MessagePipe::OnReadMessage(unsigned port, MessageInTransit* message) {
+bool MessagePipe::OnReadMessage(
+ unsigned port,
+ MessageInTransit::ReadContext& reading_message) {
base::AutoLock locker(lock_);
if (!endpoints_[port]) {
@@ -289,10 +299,10 @@ bool MessagePipe::OnReadMessage(unsigned port, MessageInTransit* message) {
// |ProxyMessagePipeEndpoint| |port| receives a message (from the |Channel|).
// We need to pass this message on to its peer port (typically a
// |LocalMessagePipeEndpoint|).
- MojoResult result = EnqueueMessageNoLock(GetPeerPort(port),
- make_scoped_ptr(message), nullptr);
+ MojoResult result =
+ DispatchOnReadMessageNoLock(GetPeerPort(port), reading_message);
DLOG_IF(WARNING, result != MOJO_RESULT_OK)
- << "EnqueueMessageNoLock() failed (result = " << result << ")";
+ << "DispatchOnReadMessageNoLock() failed (result = " << result << ")";
return true;
}
@@ -311,6 +321,23 @@ MessagePipe::~MessagePipe() {
DCHECK(!endpoints_[1]);
}
+MojoResult MessagePipe::DispatchOnReadMessageNoLock(
+ unsigned port,
+ MessageInTransit::ReadContext& reading_message) {
+ DCHECK(port == 0 || port == 1);
+
+ DCHECK_EQ(reading_message.view().type(), MessageInTransit::kTypeEndpoint);
+ DCHECK(endpoints_[GetPeerPort(port)]);
+
+ // The destination port need not be open, unlike the source port.
+ if (!endpoints_[port])
+ return MOJO_RESULT_FAILED_PRECONDITION;
+
+ // The endpoint's |EnqueueMessage()| may not report failure.
+ endpoints_[port]->OnReadMessage(reading_message);
+ return MOJO_RESULT_OK;
+}
+
MojoResult MessagePipe::EnqueueMessageNoLock(
unsigned port,
scoped_ptr<MessageInTransit> message,
« no previous file with comments | « third_party/mojo/src/mojo/edk/system/message_pipe.h ('k') | third_party/mojo/src/mojo/edk/system/message_pipe_dispatcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698