| Index: cc/output/overlay_strategy_single_on_top.cc
|
| diff --git a/cc/output/overlay_strategy_single_on_top.cc b/cc/output/overlay_strategy_single_on_top.cc
|
| index 4c2064196ddbca9181d192cd94d51b6c4603f3f9..d9ac36c365a7af4d2992b72f7a2be9457e50d2ac 100644
|
| --- a/cc/output/overlay_strategy_single_on_top.cc
|
| +++ b/cc/output/overlay_strategy_single_on_top.cc
|
| @@ -19,7 +19,8 @@ OverlayStrategySingleOnTop::OverlayStrategySingleOnTop(
|
| resource_provider_(resource_provider) {}
|
|
|
| bool OverlayStrategySingleOnTop::Attempt(
|
| - RenderPassList* render_passes_in_draw_order) {
|
| + RenderPassList* render_passes_in_draw_order,
|
| + OverlayCandidateList* candidate_list) {
|
| // Only attempt to handle very simple case for now.
|
| if (!capability_checker_)
|
| return false;
|
| @@ -37,14 +38,17 @@ bool OverlayStrategySingleOnTop::Attempt(
|
| return false;
|
|
|
| // Simple quads only.
|
| - if (!quad.quadTransform().IsIdentityOrTranslation() || quad.needs_blending ||
|
| + OverlayCandidate::OverlayTransform overlay_transform =
|
| + OverlayCandidate::GetOverlayTransform(quad.quadTransform(), quad.flipped);
|
| + if (overlay_transform == OverlayCandidate::INVALID ||
|
| + !quad.quadTransform().IsIdentityOrTranslation() || quad.needs_blending ||
|
| quad.shared_quad_state->opacity != 1.f ||
|
| quad.shared_quad_state->blend_mode != SkXfermode::kSrcOver_Mode ||
|
| quad.premultiplied_alpha || quad.background_color != SK_ColorTRANSPARENT)
|
| return false;
|
|
|
| // Add our primary surface.
|
| - OverlayCandidateValidator::OverlayCandidateList candidates;
|
| + OverlayCandidateList candidates;
|
| OverlayCandidate main_image;
|
| main_image.display_rect = root_render_pass->output_rect;
|
| main_image.format = RGBA_8888;
|
| @@ -52,13 +56,13 @@ bool OverlayStrategySingleOnTop::Attempt(
|
|
|
| // Add the overlay.
|
| OverlayCandidate candidate;
|
| - gfx::RectF float_rect(quad.rect);
|
| - quad.quadTransform().TransformRect(&float_rect);
|
| - candidate.transform =
|
| - quad.flipped ? OverlayCandidate::FLIP_VERTICAL : OverlayCandidate::NONE;
|
| - candidate.display_rect = gfx::ToNearestRect(float_rect);
|
| + candidate.transform = overlay_transform;
|
| + candidate.display_rect =
|
| + OverlayCandidate::GetOverlayRect(quad.quadTransform(), quad.rect);
|
| candidate.uv_rect = BoundingRect(quad.uv_top_left, quad.uv_bottom_right);
|
| candidate.format = RGBA_8888;
|
| + candidate.resource_id = quad.resource_id;
|
| + candidate.plane_z_order = 1;
|
| candidates.push_back(candidate);
|
|
|
| // Check for support.
|
| @@ -66,16 +70,12 @@ bool OverlayStrategySingleOnTop::Attempt(
|
|
|
| // If the candidate can be handled by an overlay, create a pass for it.
|
| if (candidates[1].overlay_handled) {
|
| - scoped_ptr<RenderPass> overlay_pass = RenderPass::Create();
|
| - overlay_pass->overlay_state = RenderPass::SIMPLE_OVERLAY;
|
| -
|
| scoped_ptr<DrawQuad> overlay_quad = quad_list.take(quad_list.begin());
|
| quad_list.erase(quad_list.begin());
|
| - overlay_pass->quad_list.push_back(overlay_quad.Pass());
|
| - render_passes_in_draw_order->insert(render_passes_in_draw_order->begin(),
|
| - overlay_pass.Pass());
|
| + candidate_list->swap(candidates);
|
| + return true;
|
| }
|
| - return candidates[1].overlay_handled;
|
| + return false;
|
| }
|
|
|
| } // namespace cc
|
|
|