| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "services/ui/ws/frame_generator.h" | 5 #include "services/ui/ws/frame_generator.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/containers/adapters.h" | 10 #include "base/containers/adapters.h" |
| (...skipping 25 matching lines...) Expand all Loading... |
| 36 widget, std::move(sink_request), binding_.CreateInterfacePtrAndBind(), | 36 widget, std::move(sink_request), binding_.CreateInterfacePtrAndBind(), |
| 37 std::move(display_request)); | 37 std::move(display_request)); |
| 38 } | 38 } |
| 39 | 39 |
| 40 FrameGenerator::~FrameGenerator() = default; | 40 FrameGenerator::~FrameGenerator() = default; |
| 41 | 41 |
| 42 void FrameGenerator::SetDeviceScaleFactor(float device_scale_factor) { | 42 void FrameGenerator::SetDeviceScaleFactor(float device_scale_factor) { |
| 43 if (device_scale_factor_ == device_scale_factor) | 43 if (device_scale_factor_ == device_scale_factor) |
| 44 return; | 44 return; |
| 45 device_scale_factor_ = device_scale_factor; | 45 device_scale_factor_ = device_scale_factor; |
| 46 if (window_manager_surface_info_.id().is_valid()) | 46 if (window_manager_surface_info_.is_valid()) |
| 47 compositor_frame_sink_->SetNeedsBeginFrame(true); | 47 compositor_frame_sink_->SetNeedsBeginFrame(true); |
| 48 } | 48 } |
| 49 | 49 |
| 50 void FrameGenerator::OnSurfaceCreated(const cc::SurfaceInfo& surface_info) { | 50 void FrameGenerator::OnSurfaceCreated(const cc::SurfaceInfo& surface_info) { |
| 51 DCHECK(surface_info.id().is_valid()); | 51 DCHECK(surface_info.is_valid()); |
| 52 | 52 |
| 53 // Only handle embedded surfaces changing here. The display root surface | 53 // Only handle embedded surfaces changing here. The display root surface |
| 54 // changing is handled immediately after the CompositorFrame is submitted. | 54 // changing is handled immediately after the CompositorFrame is submitted. |
| 55 if (surface_info != window_manager_surface_info_) { | 55 if (surface_info != window_manager_surface_info_) { |
| 56 window_manager_surface_info_ = surface_info; | 56 window_manager_surface_info_ = surface_info; |
| 57 compositor_frame_sink_->SetNeedsBeginFrame(true); | 57 compositor_frame_sink_->SetNeedsBeginFrame(true); |
| 58 } | 58 } |
| 59 } | 59 } |
| 60 | 60 |
| 61 void FrameGenerator::OnWindowDamaged() { | 61 void FrameGenerator::OnWindowDamaged() { |
| 62 if (window_manager_surface_info_.id().is_valid()) | 62 if (window_manager_surface_info_.is_valid()) |
| 63 compositor_frame_sink_->SetNeedsBeginFrame(true); | 63 compositor_frame_sink_->SetNeedsBeginFrame(true); |
| 64 } | 64 } |
| 65 | 65 |
| 66 void FrameGenerator::DidReceiveCompositorFrameAck() {} | 66 void FrameGenerator::DidReceiveCompositorFrameAck() {} |
| 67 | 67 |
| 68 void FrameGenerator::OnBeginFrame(const cc::BeginFrameArgs& begin_frame_arags) { | 68 void FrameGenerator::OnBeginFrame(const cc::BeginFrameArgs& begin_frame_arags) { |
| 69 if (!root_window_->visible()) | 69 if (!root_window_->visible()) |
| 70 return; | 70 return; |
| 71 | 71 |
| 72 // TODO(fsamuel): We should add a trace for generating a top level frame. | 72 // TODO(fsamuel): We should add a trace for generating a top level frame. |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 127 quad->SetNew(shared_state, output_rect, output_rect, render_pass_id, | 127 quad->SetNew(shared_state, output_rect, output_rect, render_pass_id, |
| 128 0 /* mask_resource_id */, gfx::RectF() /* mask_uv_rect */, | 128 0 /* mask_resource_id */, gfx::RectF() /* mask_uv_rect */, |
| 129 gfx::Size() /* mask_texture_size */, | 129 gfx::Size() /* mask_texture_size */, |
| 130 gfx::Vector2dF() /* filters_scale */, | 130 gfx::Vector2dF() /* filters_scale */, |
| 131 gfx::PointF() /* filters_origin */, | 131 gfx::PointF() /* filters_origin */, |
| 132 gfx::RectF() /* tex_coord_rect */); | 132 gfx::RectF() /* tex_coord_rect */); |
| 133 frame.render_pass_list.push_back(std::move(invert_pass)); | 133 frame.render_pass_list.push_back(std::move(invert_pass)); |
| 134 } | 134 } |
| 135 frame.metadata.device_scale_factor = device_scale_factor_; | 135 frame.metadata.device_scale_factor = device_scale_factor_; |
| 136 | 136 |
| 137 if (window_manager_surface_info_.id().is_valid()) { | 137 if (window_manager_surface_info_.is_valid()) { |
| 138 frame.metadata.referenced_surfaces.push_back( | 138 frame.metadata.referenced_surfaces.push_back( |
| 139 window_manager_surface_info_.id()); | 139 window_manager_surface_info_.id()); |
| 140 } | 140 } |
| 141 | 141 |
| 142 return frame; | 142 return frame; |
| 143 } | 143 } |
| 144 | 144 |
| 145 void FrameGenerator::DrawWindow(cc::RenderPass* pass) { | 145 void FrameGenerator::DrawWindow(cc::RenderPass* pass) { |
| 146 DCHECK(window_manager_surface_info_.id().is_valid()); | 146 DCHECK(window_manager_surface_info_.is_valid()); |
| 147 | 147 |
| 148 const gfx::Rect bounds_at_origin( | 148 const gfx::Rect bounds_at_origin( |
| 149 window_manager_surface_info_.size_in_pixels()); | 149 window_manager_surface_info_.size_in_pixels()); |
| 150 | 150 |
| 151 gfx::Transform quad_to_target_transform; | 151 gfx::Transform quad_to_target_transform; |
| 152 quad_to_target_transform.Translate(bounds_at_origin.x(), | 152 quad_to_target_transform.Translate(bounds_at_origin.x(), |
| 153 bounds_at_origin.y()); | 153 bounds_at_origin.y()); |
| 154 | 154 |
| 155 cc::SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState(); | 155 cc::SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState(); |
| 156 | 156 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 169 auto* quad = pass->CreateAndAppendDrawQuad<cc::SurfaceDrawQuad>(); | 169 auto* quad = pass->CreateAndAppendDrawQuad<cc::SurfaceDrawQuad>(); |
| 170 quad->SetAll(sqs, bounds_at_origin /* rect */, gfx::Rect() /* opaque_rect */, | 170 quad->SetAll(sqs, bounds_at_origin /* rect */, gfx::Rect() /* opaque_rect */, |
| 171 bounds_at_origin /* visible_rect */, true /* needs_blending*/, | 171 bounds_at_origin /* visible_rect */, true /* needs_blending*/, |
| 172 window_manager_surface_info_.id(), | 172 window_manager_surface_info_.id(), |
| 173 cc::SurfaceDrawQuadType::PRIMARY, nullptr); | 173 cc::SurfaceDrawQuadType::PRIMARY, nullptr); |
| 174 } | 174 } |
| 175 | 175 |
| 176 } // namespace ws | 176 } // namespace ws |
| 177 | 177 |
| 178 } // namespace ui | 178 } // namespace ui |
| OLD | NEW |