diff options
author | piman@chromium.org <piman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-31 09:27:31 +0000 |
---|---|---|
committer | piman@chromium.org <piman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-31 09:27:31 +0000 |
commit | 48328ffa464e69a526df2240320522e7272111ec (patch) | |
tree | cd1e95bacdd9523376374d1740445a63c42757f7 /ipc | |
parent | 5eed857e813b68b4542419709f47205bcf275190 (diff) | |
download | chromium_src-48328ffa464e69a526df2240320522e7272111ec.zip chromium_src-48328ffa464e69a526df2240320522e7272111ec.tar.gz chromium_src-48328ffa464e69a526df2240320522e7272111ec.tar.bz2 |
Optimize ParamTraits<float> and ParamTraits<double>
These function become hot on some benchmarks. WriteData is inefficient because
it writes the length, even though it's known on the reader side (compile-time
constant).
For <float> we can simply use WriteFloat. For <double> we can use WriteBytes
instead of WriteData.
BUG=307480
Review URL: https://codereview.chromium.org/39363002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@232060 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ipc')
-rw-r--r-- | ipc/ipc_message_utils.cc | 23 | ||||
-rw-r--r-- | ipc/ipc_message_utils.h | 8 |
2 files changed, 8 insertions, 23 deletions
diff --git a/ipc/ipc_message_utils.cc b/ipc/ipc_message_utils.cc index 2acddce..c5ace24 100644 --- a/ipc/ipc_message_utils.cc +++ b/ipc/ipc_message_utils.cc @@ -311,37 +311,18 @@ void ParamTraits<unsigned long long>::Log(const param_type& p, std::string* l) { l->append(base::Uint64ToString(p)); } -void ParamTraits<float>::Write(Message* m, const param_type& p) { - m->WriteData(reinterpret_cast<const char*>(&p), sizeof(param_type)); -} - -bool ParamTraits<float>::Read(const Message* m, PickleIterator* iter, - param_type* r) { - const char *data; - int data_size; - if (!m->ReadData(iter, &data, &data_size) || - data_size != sizeof(param_type)) { - NOTREACHED(); - return false; - } - memcpy(r, data, sizeof(param_type)); - return true; -} - void ParamTraits<float>::Log(const param_type& p, std::string* l) { l->append(base::StringPrintf("%e", p)); } void ParamTraits<double>::Write(Message* m, const param_type& p) { - m->WriteData(reinterpret_cast<const char*>(&p), sizeof(param_type)); + m->WriteBytes(reinterpret_cast<const char*>(&p), sizeof(param_type)); } bool ParamTraits<double>::Read(const Message* m, PickleIterator* iter, param_type* r) { const char *data; - int data_size; - if (!m->ReadData(iter, &data, &data_size) || - data_size != sizeof(param_type)) { + if (!m->ReadBytes(iter, &data, sizeof(*r))) { NOTREACHED(); return false; } diff --git a/ipc/ipc_message_utils.h b/ipc/ipc_message_utils.h index 7121c19..e9c0ba0b0 100644 --- a/ipc/ipc_message_utils.h +++ b/ipc/ipc_message_utils.h @@ -216,8 +216,12 @@ struct ParamTraits<unsigned long long> { template <> struct IPC_EXPORT ParamTraits<float> { typedef float param_type; - static void Write(Message* m, const param_type& p); - static bool Read(const Message* m, PickleIterator* iter, param_type* r); + static void Write(Message* m, const param_type& p) { + m->WriteFloat(p); + } + static bool Read(const Message* m, PickleIterator* iter, param_type* r) { + return m->ReadFloat(iter, r); + } static void Log(const param_type& p, std::string* l); }; |