| Index: mojo/services/public/cpp/surfaces/lib/surfaces_type_converters.cc
|
| diff --git a/mojo/services/public/cpp/surfaces/lib/surfaces_type_converters.cc b/mojo/services/public/cpp/surfaces/lib/surfaces_type_converters.cc
|
| index cca117511c3b5beb5acd47ce68788f4ae43e7cf8..b30f999934b5158a2f3981bb65f6b426c3ce1c7c 100644
|
| --- a/mojo/services/public/cpp/surfaces/lib/surfaces_type_converters.cc
|
| +++ b/mojo/services/public/cpp/surfaces/lib/surfaces_type_converters.cc
|
| @@ -4,6 +4,7 @@
|
|
|
| #include "mojo/services/public/cpp/surfaces/surfaces_type_converters.h"
|
|
|
| +#include "base/macros.h"
|
| #include "cc/output/compositor_frame.h"
|
| #include "cc/output/delegated_frame_data.h"
|
| #include "cc/quads/draw_quad.h"
|
| @@ -16,6 +17,23 @@
|
|
|
| namespace mojo {
|
|
|
| +#define ASSERT_ENUM_VALUES_EQUAL(value) \
|
| + COMPILE_ASSERT(cc::DrawQuad::value == static_cast<cc::DrawQuad::Material>( \
|
| + surfaces::MATERIAL_##value), \
|
| + value##_enum_value_matches)
|
| +
|
| +ASSERT_ENUM_VALUES_EQUAL(CHECKERBOARD);
|
| +ASSERT_ENUM_VALUES_EQUAL(DEBUG_BORDER);
|
| +ASSERT_ENUM_VALUES_EQUAL(IO_SURFACE_CONTENT);
|
| +ASSERT_ENUM_VALUES_EQUAL(PICTURE_CONTENT);
|
| +ASSERT_ENUM_VALUES_EQUAL(RENDER_PASS);
|
| +ASSERT_ENUM_VALUES_EQUAL(SOLID_COLOR);
|
| +ASSERT_ENUM_VALUES_EQUAL(STREAM_VIDEO_CONTENT);
|
| +ASSERT_ENUM_VALUES_EQUAL(SURFACE_CONTENT);
|
| +ASSERT_ENUM_VALUES_EQUAL(TEXTURE_CONTENT);
|
| +ASSERT_ENUM_VALUES_EQUAL(TILED_CONTENT);
|
| +ASSERT_ENUM_VALUES_EQUAL(YUV_VIDEO_CONTENT);
|
| +
|
| namespace {
|
|
|
| cc::SharedQuadState* ConvertToSharedQuadState(
|
| @@ -33,11 +51,13 @@ cc::SharedQuadState* ConvertToSharedQuadState(
|
| return state;
|
| }
|
|
|
| -cc::DrawQuad* ConvertToDrawQuad(const surfaces::QuadPtr& input,
|
| - cc::SharedQuadState* sqs,
|
| - cc::RenderPass* render_pass) {
|
| +bool ConvertToDrawQuad(const surfaces::QuadPtr& input,
|
| + cc::SharedQuadState* sqs,
|
| + cc::RenderPass* render_pass) {
|
| switch (input->material) {
|
| case surfaces::MATERIAL_SOLID_COLOR: {
|
| + if (input->solid_color_quad_state.is_null())
|
| + return false;
|
| cc::SolidColorDrawQuad* color_quad =
|
| render_pass->CreateAndAppendDrawQuad<cc::SolidColorDrawQuad>();
|
| color_quad->SetAll(
|
| @@ -48,9 +68,11 @@ cc::DrawQuad* ConvertToDrawQuad(const surfaces::QuadPtr& input,
|
| input->needs_blending,
|
| input->solid_color_quad_state->color.To<SkColor>(),
|
| input->solid_color_quad_state->force_anti_aliasing_off);
|
| - return color_quad;
|
| + break;
|
| }
|
| case surfaces::MATERIAL_SURFACE_CONTENT: {
|
| + if (input->surface_quad_state.is_null())
|
| + return false;
|
| cc::SurfaceDrawQuad* surface_quad =
|
| render_pass->CreateAndAppendDrawQuad<cc::SurfaceDrawQuad>();
|
| surface_quad->SetAll(
|
| @@ -60,13 +82,17 @@ cc::DrawQuad* ConvertToDrawQuad(const surfaces::QuadPtr& input,
|
| input->visible_rect.To<gfx::Rect>(),
|
| input->needs_blending,
|
| input->surface_quad_state->surface.To<cc::SurfaceId>());
|
| - return surface_quad;
|
| + break;
|
| }
|
| case surfaces::MATERIAL_TEXTURE_CONTENT: {
|
| - cc::TextureDrawQuad* texture_quad =
|
| - render_pass->CreateAndAppendDrawQuad<cc::TextureDrawQuad>();
|
| surfaces::TextureQuadStatePtr& texture_quad_state =
|
| input->texture_quad_state;
|
| + if (texture_quad_state.is_null() ||
|
| + texture_quad_state->vertex_opacity.is_null() ||
|
| + texture_quad_state->background_color.is_null())
|
| + return false;
|
| + cc::TextureDrawQuad* texture_quad =
|
| + render_pass->CreateAndAppendDrawQuad<cc::TextureDrawQuad>();
|
| texture_quad->SetAll(
|
| sqs,
|
| input->rect.To<gfx::Rect>(),
|
| @@ -78,14 +104,15 @@ cc::DrawQuad* ConvertToDrawQuad(const surfaces::QuadPtr& input,
|
| texture_quad_state->uv_top_left.To<gfx::PointF>(),
|
| texture_quad_state->uv_bottom_right.To<gfx::PointF>(),
|
| texture_quad_state->background_color.To<SkColor>(),
|
| - texture_quad_state->vertex_opacity.storage().data(),
|
| + &texture_quad_state->vertex_opacity.storage()[0],
|
| texture_quad_state->flipped);
|
| - return texture_quad;
|
| + break;
|
| }
|
| default:
|
| NOTREACHED() << "Unsupported material " << input->material;
|
| + return false;
|
| }
|
| - return NULL;
|
| + return true;
|
| }
|
|
|
| } // namespace
|
| @@ -248,8 +275,9 @@ scoped_ptr<cc::RenderPass> ConvertTo(const surfaces::PassPtr& input) {
|
| pass->quad_list.reserve(input->quads.size());
|
| for (size_t i = 0; i < input->quads.size(); ++i) {
|
| surfaces::QuadPtr quad = input->quads[i].Pass();
|
| - ConvertToDrawQuad(
|
| - quad, sqs_list[quad->shared_quad_state_index], pass.get());
|
| + if (!ConvertToDrawQuad(
|
| + quad, sqs_list[quad->shared_quad_state_index], pass.get()))
|
| + return scoped_ptr<cc::RenderPass>();
|
| }
|
| return pass.Pass();
|
| }
|
| @@ -271,7 +299,8 @@ TypeConverter<surfaces::MailboxPtr, gpu::Mailbox>::ConvertFrom(
|
| gpu::Mailbox TypeConverter<surfaces::MailboxPtr, gpu::Mailbox>::ConvertTo(
|
| const surfaces::MailboxPtr& input) {
|
| gpu::Mailbox mailbox;
|
| - mailbox.SetName(input->name.storage().data());
|
| + if (!input->name.is_null())
|
| + mailbox.SetName(&input->name.storage()[0]);
|
| return mailbox;
|
| }
|
|
|
| @@ -415,7 +444,10 @@ scoped_ptr<cc::CompositorFrame> ConvertTo(const surfaces::FramePtr& input) {
|
| input->resources.To<cc::TransferableResourceArray>();
|
| frame_data->render_pass_list.reserve(input->passes.size());
|
| for (size_t i = 0; i < input->passes.size(); ++i) {
|
| - frame_data->render_pass_list.push_back(ConvertTo(input->passes[i]));
|
| + scoped_ptr<cc::RenderPass> pass = ConvertTo(input->passes[i]);
|
| + if (!pass)
|
| + return scoped_ptr<cc::CompositorFrame>();
|
| + frame_data->render_pass_list.push_back(pass.Pass());
|
| }
|
| scoped_ptr<cc::CompositorFrame> frame(new cc::CompositorFrame);
|
| frame->delegated_frame_data = frame_data.Pass();
|
|
|