OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/common/cc_messages.h" | 5 #include "content/common/cc_messages.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
| 10 #include "base/numerics/safe_conversions.h" |
10 #include "cc/output/compositor_frame.h" | 11 #include "cc/output/compositor_frame.h" |
11 #include "cc/output/filter_operations.h" | 12 #include "cc/output/filter_operations.h" |
12 #include "cc/quads/draw_quad.h" | 13 #include "cc/quads/draw_quad.h" |
13 #include "cc/quads/largest_draw_quad.h" | 14 #include "cc/quads/largest_draw_quad.h" |
14 #include "cc/quads/render_pass_id.h" | 15 #include "cc/quads/render_pass_id.h" |
15 #include "content/public/common/common_param_traits.h" | 16 #include "content/public/common/common_param_traits.h" |
16 #include "third_party/skia/include/core/SkData.h" | 17 #include "third_party/skia/include/core/SkData.h" |
17 #include "third_party/skia/include/core/SkFlattenableSerialization.h" | 18 #include "third_party/skia/include/core/SkFlattenableSerialization.h" |
18 #include "ui/gfx/transform.h" | 19 #include "ui/gfx/transform.h" |
19 | 20 |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
179 break; | 180 break; |
180 case cc::FilterOperation::ALPHA_THRESHOLD: | 181 case cc::FilterOperation::ALPHA_THRESHOLD: |
181 NOTREACHED(); | 182 NOTREACHED(); |
182 break; | 183 break; |
183 } | 184 } |
184 l->append(")"); | 185 l->append(")"); |
185 } | 186 } |
186 | 187 |
187 void ParamTraits<cc::FilterOperations>::Write(base::Pickle* m, | 188 void ParamTraits<cc::FilterOperations>::Write(base::Pickle* m, |
188 const param_type& p) { | 189 const param_type& p) { |
189 WriteParam(m, p.size()); | 190 WriteParam(m, base::checked_cast<uint32_t>(p.size())); |
190 for (std::size_t i = 0; i < p.size(); ++i) { | 191 for (std::size_t i = 0; i < p.size(); ++i) { |
191 WriteParam(m, p.at(i)); | 192 WriteParam(m, p.at(i)); |
192 } | 193 } |
193 } | 194 } |
194 | 195 |
195 bool ParamTraits<cc::FilterOperations>::Read(const base::Pickle* m, | 196 bool ParamTraits<cc::FilterOperations>::Read(const base::Pickle* m, |
196 base::PickleIterator* iter, | 197 base::PickleIterator* iter, |
197 param_type* r) { | 198 param_type* r) { |
198 size_t count; | 199 uint32_t count; |
199 if (!ReadParam(m, iter, &count)) | 200 if (!ReadParam(m, iter, &count)) |
200 return false; | 201 return false; |
201 | 202 |
202 for (std::size_t i = 0; i < count; ++i) { | 203 for (std::size_t i = 0; i < count; ++i) { |
203 cc::FilterOperation op = cc::FilterOperation::CreateEmptyFilter(); | 204 cc::FilterOperation op = cc::FilterOperation::CreateEmptyFilter(); |
204 if (!ReadParam(m, iter, &op)) | 205 if (!ReadParam(m, iter, &op)) |
205 return false; | 206 return false; |
206 r->Append(op); | 207 r->Append(op); |
207 } | 208 } |
208 return true; | 209 return true; |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
294 } | 295 } |
295 l->append(") "); | 296 l->append(") "); |
296 } | 297 } |
297 | 298 |
298 void ParamTraits<cc::RenderPass>::Write(base::Pickle* m, const param_type& p) { | 299 void ParamTraits<cc::RenderPass>::Write(base::Pickle* m, const param_type& p) { |
299 WriteParam(m, p.id); | 300 WriteParam(m, p.id); |
300 WriteParam(m, p.output_rect); | 301 WriteParam(m, p.output_rect); |
301 WriteParam(m, p.damage_rect); | 302 WriteParam(m, p.damage_rect); |
302 WriteParam(m, p.transform_to_root_target); | 303 WriteParam(m, p.transform_to_root_target); |
303 WriteParam(m, p.has_transparent_background); | 304 WriteParam(m, p.has_transparent_background); |
304 WriteParam(m, p.quad_list.size()); | 305 WriteParam(m, base::checked_cast<uint32_t>(p.quad_list.size())); |
305 | 306 |
306 cc::SharedQuadStateList::ConstIterator shared_quad_state_iter = | 307 cc::SharedQuadStateList::ConstIterator shared_quad_state_iter = |
307 p.shared_quad_state_list.begin(); | 308 p.shared_quad_state_list.begin(); |
308 cc::SharedQuadStateList::ConstIterator last_shared_quad_state_iter = | 309 cc::SharedQuadStateList::ConstIterator last_shared_quad_state_iter = |
309 p.shared_quad_state_list.end(); | 310 p.shared_quad_state_list.end(); |
310 for (const auto& quad : p.quad_list) { | 311 for (const auto& quad : p.quad_list) { |
311 DCHECK(quad->rect.Contains(quad->visible_rect)) | 312 DCHECK(quad->rect.Contains(quad->visible_rect)) |
312 << quad->material << " rect: " << quad->rect.ToString() | 313 << quad->material << " rect: " << quad->rect.ToString() |
313 << " visible_rect: " << quad->visible_rect.ToString(); | 314 << " visible_rect: " << quad->visible_rect.ToString(); |
314 DCHECK(quad->opaque_rect.IsEmpty() || | 315 DCHECK(quad->opaque_rect.IsEmpty() || |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
398 } | 399 } |
399 | 400 |
400 bool ParamTraits<cc::RenderPass>::Read(const base::Pickle* m, | 401 bool ParamTraits<cc::RenderPass>::Read(const base::Pickle* m, |
401 base::PickleIterator* iter, | 402 base::PickleIterator* iter, |
402 param_type* p) { | 403 param_type* p) { |
403 cc::RenderPassId id; | 404 cc::RenderPassId id; |
404 gfx::Rect output_rect; | 405 gfx::Rect output_rect; |
405 gfx::Rect damage_rect; | 406 gfx::Rect damage_rect; |
406 gfx::Transform transform_to_root_target; | 407 gfx::Transform transform_to_root_target; |
407 bool has_transparent_background; | 408 bool has_transparent_background; |
408 size_t quad_list_size; | 409 uint32_t quad_list_size; |
409 | 410 |
410 if (!ReadParam(m, iter, &id) || !ReadParam(m, iter, &output_rect) || | 411 if (!ReadParam(m, iter, &id) || !ReadParam(m, iter, &output_rect) || |
411 !ReadParam(m, iter, &damage_rect) || | 412 !ReadParam(m, iter, &damage_rect) || |
412 !ReadParam(m, iter, &transform_to_root_target) || | 413 !ReadParam(m, iter, &transform_to_root_target) || |
413 !ReadParam(m, iter, &has_transparent_background) || | 414 !ReadParam(m, iter, &has_transparent_background) || |
414 !ReadParam(m, iter, &quad_list_size)) | 415 !ReadParam(m, iter, &quad_list_size)) |
415 return false; | 416 return false; |
416 | 417 |
417 p->SetAll(id, | 418 p->SetAll(id, |
418 output_rect, | 419 output_rect, |
419 damage_rect, | 420 damage_rect, |
420 transform_to_root_target, | 421 transform_to_root_target, |
421 has_transparent_background); | 422 has_transparent_background); |
422 | 423 |
423 for (size_t i = 0; i < quad_list_size; ++i) { | 424 for (uint32_t i = 0; i < quad_list_size; ++i) { |
424 cc::DrawQuad::Material material; | 425 cc::DrawQuad::Material material; |
425 base::PickleIterator temp_iter = *iter; | 426 base::PickleIterator temp_iter = *iter; |
426 if (!ReadParam(m, &temp_iter, &material)) | 427 if (!ReadParam(m, &temp_iter, &material)) |
427 return false; | 428 return false; |
428 | 429 |
429 cc::DrawQuad* draw_quad = NULL; | 430 cc::DrawQuad* draw_quad = NULL; |
430 switch (material) { | 431 switch (material) { |
431 case cc::DrawQuad::DEBUG_BORDER: | 432 case cc::DrawQuad::DEBUG_BORDER: |
432 draw_quad = ReadDrawQuad<cc::DebugBorderDrawQuad>(m, iter, p); | 433 draw_quad = ReadDrawQuad<cc::DebugBorderDrawQuad>(m, iter, p); |
433 break; | 434 break; |
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
672 size_t to_reserve = sizeof(p.device_scale_factor); | 673 size_t to_reserve = sizeof(p.device_scale_factor); |
673 to_reserve += p.resource_list.size() * sizeof(cc::TransferableResource); | 674 to_reserve += p.resource_list.size() * sizeof(cc::TransferableResource); |
674 for (const auto& pass : p.render_pass_list) { | 675 for (const auto& pass : p.render_pass_list) { |
675 to_reserve += sizeof(size_t) * 2; | 676 to_reserve += sizeof(size_t) * 2; |
676 to_reserve += ReserveSizeForRenderPassWrite(*pass); | 677 to_reserve += ReserveSizeForRenderPassWrite(*pass); |
677 } | 678 } |
678 m->Reserve(to_reserve); | 679 m->Reserve(to_reserve); |
679 | 680 |
680 WriteParam(m, p.device_scale_factor); | 681 WriteParam(m, p.device_scale_factor); |
681 WriteParam(m, p.resource_list); | 682 WriteParam(m, p.resource_list); |
682 WriteParam(m, p.render_pass_list.size()); | 683 WriteParam(m, base::checked_cast<uint32_t>(p.render_pass_list.size())); |
683 for (const auto& pass : p.render_pass_list) { | 684 for (const auto& pass : p.render_pass_list) { |
684 WriteParam(m, pass->quad_list.size()); | 685 WriteParam(m, base::checked_cast<uint32_t>(pass->quad_list.size())); |
685 WriteParam(m, pass->shared_quad_state_list.size()); | 686 WriteParam(m, base::checked_cast<uint32_t>( |
| 687 pass->shared_quad_state_list.size())); |
686 WriteParam(m, *pass); | 688 WriteParam(m, *pass); |
687 } | 689 } |
688 } | 690 } |
689 | 691 |
690 bool ParamTraits<cc::DelegatedFrameData>::Read(const base::Pickle* m, | 692 bool ParamTraits<cc::DelegatedFrameData>::Read(const base::Pickle* m, |
691 base::PickleIterator* iter, | 693 base::PickleIterator* iter, |
692 param_type* p) { | 694 param_type* p) { |
693 if (!ReadParam(m, iter, &p->device_scale_factor)) | 695 if (!ReadParam(m, iter, &p->device_scale_factor)) |
694 return false; | 696 return false; |
695 | 697 |
696 const static size_t kMaxRenderPasses = 10000; | 698 const static size_t kMaxRenderPasses = 10000; |
697 const static size_t kMaxSharedQuadStateListSize = 100000; | 699 const static size_t kMaxSharedQuadStateListSize = 100000; |
698 const static size_t kMaxQuadListSize = 1000000; | 700 const static size_t kMaxQuadListSize = 1000000; |
699 | 701 |
700 std::set<cc::RenderPassId> pass_set; | 702 std::set<cc::RenderPassId> pass_set; |
701 | 703 |
702 size_t num_render_passes; | 704 uint32_t num_render_passes; |
703 if (!ReadParam(m, iter, &p->resource_list) || | 705 if (!ReadParam(m, iter, &p->resource_list) || |
704 !ReadParam(m, iter, &num_render_passes) || | 706 !ReadParam(m, iter, &num_render_passes) || |
705 num_render_passes > kMaxRenderPasses || num_render_passes == 0) | 707 num_render_passes > kMaxRenderPasses || num_render_passes == 0) |
706 return false; | 708 return false; |
707 for (size_t i = 0; i < num_render_passes; ++i) { | 709 for (uint32_t i = 0; i < num_render_passes; ++i) { |
708 size_t quad_list_size; | 710 uint32_t quad_list_size; |
709 size_t shared_quad_state_list_size; | 711 uint32_t shared_quad_state_list_size; |
710 if (!ReadParam(m, iter, &quad_list_size) || | 712 if (!ReadParam(m, iter, &quad_list_size) || |
711 !ReadParam(m, iter, &shared_quad_state_list_size) || | 713 !ReadParam(m, iter, &shared_quad_state_list_size) || |
712 quad_list_size > kMaxQuadListSize || | 714 quad_list_size > kMaxQuadListSize || |
713 shared_quad_state_list_size > kMaxSharedQuadStateListSize) | 715 shared_quad_state_list_size > kMaxSharedQuadStateListSize) |
714 return false; | 716 return false; |
715 scoped_ptr<cc::RenderPass> render_pass = | 717 scoped_ptr<cc::RenderPass> render_pass = |
716 cc::RenderPass::Create(shared_quad_state_list_size, quad_list_size); | 718 cc::RenderPass::Create( |
| 719 static_cast<size_t>(shared_quad_state_list_size), |
| 720 static_cast<size_t>(quad_list_size)); |
717 if (!ReadParam(m, iter, render_pass.get())) | 721 if (!ReadParam(m, iter, render_pass.get())) |
718 return false; | 722 return false; |
719 // Validate that each RenderPassDrawQuad points at a valid RenderPass | 723 // Validate that each RenderPassDrawQuad points at a valid RenderPass |
720 // earlier in the frame. | 724 // earlier in the frame. |
721 for (const auto* quad : render_pass->quad_list) { | 725 for (const auto* quad : render_pass->quad_list) { |
722 if (quad->material != cc::DrawQuad::RENDER_PASS) | 726 if (quad->material != cc::DrawQuad::RENDER_PASS) |
723 continue; | 727 continue; |
724 const cc::RenderPassDrawQuad* rpdq = | 728 const cc::RenderPassDrawQuad* rpdq = |
725 cc::RenderPassDrawQuad::MaterialCast(quad); | 729 cc::RenderPassDrawQuad::MaterialCast(quad); |
726 if (!pass_set.count(rpdq->render_pass_id)) | 730 if (!pass_set.count(rpdq->render_pass_id)) |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
842 l->append("TextureDrawQuad::OverlayResources(["); | 846 l->append("TextureDrawQuad::OverlayResources(["); |
843 for (size_t i = 0; i < cc::DrawQuad::Resources::kMaxResourceIdCount; ++i) { | 847 for (size_t i = 0; i < cc::DrawQuad::Resources::kMaxResourceIdCount; ++i) { |
844 LogParam(p.size_in_pixels[i], l); | 848 LogParam(p.size_in_pixels[i], l); |
845 if (i < (cc::DrawQuad::Resources::kMaxResourceIdCount - 1)) | 849 if (i < (cc::DrawQuad::Resources::kMaxResourceIdCount - 1)) |
846 l->append(", "); | 850 l->append(", "); |
847 } | 851 } |
848 l->append("])"); | 852 l->append("])"); |
849 } | 853 } |
850 | 854 |
851 } // namespace IPC | 855 } // namespace IPC |
OLD | NEW |