| Index: services/ui/ws/frame_generator.cc
|
| diff --git a/services/ui/ws/frame_generator.cc b/services/ui/ws/frame_generator.cc
|
| index 7229a299d751fdbbffde7e42542d11099c94012c..c4c309b00a0f71a193c3c7b3c4e6e0648dba66a0 100644
|
| --- a/services/ui/ws/frame_generator.cc
|
| +++ b/services/ui/ws/frame_generator.cc
|
| @@ -130,7 +130,7 @@ cc::CompositorFrame FrameGenerator::GenerateCompositorFrame(
|
| render_pass->SetNew(render_pass_id, output_rect, output_rect,
|
| gfx::Transform());
|
|
|
| - DrawWindowTree(render_pass.get(), root_window_, gfx::Vector2d(), 1.0f);
|
| + DrawWindow(render_pass.get(), delegate_->GetActiveRootWindow());
|
|
|
| cc::CompositorFrame frame;
|
| frame.render_pass_list.push_back(std::move(render_pass));
|
| @@ -155,80 +155,40 @@ cc::CompositorFrame FrameGenerator::GenerateCompositorFrame(
|
| return frame;
|
| }
|
|
|
| -void FrameGenerator::DrawWindowTree(
|
| - cc::RenderPass* pass,
|
| - ServerWindow* window,
|
| - const gfx::Vector2d& parent_to_root_origin_offset,
|
| - float opacity) {
|
| - if (!window->visible())
|
| +void FrameGenerator::DrawWindow(cc::RenderPass* pass, ServerWindow* window) {
|
| + if (!window || !window->visible())
|
| return;
|
|
|
| - const gfx::Rect absolute_bounds =
|
| - window->bounds() + parent_to_root_origin_offset;
|
| - const ServerWindow::Windows& children = window->children();
|
| - const float combined_opacity = opacity * window->opacity();
|
| - for (ServerWindow* child : base::Reversed(children)) {
|
| - DrawWindowTree(pass, child, absolute_bounds.OffsetFromOrigin(),
|
| - combined_opacity);
|
| - }
|
| -
|
| if (!window->compositor_frame_sink_manager() ||
|
| !window->compositor_frame_sink_manager()->ShouldDraw())
|
| return;
|
|
|
| - cc::SurfaceId underlay_surface_id =
|
| - window->compositor_frame_sink_manager()->GetLatestSurfaceId(
|
| - mojom::CompositorFrameSinkType::UNDERLAY);
|
| cc::SurfaceId default_surface_id =
|
| window->compositor_frame_sink_manager()->GetLatestSurfaceId(
|
| mojom::CompositorFrameSinkType::DEFAULT);
|
|
|
| - if (!underlay_surface_id.is_valid() && !default_surface_id.is_valid())
|
| + if (!default_surface_id.is_valid())
|
| return;
|
|
|
| - if (default_surface_id.is_valid()) {
|
| - gfx::Transform quad_to_target_transform;
|
| - quad_to_target_transform.Translate(absolute_bounds.x(),
|
| - absolute_bounds.y());
|
| -
|
| - cc::SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState();
|
| -
|
| - const gfx::Rect bounds_at_origin(window->bounds().size());
|
| - // TODO(fsamuel): These clipping and visible rects are incorrect. They need
|
| - // to be populated from CompositorFrame structs.
|
| - sqs->SetAll(
|
| - quad_to_target_transform, bounds_at_origin.size() /* layer_bounds */,
|
| - bounds_at_origin /* visible_layer_bounds */,
|
| - bounds_at_origin /* clip_rect */, false /* is_clipped */,
|
| - combined_opacity, SkBlendMode::kSrcOver, 0 /* sorting-context_id */);
|
| - auto* quad = pass->CreateAndAppendDrawQuad<cc::SurfaceDrawQuad>();
|
| - quad->SetAll(sqs, bounds_at_origin /* rect */,
|
| - gfx::Rect() /* opaque_rect */,
|
| - bounds_at_origin /* visible_rect */, true /* needs_blending*/,
|
| - default_surface_id);
|
| - }
|
| - if (underlay_surface_id.is_valid()) {
|
| - const gfx::Rect underlay_absolute_bounds =
|
| - absolute_bounds - window->underlay_offset();
|
| - gfx::Transform quad_to_target_transform;
|
| - quad_to_target_transform.Translate(underlay_absolute_bounds.x(),
|
| - underlay_absolute_bounds.y());
|
| - cc::SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState();
|
| - const gfx::Rect bounds_at_origin(
|
| - window->compositor_frame_sink_manager()->GetLatestFrameSize(
|
| - mojom::CompositorFrameSinkType::UNDERLAY));
|
| - sqs->SetAll(
|
| - quad_to_target_transform, bounds_at_origin.size() /* layer_bounds */,
|
| - bounds_at_origin /* visible_layer_bounds */,
|
| - bounds_at_origin /* clip_rect */, false /* is_clipped */,
|
| - combined_opacity, SkBlendMode::kSrcOver, 0 /* sorting-context_id */);
|
| -
|
| - auto* quad = pass->CreateAndAppendDrawQuad<cc::SurfaceDrawQuad>();
|
| - quad->SetAll(sqs, bounds_at_origin /* rect */,
|
| - gfx::Rect() /* opaque_rect */,
|
| - bounds_at_origin /* visible_rect */, true /* needs_blending*/,
|
| - underlay_surface_id);
|
| - }
|
| + gfx::Transform quad_to_target_transform;
|
| + quad_to_target_transform.Translate(window->bounds().x(),
|
| + window->bounds().y());
|
| +
|
| + cc::SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState();
|
| +
|
| + const gfx::Rect bounds_at_origin(window->bounds().size());
|
| + // TODO(fsamuel): These clipping and visible rects are incorrect. They need
|
| + // to be populated from CompositorFrame structs.
|
| + sqs->SetAll(
|
| + quad_to_target_transform, bounds_at_origin.size() /* layer_bounds */,
|
| + bounds_at_origin /* visible_layer_bounds */,
|
| + bounds_at_origin /* clip_rect */, false /* is_clipped */,
|
| + 1.0f /* opacity */, SkBlendMode::kSrcOver, 0 /* sorting-context_id */);
|
| + auto* quad = pass->CreateAndAppendDrawQuad<cc::SurfaceDrawQuad>();
|
| + quad->SetAll(sqs, bounds_at_origin /* rect */,
|
| + gfx::Rect() /* opaque_rect */,
|
| + bounds_at_origin /* visible_rect */, true /* needs_blending*/,
|
| + default_surface_id);
|
| }
|
|
|
| cc::SurfaceId FrameGenerator::FindParentSurfaceId(ServerWindow* window) {
|
|
|