OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "mojo/converters/surfaces/surfaces_type_converters.h" | 5 #include "mojo/converters/surfaces/surfaces_type_converters.h" |
6 | 6 |
7 #include "base/macros.h" | 7 #include "base/macros.h" |
8 #include "cc/output/compositor_frame.h" | 8 #include "cc/output/compositor_frame.h" |
| 9 #include "cc/output/compositor_frame_metadata.h" |
9 #include "cc/output/delegated_frame_data.h" | 10 #include "cc/output/delegated_frame_data.h" |
10 #include "cc/quads/debug_border_draw_quad.h" | 11 #include "cc/quads/debug_border_draw_quad.h" |
11 #include "cc/quads/draw_quad.h" | 12 #include "cc/quads/draw_quad.h" |
12 #include "cc/quads/render_pass.h" | 13 #include "cc/quads/render_pass.h" |
13 #include "cc/quads/render_pass_draw_quad.h" | 14 #include "cc/quads/render_pass_draw_quad.h" |
14 #include "cc/quads/shared_quad_state.h" | 15 #include "cc/quads/shared_quad_state.h" |
15 #include "cc/quads/solid_color_draw_quad.h" | 16 #include "cc/quads/solid_color_draw_quad.h" |
16 #include "cc/quads/surface_draw_quad.h" | 17 #include "cc/quads/surface_draw_quad.h" |
17 #include "cc/quads/texture_draw_quad.h" | 18 #include "cc/quads/texture_draw_quad.h" |
18 #include "cc/quads/tile_draw_quad.h" | 19 #include "cc/quads/tile_draw_quad.h" |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
56 input->quad_layer_bounds.To<gfx::Size>(), | 57 input->quad_layer_bounds.To<gfx::Size>(), |
57 input->visible_quad_layer_rect.To<gfx::Rect>(), | 58 input->visible_quad_layer_rect.To<gfx::Rect>(), |
58 input->clip_rect.To<gfx::Rect>(), input->is_clipped, | 59 input->clip_rect.To<gfx::Rect>(), input->is_clipped, |
59 input->opacity, | 60 input->opacity, |
60 static_cast<::SkXfermode::Mode>(input->blend_mode), | 61 static_cast<::SkXfermode::Mode>(input->blend_mode), |
61 input->sorting_context_id); | 62 input->sorting_context_id); |
62 return state; | 63 return state; |
63 } | 64 } |
64 | 65 |
65 bool ConvertDrawQuad(const QuadPtr& input, | 66 bool ConvertDrawQuad(const QuadPtr& input, |
| 67 const CompositorFrameMetadataPtr& metadata, |
66 cc::SharedQuadState* sqs, | 68 cc::SharedQuadState* sqs, |
67 cc::RenderPass* render_pass, | 69 cc::RenderPass* render_pass, |
68 CustomSurfaceConverter* custom_converter) { | 70 CustomSurfaceConverter* custom_converter) { |
69 switch (input->material) { | 71 switch (input->material) { |
70 case MATERIAL_DEBUG_BORDER: { | 72 case MATERIAL_DEBUG_BORDER: { |
71 cc::DebugBorderDrawQuad* debug_border_quad = | 73 cc::DebugBorderDrawQuad* debug_border_quad = |
72 render_pass->CreateAndAppendDrawQuad<cc::DebugBorderDrawQuad>(); | 74 render_pass->CreateAndAppendDrawQuad<cc::DebugBorderDrawQuad>(); |
73 debug_border_quad->SetAll( | 75 debug_border_quad->SetAll( |
74 sqs, | 76 sqs, |
75 input->rect.To<gfx::Rect>(), | 77 input->rect.To<gfx::Rect>(), |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
117 input->needs_blending, | 119 input->needs_blending, |
118 input->solid_color_quad_state->color.To<SkColor>(), | 120 input->solid_color_quad_state->color.To<SkColor>(), |
119 input->solid_color_quad_state->force_anti_aliasing_off); | 121 input->solid_color_quad_state->force_anti_aliasing_off); |
120 break; | 122 break; |
121 } | 123 } |
122 case MATERIAL_SURFACE_CONTENT: { | 124 case MATERIAL_SURFACE_CONTENT: { |
123 if (input->surface_quad_state.is_null()) | 125 if (input->surface_quad_state.is_null()) |
124 return false; | 126 return false; |
125 | 127 |
126 if (custom_converter) { | 128 if (custom_converter) { |
127 return custom_converter->ConvertSurfaceDrawQuad(input, | 129 return custom_converter->ConvertSurfaceDrawQuad(input, metadata, sqs, |
128 sqs, | |
129 render_pass); | 130 render_pass); |
130 } | 131 } |
131 cc::SurfaceDrawQuad* surface_quad = | 132 cc::SurfaceDrawQuad* surface_quad = |
132 render_pass->CreateAndAppendDrawQuad<cc::SurfaceDrawQuad>(); | 133 render_pass->CreateAndAppendDrawQuad<cc::SurfaceDrawQuad>(); |
133 surface_quad->SetAll( | 134 surface_quad->SetAll( |
134 sqs, | 135 sqs, |
135 input->rect.To<gfx::Rect>(), | 136 input->rect.To<gfx::Rect>(), |
136 input->opaque_rect.To<gfx::Rect>(), | 137 input->opaque_rect.To<gfx::Rect>(), |
137 input->visible_rect.To<gfx::Rect>(), | 138 input->visible_rect.To<gfx::Rect>(), |
138 input->needs_blending, | 139 input->needs_blending, |
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
420 // We should copy all shared quad states. | 421 // We should copy all shared quad states. |
421 DCHECK_EQ(next_sqs_iter.index(), shared_quad_state.size()); | 422 DCHECK_EQ(next_sqs_iter.index(), shared_quad_state.size()); |
422 pass->quads = quads.Pass(); | 423 pass->quads = quads.Pass(); |
423 pass->shared_quad_states = shared_quad_state.Pass(); | 424 pass->shared_quad_states = shared_quad_state.Pass(); |
424 return pass.Pass(); | 425 return pass.Pass(); |
425 } | 426 } |
426 | 427 |
427 // static | 428 // static |
428 scoped_ptr<cc::RenderPass> ConvertToRenderPass( | 429 scoped_ptr<cc::RenderPass> ConvertToRenderPass( |
429 const mojo::PassPtr& input, | 430 const mojo::PassPtr& input, |
| 431 const mojo::CompositorFrameMetadataPtr& metadata, |
430 CustomSurfaceConverter* custom_converter) { | 432 CustomSurfaceConverter* custom_converter) { |
431 scoped_ptr<cc::RenderPass> pass = cc::RenderPass::Create( | 433 scoped_ptr<cc::RenderPass> pass = cc::RenderPass::Create( |
432 input->shared_quad_states.size(), input->quads.size()); | 434 input->shared_quad_states.size(), input->quads.size()); |
433 pass->SetAll(input->id.To<cc::RenderPassId>(), | 435 pass->SetAll(input->id.To<cc::RenderPassId>(), |
434 input->output_rect.To<gfx::Rect>(), | 436 input->output_rect.To<gfx::Rect>(), |
435 input->damage_rect.To<gfx::Rect>(), | 437 input->damage_rect.To<gfx::Rect>(), |
436 input->transform_to_root_target.To<gfx::Transform>(), | 438 input->transform_to_root_target.To<gfx::Transform>(), |
437 input->has_transparent_background); | 439 input->has_transparent_background); |
438 for (size_t i = 0; i < input->shared_quad_states.size(); ++i) { | 440 for (size_t i = 0; i < input->shared_quad_states.size(); ++i) { |
439 ConvertSharedQuadState(input->shared_quad_states[i], pass.get()); | 441 ConvertSharedQuadState(input->shared_quad_states[i], pass.get()); |
440 } | 442 } |
441 cc::SharedQuadStateList::Iterator sqs_iter = | 443 cc::SharedQuadStateList::Iterator sqs_iter = |
442 pass->shared_quad_state_list.begin(); | 444 pass->shared_quad_state_list.begin(); |
443 for (size_t i = 0; i < input->quads.size(); ++i) { | 445 for (size_t i = 0; i < input->quads.size(); ++i) { |
444 QuadPtr quad = input->quads[i].Pass(); | 446 QuadPtr quad = input->quads[i].Pass(); |
445 while (quad->shared_quad_state_index > sqs_iter.index()) { | 447 while (quad->shared_quad_state_index > sqs_iter.index()) { |
446 ++sqs_iter; | 448 ++sqs_iter; |
447 } | 449 } |
448 if (!ConvertDrawQuad(quad, *sqs_iter, pass.get(), custom_converter)) | 450 if (!ConvertDrawQuad(quad, metadata, *sqs_iter, pass.get(), |
| 451 custom_converter)) |
449 return scoped_ptr<cc::RenderPass>(); | 452 return scoped_ptr<cc::RenderPass>(); |
450 } | 453 } |
451 return pass.Pass(); | 454 return pass.Pass(); |
452 } | 455 } |
453 | 456 |
454 // static | 457 // static |
455 scoped_ptr<cc::RenderPass> | 458 scoped_ptr<cc::RenderPass> |
456 TypeConverter<scoped_ptr<cc::RenderPass>, PassPtr>::Convert( | 459 TypeConverter<scoped_ptr<cc::RenderPass>, PassPtr>::Convert( |
457 const PassPtr& input) { | 460 const PassPtr& input) { |
458 return ConvertToRenderPass(input, nullptr /* CustomSurfaceConverter */); | 461 mojo::CompositorFrameMetadataPtr metadata; |
| 462 return ConvertToRenderPass(input, metadata, |
| 463 nullptr /* CustomSurfaceConverter */); |
459 } | 464 } |
460 | 465 |
461 // static | 466 // static |
462 MailboxPtr TypeConverter<MailboxPtr, gpu::Mailbox>::Convert( | 467 MailboxPtr TypeConverter<MailboxPtr, gpu::Mailbox>::Convert( |
463 const gpu::Mailbox& input) { | 468 const gpu::Mailbox& input) { |
464 Array<int8_t> name(64); | 469 Array<int8_t> name(64); |
465 for (int i = 0; i < 64; ++i) { | 470 for (int i = 0; i < 64; ++i) { |
466 name[i] = input.name[i]; | 471 name[i] = input.name[i]; |
467 } | 472 } |
468 MailboxPtr mailbox(Mailbox::New()); | 473 MailboxPtr mailbox(Mailbox::New()); |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
592 TypeConverter<cc::ReturnedResourceArray, Array<ReturnedResourcePtr>>::Convert( | 597 TypeConverter<cc::ReturnedResourceArray, Array<ReturnedResourcePtr>>::Convert( |
593 const Array<ReturnedResourcePtr>& input) { | 598 const Array<ReturnedResourcePtr>& input) { |
594 cc::ReturnedResourceArray resources(input.size()); | 599 cc::ReturnedResourceArray resources(input.size()); |
595 for (size_t i = 0; i < input.size(); ++i) { | 600 for (size_t i = 0; i < input.size(); ++i) { |
596 resources[i] = input[i].To<cc::ReturnedResource>(); | 601 resources[i] = input[i].To<cc::ReturnedResource>(); |
597 } | 602 } |
598 return resources; | 603 return resources; |
599 } | 604 } |
600 | 605 |
601 // static | 606 // static |
| 607 CompositorFrameMetadataPtr |
| 608 TypeConverter<CompositorFrameMetadataPtr, cc::CompositorFrameMetadata>::Convert( |
| 609 const cc::CompositorFrameMetadata& input) { |
| 610 CompositorFrameMetadataPtr metadata = CompositorFrameMetadata::New(); |
| 611 metadata->device_scale_factor = input.device_scale_factor; |
| 612 return metadata.Pass(); |
| 613 } |
| 614 |
| 615 // static |
| 616 cc::CompositorFrameMetadata |
| 617 TypeConverter<cc::CompositorFrameMetadata, CompositorFrameMetadataPtr>::Convert( |
| 618 const CompositorFrameMetadataPtr& input) { |
| 619 cc::CompositorFrameMetadata metadata; |
| 620 metadata.device_scale_factor = input->device_scale_factor; |
| 621 return metadata; |
| 622 } |
| 623 |
| 624 // static |
602 CompositorFramePtr | 625 CompositorFramePtr |
603 TypeConverter<CompositorFramePtr, cc::CompositorFrame>::Convert( | 626 TypeConverter<CompositorFramePtr, cc::CompositorFrame>::Convert( |
604 const cc::CompositorFrame& input) { | 627 const cc::CompositorFrame& input) { |
605 CompositorFramePtr frame = CompositorFrame::New(); | 628 CompositorFramePtr frame = CompositorFrame::New(); |
606 DCHECK(input.delegated_frame_data); | 629 DCHECK(input.delegated_frame_data); |
607 cc::DelegatedFrameData* frame_data = input.delegated_frame_data.get(); | 630 cc::DelegatedFrameData* frame_data = input.delegated_frame_data.get(); |
608 frame->resources = | 631 frame->resources = |
609 Array<TransferableResourcePtr>::From(frame_data->resource_list); | 632 Array<TransferableResourcePtr>::From(frame_data->resource_list); |
| 633 frame->metadata = CompositorFrameMetadata::From(input.metadata); |
610 const cc::RenderPassList& pass_list = frame_data->render_pass_list; | 634 const cc::RenderPassList& pass_list = frame_data->render_pass_list; |
611 frame->passes = Array<PassPtr>::New(pass_list.size()); | 635 frame->passes = Array<PassPtr>::New(pass_list.size()); |
612 for (size_t i = 0; i < pass_list.size(); ++i) { | 636 for (size_t i = 0; i < pass_list.size(); ++i) { |
613 frame->passes[i] = Pass::From(*pass_list[i]); | 637 frame->passes[i] = Pass::From(*pass_list[i]); |
614 } | 638 } |
615 return frame.Pass(); | 639 return frame.Pass(); |
616 } | 640 } |
617 | 641 |
618 // static | 642 // static |
619 scoped_ptr<cc::CompositorFrame> ConvertToCompositorFrame( | 643 scoped_ptr<cc::CompositorFrame> ConvertToCompositorFrame( |
620 const mojo::CompositorFramePtr& input, | 644 const mojo::CompositorFramePtr& input, |
621 CustomSurfaceConverter* custom_converter) { | 645 CustomSurfaceConverter* custom_converter) { |
622 scoped_ptr<cc::DelegatedFrameData> frame_data(new cc::DelegatedFrameData); | 646 scoped_ptr<cc::DelegatedFrameData> frame_data(new cc::DelegatedFrameData); |
623 frame_data->device_scale_factor = 1.f; | 647 frame_data->device_scale_factor = 1.f; |
624 frame_data->resource_list = | 648 frame_data->resource_list = |
625 input->resources.To<cc::TransferableResourceArray>(); | 649 input->resources.To<cc::TransferableResourceArray>(); |
626 frame_data->render_pass_list.reserve(input->passes.size()); | 650 frame_data->render_pass_list.reserve(input->passes.size()); |
627 for (size_t i = 0; i < input->passes.size(); ++i) { | 651 for (size_t i = 0; i < input->passes.size(); ++i) { |
628 scoped_ptr<cc::RenderPass> pass = | 652 scoped_ptr<cc::RenderPass> pass = ConvertToRenderPass( |
629 ConvertToRenderPass(input->passes[i], custom_converter); | 653 input->passes[i], input->metadata, custom_converter); |
630 if (!pass) | 654 if (!pass) |
631 return scoped_ptr<cc::CompositorFrame>(); | 655 return scoped_ptr<cc::CompositorFrame>(); |
632 frame_data->render_pass_list.push_back(pass.Pass()); | 656 frame_data->render_pass_list.push_back(pass.Pass()); |
633 } | 657 } |
634 scoped_ptr<cc::CompositorFrame> frame(new cc::CompositorFrame); | 658 scoped_ptr<cc::CompositorFrame> frame(new cc::CompositorFrame); |
| 659 cc::CompositorFrameMetadata metadata = |
| 660 input->metadata.To<cc::CompositorFrameMetadata>(); |
635 frame->delegated_frame_data = frame_data.Pass(); | 661 frame->delegated_frame_data = frame_data.Pass(); |
636 return frame.Pass(); | 662 return frame.Pass(); |
637 } | 663 } |
638 | 664 |
639 // static | 665 // static |
640 scoped_ptr<cc::CompositorFrame> | 666 scoped_ptr<cc::CompositorFrame> |
641 TypeConverter<scoped_ptr<cc::CompositorFrame>, CompositorFramePtr>::Convert( | 667 TypeConverter<scoped_ptr<cc::CompositorFrame>, CompositorFramePtr>::Convert( |
642 const CompositorFramePtr& input) { | 668 const CompositorFramePtr& input) { |
643 return ConvertToCompositorFrame(input, nullptr); | 669 return ConvertToCompositorFrame(input, nullptr); |
644 } | 670 } |
645 | 671 |
646 } // namespace mojo | 672 } // namespace mojo |
OLD | NEW |