summaryrefslogtreecommitdiffstats
path: root/ipc/ipc_message_utils.cc
diff options
context:
space:
mode:
authorpiman@chromium.org <piman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-31 09:27:31 +0000
committerpiman@chromium.org <piman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-31 09:27:31 +0000
commit48328ffa464e69a526df2240320522e7272111ec (patch)
treecd1e95bacdd9523376374d1740445a63c42757f7 /ipc/ipc_message_utils.cc
parent5eed857e813b68b4542419709f47205bcf275190 (diff)
downloadchromium_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/ipc_message_utils.cc')
-rw-r--r--ipc/ipc_message_utils.cc23
1 files changed, 2 insertions, 21 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;
}