Commit 908c3604 authored by Céline O'Neil's avatar Céline O'Neil Committed by Commit Bot

Ensure fuzzer can pass checks on debug builds.

Small bug fixes: browser UI CompositorFrame now has a valid frame_token,
and validation logic for the fuzzed CompositorFrame ensures that the
RenderPass output_rect contains the damage_rect, and that the DrawQuad's
rect contains its visible_rect.

R=kylechar@chromium.org

Bug: 934656
Change-Id: If90756a4a608407952fde27e308db1d90a14f1fb
Reviewed-on: https://chromium-review.googlesource.com/c/1489632Reviewed-by: default avatarkylechar <kylechar@chromium.org>
Commit-Queue: Céline O'Neil <celineo@google.com>
Cr-Commit-Position: refs/heads/master@{#635686}
parent 01a5bd62
...@@ -67,15 +67,28 @@ CompositorFrame GenerateFuzzedCompositorFrame( ...@@ -67,15 +67,28 @@ CompositorFrame GenerateFuzzedCompositorFrame(
std::unique_ptr<RenderPass> pass = RenderPass::Create(); std::unique_ptr<RenderPass> pass = RenderPass::Create();
gfx::Rect rp_output_rect = gfx::Rect rp_output_rect =
GetRectFromProtobuf(render_pass_spec.output_rect()); GetRectFromProtobuf(render_pass_spec.output_rect());
gfx::Rect rp_damage_rect =
GetRectFromProtobuf(render_pass_spec.damage_rect());
// Handle constraints on RenderPass:
// Ensure that |rp_output_rect| has non-zero area and that |rp_damage_rect| is
// contained in |rp_output_rect|.
ExpandToMinSize(&rp_output_rect, 1); ExpandToMinSize(&rp_output_rect, 1);
pass->SetNew(1, rp_output_rect, rp_damage_rect.AdjustToFit(rp_output_rect);
GetRectFromProtobuf(render_pass_spec.damage_rect()),
gfx::Transform()); pass->SetNew(1, rp_output_rect, rp_damage_rect, gfx::Transform());
content::fuzzing::proto::SolidColorDrawQuad quad_spec = content::fuzzing::proto::SolidColorDrawQuad quad_spec =
render_pass_spec.draw_quad(); render_pass_spec.draw_quad();
gfx::Rect quad_rect = GetRectFromProtobuf(quad_spec.rect()); gfx::Rect quad_rect = GetRectFromProtobuf(quad_spec.rect());
gfx::Rect quad_visible_rect = GetRectFromProtobuf(quad_spec.visible_rect()); gfx::Rect quad_visible_rect = GetRectFromProtobuf(quad_spec.visible_rect());
// Handle constraints on DrawQuad:
// Ensure that |quad_rect| has non-zero area and that |quad_visible_rect| is
// contained in |quad_rect|.
ExpandToMinSize(&quad_rect, 1);
quad_visible_rect.AdjustToFit(quad_rect);
auto* shared_quad_state = pass->CreateAndAppendSharedQuadState(); auto* shared_quad_state = pass->CreateAndAppendSharedQuadState();
shared_quad_state->SetAll(gfx::Transform(), gfx::Rect(quad_rect), shared_quad_state->SetAll(gfx::Transform(), gfx::Rect(quad_rect),
gfx::Rect(quad_rect), gfx::Rect(quad_rect), gfx::Rect(quad_rect), gfx::Rect(quad_rect),
...@@ -83,7 +96,7 @@ CompositorFrame GenerateFuzzedCompositorFrame( ...@@ -83,7 +96,7 @@ CompositorFrame GenerateFuzzedCompositorFrame(
/*are_contents_opaque=*/false, 1, /*are_contents_opaque=*/false, 1,
SkBlendMode::kSrcOver, /*sorting_context_id=*/0); SkBlendMode::kSrcOver, /*sorting_context_id=*/0);
auto* color_quad = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); auto* color_quad = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
color_quad->SetNew(shared_quad_state, quad_visible_rect, gfx::Rect(quad_rect), color_quad->SetNew(shared_quad_state, quad_rect, quad_visible_rect,
quad_spec.color(), quad_spec.force_anti_aliasing_off()); quad_spec.color(), quad_spec.force_anti_aliasing_off());
frame.render_pass_list.push_back(std::move(pass)); frame.render_pass_list.push_back(std::move(pass));
......
...@@ -96,6 +96,7 @@ CompositorFrame FuzzerBrowserProcess::BuildBrowserUICompositorFrame( ...@@ -96,6 +96,7 @@ CompositorFrame FuzzerBrowserProcess::BuildBrowserUICompositorFrame(
SurfaceId renderer_surface_id) { SurfaceId renderer_surface_id) {
CompositorFrame frame; CompositorFrame frame;
frame.metadata.frame_token = 1;
frame.metadata.begin_frame_ack.source_id = BeginFrameArgs::kManualSourceId; frame.metadata.begin_frame_ack.source_id = BeginFrameArgs::kManualSourceId;
frame.metadata.begin_frame_ack.sequence_number = frame.metadata.begin_frame_ack.sequence_number =
BeginFrameArgs::kStartingFrameNumber; BeginFrameArgs::kStartingFrameNumber;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment