Commit 3606c489 authored by Saman Sami's avatar Saman Sami Committed by Commit Bot

Add CHECKs to diagnose SubmitCompositorFrame deserialization failures

Add CHECKS to the StructTraits of objects that are sent via
SubmitCompositorFrame to get a better understanding of what is failing.
These CHECKs are only there temporarily and will be reverted before
M80's branch cut.

Bug: 979564
Change-Id: I184830991ad2cfacd3f3ccb1d30e74f89f13a838
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1890000
Commit-Queue: Saman Sami <samans@chromium.org>
Reviewed-by: default avatarTom Sepez <tsepez@chromium.org>
Cr-Commit-Position: refs/heads/master@{#712576}
parent f4f39a69
...@@ -18,18 +18,16 @@ bool StructTraits<viz::mojom::CompositorFrameMetadataDataView, ...@@ -18,18 +18,16 @@ bool StructTraits<viz::mojom::CompositorFrameMetadataDataView,
viz::CompositorFrameMetadata>:: viz::CompositorFrameMetadata>::
Read(viz::mojom::CompositorFrameMetadataDataView data, Read(viz::mojom::CompositorFrameMetadataDataView data,
viz::CompositorFrameMetadata* out) { viz::CompositorFrameMetadata* out) {
if (data.device_scale_factor() <= 0) // TODO(samans): Replace CHECKs with early-outs once we find out the cause for
return false; // deserialization failures. https://crbug.com/979564
CHECK_GT(data.device_scale_factor(), 0);
out->device_scale_factor = data.device_scale_factor(); out->device_scale_factor = data.device_scale_factor();
if (!data.ReadRootScrollOffset(&out->root_scroll_offset)) CHECK(data.ReadRootScrollOffset(&out->root_scroll_offset));
return false;
out->page_scale_factor = data.page_scale_factor(); out->page_scale_factor = data.page_scale_factor();
if (!data.ReadScrollableViewportSize(&out->scrollable_viewport_size)) CHECK(data.ReadScrollableViewportSize(&out->scrollable_viewport_size));
return false;
if (data.frame_token() == 0u) CHECK(data.frame_token());
return false;
out->frame_token = data.frame_token(); out->frame_token = data.frame_token();
out->may_contain_video = data.may_contain_video(); out->may_contain_video = data.may_contain_video();
...@@ -45,15 +43,16 @@ bool StructTraits<viz::mojom::CompositorFrameMetadataDataView, ...@@ -45,15 +43,16 @@ bool StructTraits<viz::mojom::CompositorFrameMetadataDataView,
out->bottom_controls_shown_ratio = data.bottom_controls_shown_ratio(); out->bottom_controls_shown_ratio = data.bottom_controls_shown_ratio();
#endif #endif
return data.ReadLatencyInfo(&out->latency_info) && CHECK(data.ReadLatencyInfo(&out->latency_info));
data.ReadReferencedSurfaces(&out->referenced_surfaces) && CHECK(data.ReadReferencedSurfaces(&out->referenced_surfaces));
data.ReadDeadline(&out->deadline) && CHECK(data.ReadDeadline(&out->deadline));
data.ReadActivationDependencies(&out->activation_dependencies) && CHECK(data.ReadActivationDependencies(&out->activation_dependencies));
data.ReadBeginFrameAck(&out->begin_frame_ack) && CHECK(data.ReadBeginFrameAck(&out->begin_frame_ack));
data.ReadLocalSurfaceIdAllocationTime( CHECK(data.ReadLocalSurfaceIdAllocationTime(
&out->local_surface_id_allocation_time) && &out->local_surface_id_allocation_time));
!out->local_surface_id_allocation_time.is_null() && CHECK(!out->local_surface_id_allocation_time.is_null());
data.ReadPreferredFrameInterval(&out->preferred_frame_interval); CHECK(data.ReadPreferredFrameInterval(&out->preferred_frame_interval));
return true;
} }
} // namespace mojo } // namespace mojo
...@@ -9,11 +9,12 @@ namespace mojo { ...@@ -9,11 +9,12 @@ namespace mojo {
// static // static
bool StructTraits<viz::mojom::CompositorFrameDataView, viz::CompositorFrame>:: bool StructTraits<viz::mojom::CompositorFrameDataView, viz::CompositorFrame>::
Read(viz::mojom::CompositorFrameDataView data, viz::CompositorFrame* out) { Read(viz::mojom::CompositorFrameDataView data, viz::CompositorFrame* out) {
return data.ReadPasses(&out->render_pass_list) && CHECK(data.ReadPasses(&out->render_pass_list));
!out->render_pass_list.empty() && CHECK(!out->render_pass_list.empty());
!out->render_pass_list.back()->output_rect.size().IsEmpty() && CHECK(!out->render_pass_list.back()->output_rect.size().IsEmpty());
data.ReadMetadata(&out->metadata) && CHECK(data.ReadMetadata(&out->metadata));
data.ReadResources(&out->resource_list); CHECK(data.ReadResources(&out->resource_list));
return true;
} }
} // namespace mojo } // namespace mojo
...@@ -32,7 +32,9 @@ struct StructTraits<viz::mojom::LocalSurfaceIdDataView, viz::LocalSurfaceId> { ...@@ -32,7 +32,9 @@ struct StructTraits<viz::mojom::LocalSurfaceIdDataView, viz::LocalSurfaceId> {
viz::LocalSurfaceId* out) { viz::LocalSurfaceId* out) {
out->parent_sequence_number_ = data.parent_sequence_number(); out->parent_sequence_number_ = data.parent_sequence_number();
out->child_sequence_number_ = data.child_sequence_number(); out->child_sequence_number_ = data.child_sequence_number();
return data.ReadEmbedToken(&out->embed_token_) && out->is_valid(); CHECK(data.ReadEmbedToken(&out->embed_token_));
CHECK(out->is_valid());
return true;
} }
}; };
......
...@@ -15,20 +15,17 @@ bool StructTraits<viz::mojom::RenderPassDataView, ...@@ -15,20 +15,17 @@ bool StructTraits<viz::mojom::RenderPassDataView,
Read(viz::mojom::RenderPassDataView data, Read(viz::mojom::RenderPassDataView data,
std::unique_ptr<viz::RenderPass>* out) { std::unique_ptr<viz::RenderPass>* out) {
*out = viz::RenderPass::Create(); *out = viz::RenderPass::Create();
if (!data.ReadOutputRect(&(*out)->output_rect) || CHECK(data.ReadOutputRect(&(*out)->output_rect));
!data.ReadDamageRect(&(*out)->damage_rect) || CHECK(data.ReadDamageRect(&(*out)->damage_rect));
!data.ReadTransformToRootTarget(&(*out)->transform_to_root_target) || CHECK(data.ReadTransformToRootTarget(&(*out)->transform_to_root_target));
!data.ReadFilters(&(*out)->filters) || CHECK(data.ReadFilters(&(*out)->filters));
!data.ReadBackdropFilters(&(*out)->backdrop_filters) || CHECK(data.ReadBackdropFilters(&(*out)->backdrop_filters));
!data.ReadBackdropFilterBounds(&(*out)->backdrop_filter_bounds) || CHECK(data.ReadBackdropFilterBounds(&(*out)->backdrop_filter_bounds));
!data.ReadColorSpace(&(*out)->color_space) || CHECK(data.ReadColorSpace(&(*out)->color_space));
!data.ReadCopyRequests(&(*out)->copy_requests)) { CHECK(data.ReadCopyRequests(&(*out)->copy_requests));
return false;
}
(*out)->id = data.id(); (*out)->id = data.id();
// RenderPass ids are never zero. // RenderPass ids are never zero.
if (!(*out)->id) CHECK((*out)->id);
return false;
(*out)->has_transparent_background = data.has_transparent_background(); (*out)->has_transparent_background = data.has_transparent_background();
(*out)->cache_render_pass = data.cache_render_pass(); (*out)->cache_render_pass = data.cache_render_pass();
(*out)->has_damage_from_contributing_content = (*out)->has_damage_from_contributing_content =
...@@ -46,10 +43,8 @@ bool StructTraits<viz::mojom::RenderPassDataView, ...@@ -46,10 +43,8 @@ bool StructTraits<viz::mojom::RenderPassDataView,
viz::DrawQuad* quad = viz::DrawQuad* quad =
AllocateAndConstruct(quad_state_data_view.tag(), &(*out)->quad_list); AllocateAndConstruct(quad_state_data_view.tag(), &(*out)->quad_list);
if (!quad) CHECK(quad);
return false; CHECK(quads.Read(i, quad));
if (!quads.Read(i, quad))
return false;
// Read the SharedQuadState. // Read the SharedQuadState.
viz::mojom::SharedQuadStateDataView sqs_data_view; viz::mojom::SharedQuadStateDataView sqs_data_view;
...@@ -58,12 +53,10 @@ bool StructTraits<viz::mojom::RenderPassDataView, ...@@ -58,12 +53,10 @@ bool StructTraits<viz::mojom::RenderPassDataView,
// one. // one.
if (!sqs_data_view.is_null()) { if (!sqs_data_view.is_null()) {
last_sqs = (*out)->CreateAndAppendSharedQuadState(); last_sqs = (*out)->CreateAndAppendSharedQuadState();
if (!quad_data_view.ReadSqs(last_sqs)) CHECK(quad_data_view.ReadSqs(last_sqs));
return false;
} }
quad->shared_quad_state = last_sqs; quad->shared_quad_state = last_sqs;
if (!quad->shared_quad_state) CHECK(quad->shared_quad_state);
return false;
} }
return true; return true;
} }
......
...@@ -17,12 +17,10 @@ bool StructTraits<viz::mojom::TransferableResourceDataView, ...@@ -17,12 +17,10 @@ bool StructTraits<viz::mojom::TransferableResourceDataView,
viz::TransferableResource>:: viz::TransferableResource>::
Read(viz::mojom::TransferableResourceDataView data, Read(viz::mojom::TransferableResourceDataView data,
viz::TransferableResource* out) { viz::TransferableResource* out) {
if (!data.ReadSize(&out->size) || CHECK(data.ReadSize(&out->size));
!data.ReadMailboxHolder(&out->mailbox_holder) || CHECK(data.ReadMailboxHolder(&out->mailbox_holder));
!data.ReadColorSpace(&out->color_space) || CHECK(data.ReadColorSpace(&out->color_space));
!data.ReadYcbcrInfo(&out->ycbcr_info)) { CHECK(data.ReadYcbcrInfo(&out->ycbcr_info));
return false;
}
out->id = data.id(); out->id = data.id();
out->format = static_cast<viz::ResourceFormat>(data.format()); out->format = static_cast<viz::ResourceFormat>(data.format());
out->filter = data.filter(); out->filter = data.filter();
......
...@@ -10,12 +10,9 @@ namespace mojo { ...@@ -10,12 +10,9 @@ namespace mojo {
bool StructTraits<viz::mojom::HitTestRegionDataView, viz::HitTestRegion>::Read( bool StructTraits<viz::mojom::HitTestRegionDataView, viz::HitTestRegion>::Read(
viz::mojom::HitTestRegionDataView data, viz::mojom::HitTestRegionDataView data,
viz::HitTestRegion* out) { viz::HitTestRegion* out) {
if (!data.ReadFrameSinkId(&out->frame_sink_id)) CHECK(data.ReadFrameSinkId(&out->frame_sink_id));
return false; CHECK(data.ReadRect(&out->rect));
if (!data.ReadRect(&out->rect)) CHECK(data.ReadTransform(&out->transform));
return false;
if (!data.ReadTransform(&out->transform))
return false;
out->flags = data.flags(); out->flags = data.flags();
out->async_hit_test_reasons = data.async_hit_test_reasons(); out->async_hit_test_reasons = data.async_hit_test_reasons();
return true; return true;
...@@ -26,12 +23,9 @@ bool StructTraits< ...@@ -26,12 +23,9 @@ bool StructTraits<
viz::mojom::HitTestRegionListDataView, viz::mojom::HitTestRegionListDataView,
viz::HitTestRegionList>::Read(viz::mojom::HitTestRegionListDataView data, viz::HitTestRegionList>::Read(viz::mojom::HitTestRegionListDataView data,
viz::HitTestRegionList* out) { viz::HitTestRegionList* out) {
if (!data.ReadRegions(&out->regions)) CHECK(data.ReadRegions(&out->regions));
return false; CHECK(data.ReadBounds(&out->bounds));
if (!data.ReadBounds(&out->bounds)) CHECK(data.ReadTransform(&out->transform));
return false;
if (!data.ReadTransform(&out->transform))
return false;
out->flags = data.flags(); out->flags = data.flags();
out->async_hit_test_reasons = data.async_hit_test_reasons(); out->async_hit_test_reasons = data.async_hit_test_reasons();
return true; return true;
......
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