summaryrefslogtreecommitdiffstats
path: root/ipc/ipc_message_utils_impl.h
diff options
context:
space:
mode:
authorerg@google.com <erg@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-13 20:43:58 +0000
committererg@google.com <erg@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-13 20:43:58 +0000
commit55b4e21b1acd4b82feb69017dfb65b5b74b070ba (patch)
tree8345980f02754d903b5e7111312ff04e810ba5aa /ipc/ipc_message_utils_impl.h
parent487cf3d8071742ef320a2d074eb11dc8bd33f4cf (diff)
downloadchromium_src-55b4e21b1acd4b82feb69017dfb65b5b74b070ba.zip
chromium_src-55b4e21b1acd4b82feb69017dfb65b5b74b070ba.tar.gz
chromium_src-55b4e21b1acd4b82feb69017dfb65b5b74b070ba.tar.bz2
FBTF: Mark the Read methods in the IPC subsystem as noinline.
This forces all the ReadParam template junk to expand once in the *_messages.cc file, instead of at every Read() call site. Without the compiler-specific annotation, this builds and links in debug mode, but doesn't link in release mode because the individual Read() methods generated were inlined into the subclass Log() methods, causing disaster on the release builders, but not on the trybots or locally. BUG=51411 TEST=none Review URL: http://codereview.chromium.org/3160008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@56081 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ipc/ipc_message_utils_impl.h')
-rw-r--r--ipc/ipc_message_utils_impl.h25
1 files changed, 21 insertions, 4 deletions
diff --git a/ipc/ipc_message_utils_impl.h b/ipc/ipc_message_utils_impl.h
index 53c7986..715df8f 100644
--- a/ipc/ipc_message_utils_impl.h
+++ b/ipc/ipc_message_utils_impl.h
@@ -18,8 +18,14 @@ MessageWithTuple<ParamType>::MessageWithTuple(
WriteParam(this, p);
}
-// TODO(erg): Migrate MessageWithTuple<ParamType>::Read() here once I figure
-// out why having the definition here doesn't export the symbols.
+template <class ParamType>
+bool MessageWithTuple<ParamType>::Read(const Message* msg, Param* p) {
+ void* iter = NULL;
+ if (ReadParam(msg, &iter, p))
+ return true;
+ NOTREACHED() << "Error deserializing message " << msg->type();
+ return false;
+}
// We can't migrate the template for Log() to MessageWithTuple, because each
// subclass needs to have Log() to call Read(), which instantiates the above
@@ -35,8 +41,19 @@ MessageWithReply<SendParamType, ReplyParamType>::MessageWithReply(
WriteParam(this, send);
}
-// TODO(erg): Migrate ReadSendParam()/ReadReplyParam() here when we can force
-// the visibility/linkage.
+template <class SendParamType, class ReplyParamType>
+bool MessageWithReply<SendParamType, ReplyParamType>::ReadSendParam(
+ const Message* msg, SendParam* p) {
+ void* iter = SyncMessage::GetDataIterator(msg);
+ return ReadParam(msg, &iter, p);
+}
+
+template <class SendParamType, class ReplyParamType>
+bool MessageWithReply<SendParamType, ReplyParamType>::ReadReplyParam(
+ const Message* msg, typename TupleTypes<ReplyParam>::ValueTuple* p) {
+ void* iter = SyncMessage::GetDataIterator(msg);
+ return ReadParam(msg, &iter, p);
+}
} // namespace IPC