| Index: cc/ipc/cc_param_traits.cc
|
| diff --git a/cc/ipc/cc_param_traits.cc b/cc/ipc/cc_param_traits.cc
|
| index e3c010026c96e612859d9aa84ecb23dcb84ba4e0..e621e3fc7a213c886817ae8edb91227f698e9f4b 100644
|
| --- a/cc/ipc/cc_param_traits.cc
|
| +++ b/cc/ipc/cc_param_traits.cc
|
| @@ -672,9 +672,62 @@ void ParamTraits<cc::SurfaceId>::Log(const param_type& p, std::string* l) {
|
| l->append(")");
|
| }
|
|
|
| +namespace {
|
| +enum CompositorFrameType {
|
| + NO_FRAME,
|
| + DELEGATED_FRAME,
|
| +};
|
| +}
|
| +
|
| void ParamTraits<cc::CompositorFrame>::Write(base::Pickle* m,
|
| const param_type& p) {
|
| WriteParam(m, p.metadata);
|
| + if (p.delegated_frame_data) {
|
| + WriteParam(m, static_cast<int>(DELEGATED_FRAME));
|
| + WriteParam(m, *p.delegated_frame_data);
|
| + } else {
|
| + WriteParam(m, static_cast<int>(NO_FRAME));
|
| + }
|
| +}
|
| +
|
| +bool ParamTraits<cc::CompositorFrame>::Read(const base::Pickle* m,
|
| + base::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 NO_FRAME:
|
| + 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);
|
| + l->append(")");
|
| +}
|
| +
|
| +void ParamTraits<cc::DelegatedFrameData>::Write(base::Pickle* m,
|
| + const param_type& p) {
|
| + DCHECK_NE(0u, p.render_pass_list.size());
|
| +
|
| size_t to_reserve = 0u;
|
| to_reserve += p.resource_list.size() * sizeof(cc::TransferableResource);
|
| for (const auto& pass : p.render_pass_list) {
|
| @@ -693,12 +746,9 @@ void ParamTraits<cc::CompositorFrame>::Write(base::Pickle* m,
|
| }
|
| }
|
|
|
| -bool ParamTraits<cc::CompositorFrame>::Read(const base::Pickle* m,
|
| - base::PickleIterator* iter,
|
| - param_type* p) {
|
| - if (!ReadParam(m, iter, &p->metadata))
|
| - return false;
|
| -
|
| +bool ParamTraits<cc::DelegatedFrameData>::Read(const base::Pickle* m,
|
| + base::PickleIterator* iter,
|
| + param_type* p) {
|
| const size_t kMaxRenderPasses = 10000;
|
| const size_t kMaxSharedQuadStateListSize = 100000;
|
| const size_t kMaxQuadListSize = 1000000;
|
| @@ -708,7 +758,7 @@ bool ParamTraits<cc::CompositorFrame>::Read(const base::Pickle* m,
|
| uint32_t num_render_passes;
|
| if (!ReadParam(m, iter, &p->resource_list) ||
|
| !ReadParam(m, iter, &num_render_passes) ||
|
| - num_render_passes > kMaxRenderPasses)
|
| + num_render_passes > kMaxRenderPasses || num_render_passes == 0)
|
| return false;
|
| for (uint32_t i = 0; i < num_render_passes; ++i) {
|
| uint32_t quad_list_size;
|
| @@ -736,15 +786,12 @@ bool ParamTraits<cc::CompositorFrame>::Read(const base::Pickle* m,
|
| pass_set.insert(render_pass->id);
|
| p->render_pass_list.push_back(std::move(render_pass));
|
| }
|
| -
|
| return true;
|
| }
|
|
|
| -void ParamTraits<cc::CompositorFrame>::Log(const param_type& p,
|
| - std::string* l) {
|
| - l->append("CompositorFrame(");
|
| - LogParam(p.metadata, l);
|
| - l->append(", ");
|
| +void ParamTraits<cc::DelegatedFrameData>::Log(const param_type& p,
|
| + std::string* l) {
|
| + l->append("DelegatedFrameData(");
|
| LogParam(p.resource_list, l);
|
| l->append(", [");
|
| for (size_t i = 0; i < p.render_pass_list.size(); ++i) {
|
|
|