Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(768)

Unified Diff: content/public/common/common_param_traits.cc

Issue 30593005: IPC pickling optimizations for geometry types. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: ccmessagesperf-geom: maintain check on Rect size from before Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/common/cc_messages.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/public/common/common_param_traits.cc
diff --git a/content/public/common/common_param_traits.cc b/content/public/common/common_param_traits.cc
index f2a5c8a0e9d66798f1030cc6047a4ba0ad1872ee..0501683374c3fa67233cdef8a07985efd1d8f5cd 100644
--- a/content/public/common/common_param_traits.cc
+++ b/content/public/common/common_param_traits.cc
@@ -192,19 +192,21 @@ void ParamTraits<gfx::PointF>::Log(const gfx::PointF& v, std::string* l) {
void ParamTraits<gfx::Size>::Write(Message* m, const gfx::Size& p) {
DCHECK_GE(p.width(), 0);
DCHECK_GE(p.height(), 0);
- m->WriteInt(p.width());
- m->WriteInt(p.height());
+ int values[2] = { p.width(), p.height() };
+ m->WriteBytes(&values, sizeof(int) * 2);
}
bool ParamTraits<gfx::Size>::Read(const Message* m,
PickleIterator* iter,
gfx::Size* r) {
- int w, h;
- if (!m->ReadInt(iter, &w) || w < 0 ||
- !m->ReadInt(iter, &h) || h < 0)
+ const char* char_values;
+ if (!m->ReadBytes(iter, &char_values, sizeof(int) * 2))
return false;
- r->set_width(w);
- r->set_height(h);
+ const int* values = reinterpret_cast<const int*>(char_values);
+ if (values[0] < 0 || values[1] < 0)
+ return false;
+ r->set_width(values[0]);
+ r->set_height(values[1]);
return true;
}
@@ -213,19 +215,19 @@ void ParamTraits<gfx::Size>::Log(const gfx::Size& p, std::string* l) {
}
void ParamTraits<gfx::SizeF>::Write(Message* m, const gfx::SizeF& p) {
- ParamTraits<float>::Write(m, p.width());
- ParamTraits<float>::Write(m, p.height());
+ float values[2] = { p.width(), p.height() };
+ m->WriteBytes(&values, sizeof(float) * 2);
}
bool ParamTraits<gfx::SizeF>::Read(const Message* m,
PickleIterator* iter,
- gfx::SizeF* p) {
- float w, h;
- if (!ParamTraits<float>::Read(m, iter, &w) ||
- !ParamTraits<float>::Read(m, iter, &h))
+ gfx::SizeF* r) {
+ const char* char_values;
+ if (!m->ReadBytes(iter, &char_values, sizeof(float) * 2))
return false;
- p->set_width(w);
- p->set_height(h);
+ const float* values = reinterpret_cast<const float*>(char_values);
+ r->set_width(values[0]);
+ r->set_height(values[1]);
return true;
}
@@ -233,20 +235,20 @@ void ParamTraits<gfx::SizeF>::Log(const gfx::SizeF& p, std::string* l) {
l->append(base::StringPrintf("(%f, %f)", p.width(), p.height()));
}
-void ParamTraits<gfx::Vector2d>::Write(Message* m, const gfx::Vector2d& v) {
- m->WriteInt(v.x());
- m->WriteInt(v.y());
+void ParamTraits<gfx::Vector2d>::Write(Message* m, const gfx::Vector2d& p) {
+ int values[2] = { p.x(), p.y() };
+ m->WriteBytes(&values, sizeof(int) * 2);
}
bool ParamTraits<gfx::Vector2d>::Read(const Message* m,
PickleIterator* iter,
gfx::Vector2d* r) {
- int x, y;
- if (!m->ReadInt(iter, &x) ||
- !m->ReadInt(iter, &y))
+ const char* char_values;
+ if (!m->ReadBytes(iter, &char_values, sizeof(int) * 2))
return false;
- r->set_x(x);
- r->set_y(y);
+ const int* values = reinterpret_cast<const int*>(char_values);
+ r->set_x(values[0]);
+ r->set_y(values[1]);
return true;
}
@@ -254,20 +256,20 @@ void ParamTraits<gfx::Vector2d>::Log(const gfx::Vector2d& v, std::string* l) {
l->append(base::StringPrintf("(%d, %d)", v.x(), v.y()));
}
-void ParamTraits<gfx::Vector2dF>::Write(Message* m, const gfx::Vector2dF& v) {
- ParamTraits<float>::Write(m, v.x());
- ParamTraits<float>::Write(m, v.y());
+void ParamTraits<gfx::Vector2dF>::Write(Message* m, const gfx::Vector2dF& p) {
+ float values[2] = { p.x(), p.y() };
+ m->WriteBytes(&values, sizeof(float) * 2);
}
bool ParamTraits<gfx::Vector2dF>::Read(const Message* m,
PickleIterator* iter,
gfx::Vector2dF* r) {
- float x, y;
- if (!ParamTraits<float>::Read(m, iter, &x) ||
- !ParamTraits<float>::Read(m, iter, &y))
+ const char* char_values;
+ if (!m->ReadBytes(iter, &char_values, sizeof(float) * 2))
return false;
- r->set_x(x);
- r->set_y(y);
+ const float* values = reinterpret_cast<const float*>(char_values);
+ r->set_x(values[0]);
+ r->set_y(values[1]);
return true;
}
@@ -276,20 +278,20 @@ void ParamTraits<gfx::Vector2dF>::Log(const gfx::Vector2dF& v, std::string* l) {
}
void ParamTraits<gfx::Rect>::Write(Message* m, const gfx::Rect& p) {
- WriteParam(m, p.origin());
- WriteParam(m, p.size());
+ int values[4] = { p.x(), p.y(), p.width(), p.height() };
+ m->WriteBytes(&values, sizeof(int) * 4);
}
bool ParamTraits<gfx::Rect>::Read(const Message* m,
PickleIterator* iter,
gfx::Rect* r) {
- gfx::Point origin;
- gfx::Size size;
- if (!ReadParam(m, iter, &origin) ||
- !ReadParam(m, iter, &size))
+ const char* char_values;
+ if (!m->ReadBytes(iter, &char_values, sizeof(int) * 4))
return false;
- r->set_origin(origin);
- r->set_size(size);
+ const int* values = reinterpret_cast<const int*>(char_values);
+ if (values[2] < 0 || values[3] < 0)
+ return false;
+ r->SetRect(values[0], values[1], values[2], values[3]);
return true;
}
@@ -299,25 +301,18 @@ void ParamTraits<gfx::Rect>::Log(const gfx::Rect& p, std::string* l) {
}
void ParamTraits<gfx::RectF>::Write(Message* m, const gfx::RectF& p) {
- ParamTraits<float>::Write(m, p.x());
- ParamTraits<float>::Write(m, p.y());
- ParamTraits<float>::Write(m, p.width());
- ParamTraits<float>::Write(m, p.height());
+ float values[4] = { p.x(), p.y(), p.width(), p.height() };
+ m->WriteBytes(&values, sizeof(float) * 4);
}
bool ParamTraits<gfx::RectF>::Read(const Message* m,
PickleIterator* iter,
gfx::RectF* r) {
- float x, y, w, h;
- if (!ParamTraits<float>::Read(m, iter, &x) ||
- !ParamTraits<float>::Read(m, iter, &y) ||
- !ParamTraits<float>::Read(m, iter, &w) ||
- !ParamTraits<float>::Read(m, iter, &h))
+ const char* char_values;
+ if (!m->ReadBytes(iter, &char_values, sizeof(float) * 4))
return false;
- r->set_x(x);
- r->set_y(y);
- r->set_width(w);
- r->set_height(h);
+ const float* values = reinterpret_cast<const float*>(char_values);
+ r->SetRect(values[0], values[1], values[2], values[3]);
return true;
}
« no previous file with comments | « content/common/cc_messages.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698