Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(983)

Unified Diff: mojo/services/public/cpp/surfaces/lib/surfaces_type_converters.cc

Issue 393583003: Support C++98 std::vector in mojo surfaces code (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: return null frame when any bad quads are present Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | mojo/services/public/cpp/surfaces/tests/surface_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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();
« no previous file with comments | « no previous file | mojo/services/public/cpp/surfaces/tests/surface_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698