Index: content/common/cc_messages.cc |
diff --git a/content/common/cc_messages.cc b/content/common/cc_messages.cc |
index 04d3af94def7b2723222d07a17c29e100eedafe6..f141d4dfe602f3d5deba605719890af6018758ad 100644 |
--- a/content/common/cc_messages.cc |
+++ b/content/common/cc_messages.cc |
@@ -569,7 +569,68 @@ void ParamTraits<cc::Mailbox>::Log(const param_type& p, std::string* l) { |
*l += base::StringPrintf("%02x", p.name[i]); |
} |
-void ParamTraits<cc::CompositorFrame>::Write(Message* m, const param_type& p) { |
+namespace { |
+ enum CompositorFrameType { |
+ DELEGATED_FRAME, |
+ GL_FRAME, |
+ }; |
+} |
+ |
+void ParamTraits<cc::CompositorFrame>::Write(Message* m, |
+ const param_type& p) { |
+ WriteParam(m, p.metadata); |
+ if (p.delegated_frame_data) { |
+ DCHECK(!p.gl_frame_data); |
+ WriteParam(m, static_cast<int>(DELEGATED_FRAME)); |
+ WriteParam(m, *p.delegated_frame_data); |
+ } else { |
+ DCHECK(p.gl_frame_data); |
+ WriteParam(m, static_cast<int>(GL_FRAME)); |
+ WriteParam(m, *p.gl_frame_data); |
+ } |
+} |
+ |
+bool ParamTraits<cc::CompositorFrame>::Read(const Message* m, |
+ PickleIterator* iter, |
+ param_type* p) { |
+ if (!ReadParam(m, iter, &p->metadata)) |
+ return false; |
+ |
+ int compositor_frame_type; |
+ if (!ReadParam(m, iter, &compositor_frame_type)) |
+ return false; |
+ |
+ switch (compositor_frame_type) { |
+ case DELEGATED_FRAME: |
+ p->delegated_frame_data.reset(new cc::DelegatedFrameData()); |
+ if (!ReadParam(m, iter, p->delegated_frame_data.get())) |
+ return false; |
+ break; |
+ case GL_FRAME: |
+ p->gl_frame_data.reset(new cc::GLFrameData()); |
+ if (!ReadParam(m, iter, p->gl_frame_data.get())) |
+ return false; |
+ break; |
+ default: |
+ return false; |
+ } |
+ return true; |
+} |
+ |
+void ParamTraits<cc::CompositorFrame>::Log(const param_type& p, |
+ std::string* l) { |
+ l->append("CompositorFrame("); |
+ LogParam(p.metadata, l); |
+ l->append(", "); |
+ if (p.delegated_frame_data) |
+ LogParam(*p.delegated_frame_data, l); |
+ else if (p.gl_frame_data) |
+ LogParam(*p.gl_frame_data, l); |
+ l->append(")"); |
+} |
+ |
+void ParamTraits<cc::DelegatedFrameData>::Write(Message* m, |
+ const param_type& p) { |
WriteParam(m, p.size); |
WriteParam(m, p.resource_list); |
WriteParam(m, p.render_pass_list.size()); |
@@ -577,9 +638,9 @@ void ParamTraits<cc::CompositorFrame>::Write(Message* m, const param_type& p) { |
WriteParam(m, *p.render_pass_list[i]); |
} |
-bool ParamTraits<cc::CompositorFrame>::Read(const Message* m, |
- PickleIterator* iter, |
- param_type* p) { |
+bool ParamTraits<cc::DelegatedFrameData>::Read(const Message* m, |
+ PickleIterator* iter, |
+ param_type* p) { |
const static size_t kMaxRenderPasses = 10000; |
size_t num_render_passes; |
@@ -597,9 +658,9 @@ bool ParamTraits<cc::CompositorFrame>::Read(const Message* m, |
return true; |
} |
-void ParamTraits<cc::CompositorFrame>::Log(const param_type& p, |
- std::string* l) { |
- l->append("CompositorFrame("); |
+void ParamTraits<cc::DelegatedFrameData>::Log(const param_type& p, |
+ std::string* l) { |
+ l->append("DelegatedFrameData("); |
LogParam(p.size, l); |
l->append(", "); |
LogParam(p.resource_list, l); |