diff options
author | erg@google.com <erg@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-13 20:43:58 +0000 |
---|---|---|
committer | erg@google.com <erg@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-13 20:43:58 +0000 |
commit | 55b4e21b1acd4b82feb69017dfb65b5b74b070ba (patch) | |
tree | 8345980f02754d903b5e7111312ff04e810ba5aa /ipc/ipc_message_utils_impl.h | |
parent | 487cf3d8071742ef320a2d074eb11dc8bd33f4cf (diff) | |
download | chromium_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.h | 25 |
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 |