Chromium Code Reviews| Index: cc/output/overlay_strategy_common.cc |
| diff --git a/cc/output/overlay_strategy_common.cc b/cc/output/overlay_strategy_common.cc |
| index 5d79cd09878555a375dd715f0421b92079738617..85d7adc513030557892e00d68ea2564699e6c722 100644 |
| --- a/cc/output/overlay_strategy_common.cc |
| +++ b/cc/output/overlay_strategy_common.cc |
| @@ -33,31 +33,42 @@ bool OverlayStrategyCommon::Attempt(RenderPassList* render_passes_in_draw_order, |
| RenderPass* root_render_pass = render_passes_in_draw_order->back(); |
| DCHECK(root_render_pass); |
| + // Add our primary surface. |
| + OverlayCandidate main_image; |
| + main_image.display_rect = root_render_pass->output_rect; |
| + DCHECK(candidate_list->empty()); |
| + candidate_list->push_back(main_image); |
| + |
| + bool success = false; |
|
ccameron
2015/09/08 17:16:06
Maybe change "success" name to "created_overlay" (
Andre
2015/09/08 17:30:03
Done.
|
| QuadList& quad_list = root_render_pass->quad_list; |
| - for (auto it = quad_list.begin(); it != quad_list.end(); ++it) { |
| + for (auto it = quad_list.begin(); it != quad_list.end();) { |
| OverlayCandidate candidate; |
| - const DrawQuad* draw_quad = *it; |
| - if (IsOverlayQuad(draw_quad) && |
| - GetCandidateQuadInfo(*draw_quad, &candidate) && |
| - delegate_->TryOverlay(capability_checker_, render_passes_in_draw_order, |
| - candidate_list, candidate, it, |
| - device_scale_factor)) |
| - return true; |
| + if (!GetCandidateQuadInfo(**it, &candidate)) { |
| + ++it; |
| + continue; |
| + } |
| + |
| + OverlayResult result = delegate_->TryOverlay( |
| + capability_checker_, render_passes_in_draw_order, candidate_list, |
| + candidate, &it, device_scale_factor); |
| + switch (result) { |
| + case DID_NOT_CREATE_OVERLAY: |
| + ++it; |
| + break; |
| + case CREATED_OVERLAY_STOP_LOOKING: |
| + return true; |
| + case CREATED_OVERLAY_KEEP_LOOKING: |
| + success = true; |
| + break; |
| + } |
| } |
| - return false; |
| -} |
| -bool OverlayStrategyCommon::IsOverlayQuad(const DrawQuad* draw_quad) { |
| - switch (draw_quad->material) { |
| - case DrawQuad::TEXTURE_CONTENT: |
| - return TextureDrawQuad::MaterialCast(draw_quad)->allow_overlay(); |
| - case DrawQuad::STREAM_VIDEO_CONTENT: |
| - return StreamVideoDrawQuad::MaterialCast(draw_quad)->allow_overlay(); |
| - case DrawQuad::IO_SURFACE_CONTENT: |
| - return IOSurfaceDrawQuad::MaterialCast(draw_quad)->allow_overlay; |
| - default: |
| - return false; |
| + if (!success) { |
| + DCHECK_EQ(1u, candidate_list->size()); |
| + candidate_list->clear(); |
| } |
| + |
| + return success; |
| } |
| // static |
| @@ -157,17 +168,17 @@ bool OverlayStrategyCommon::GetCandidateQuadInfo(const DrawQuad& draw_quad, |
| switch (draw_quad.material) { |
| case DrawQuad::TEXTURE_CONTENT: { |
| auto* quad = TextureDrawQuad::MaterialCast(&draw_quad); |
|
ccameron
2015/09/08 17:16:05
Maybe move the allow_overlay() into GetTextureQuad
Andre
2015/09/08 17:30:03
Done.
|
| - if (!GetTextureQuadInfo(*quad, quad_info)) |
| + if (!quad->allow_overlay() || !GetTextureQuadInfo(*quad, quad_info)) |
| return false; |
| } break; |
| case DrawQuad::STREAM_VIDEO_CONTENT: { |
| auto* quad = StreamVideoDrawQuad::MaterialCast(&draw_quad); |
| - if (!GetVideoQuadInfo(*quad, quad_info)) |
| + if (!quad->allow_overlay() || !GetVideoQuadInfo(*quad, quad_info)) |
| return false; |
| } break; |
| case DrawQuad::IO_SURFACE_CONTENT: { |
| auto* quad = IOSurfaceDrawQuad::MaterialCast(&draw_quad); |
| - if (!GetIOSurfaceQuadInfo(*quad, quad_info)) |
| + if (!quad->allow_overlay || !GetIOSurfaceQuadInfo(*quad, quad_info)) |
| return false; |
| } break; |
| default: |