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


CrOS-Libchrome-Original-Commit: 48328ffa464e69a526df2240320522e7272111ec
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 @@
   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;
   }