Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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 "cc/output/direct_renderer.h" | 5 #include "cc/output/direct_renderer.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <unordered_map> | 9 #include <unordered_map> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 65 | 65 |
| 66 DirectRenderer::DrawingFrame::DrawingFrame() = default; | 66 DirectRenderer::DrawingFrame::DrawingFrame() = default; |
| 67 DirectRenderer::DrawingFrame::~DrawingFrame() = default; | 67 DirectRenderer::DrawingFrame::~DrawingFrame() = default; |
| 68 | 68 |
| 69 DirectRenderer::DirectRenderer(const RendererSettings* settings, | 69 DirectRenderer::DirectRenderer(const RendererSettings* settings, |
| 70 OutputSurface* output_surface, | 70 OutputSurface* output_surface, |
| 71 ResourceProvider* resource_provider) | 71 ResourceProvider* resource_provider) |
| 72 : settings_(settings), | 72 : settings_(settings), |
| 73 output_surface_(output_surface), | 73 output_surface_(output_surface), |
| 74 resource_provider_(resource_provider), | 74 resource_provider_(resource_provider), |
| 75 overlay_processor_(new OverlayProcessor(output_surface)) { | 75 overlay_processor_(new OverlayProcessor(output_surface)) {} |
| 76 // TODO(danakj): This should not be happening in the constructor. | |
| 77 overlay_processor_->Initialize(); | |
| 78 } | |
| 79 | 76 |
| 80 DirectRenderer::~DirectRenderer() = default; | 77 DirectRenderer::~DirectRenderer() = default; |
| 81 | 78 |
| 79 void DirectRenderer::Initialize() { | |
| 80 overlay_processor_->Initialize(); | |
| 81 | |
| 82 auto* context_provider = output_surface_->context_provider(); | |
| 83 | |
| 84 use_partial_swap_ = settings_->partial_swap_enabled && CanPartialSwap(); | |
|
danakj
2016/08/17 02:06:43
This is a behaviour change. What it changed is tha
enne (OOO)
2016/08/17 17:48:42
Yeah, this sounds good to me. We've had a bunch o
| |
| 85 allow_empty_swap_ = use_partial_swap_; | |
| 86 if (context_provider && | |
| 87 context_provider->ContextCapabilities().commit_overlay_planes) | |
| 88 allow_empty_swap_ = true; | |
| 89 } | |
| 90 | |
| 82 // static | 91 // static |
| 83 gfx::RectF DirectRenderer::QuadVertexRect() { | 92 gfx::RectF DirectRenderer::QuadVertexRect() { |
| 84 return gfx::RectF(-0.5f, -0.5f, 1.f, 1.f); | 93 return gfx::RectF(-0.5f, -0.5f, 1.f, 1.f); |
| 85 } | 94 } |
| 86 | 95 |
| 87 // static | 96 // static |
| 88 void DirectRenderer::QuadRectTransform(gfx::Transform* quad_rect_transform, | 97 void DirectRenderer::QuadRectTransform(gfx::Transform* quad_rect_transform, |
| 89 const gfx::Transform& quad_transform, | 98 const gfx::Transform& quad_transform, |
| 90 const gfx::RectF& quad_rect) { | 99 const gfx::RectF& quad_rect) { |
| 91 *quad_rect_transform = quad_transform; | 100 *quad_rect_transform = quad_transform; |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 254 } | 263 } |
| 255 | 264 |
| 256 // Attempt to replace some or all of the quads of the root render pass with | 265 // Attempt to replace some or all of the quads of the root render pass with |
| 257 // overlays. | 266 // overlays. |
| 258 overlay_processor_->ProcessForOverlays( | 267 overlay_processor_->ProcessForOverlays( |
| 259 resource_provider_, root_render_pass, &frame.overlay_list, | 268 resource_provider_, root_render_pass, &frame.overlay_list, |
| 260 &frame.ca_layer_overlay_list, &frame.root_damage_rect); | 269 &frame.ca_layer_overlay_list, &frame.root_damage_rect); |
| 261 | 270 |
| 262 // We can skip all drawing if the damage rect is now empty. | 271 // We can skip all drawing if the damage rect is now empty. |
| 263 bool skip_drawing_root_render_pass = | 272 bool skip_drawing_root_render_pass = |
| 264 frame.root_damage_rect.IsEmpty() && Capabilities().allow_empty_swap; | 273 frame.root_damage_rect.IsEmpty() && allow_empty_swap_; |
| 265 | 274 |
| 266 // If we have to draw but don't support partial swap, the whole output should | 275 // If we have to draw but don't support partial swap, the whole output should |
| 267 // be considered damaged. | 276 // be considered damaged. |
| 268 if (!skip_drawing_root_render_pass && !Capabilities().using_partial_swap) | 277 if (!skip_drawing_root_render_pass && !use_partial_swap_) |
| 269 frame.root_damage_rect = root_render_pass->output_rect; | 278 frame.root_damage_rect = root_render_pass->output_rect; |
| 270 | 279 |
| 271 if (skip_drawing_root_render_pass) { | 280 if (skip_drawing_root_render_pass) { |
| 272 // If any of the overlays is the output surface, then ensure that the | 281 // If any of the overlays is the output surface, then ensure that the |
| 273 // backbuffer be allocated (allocation of the backbuffer is a side-effect | 282 // backbuffer be allocated (allocation of the backbuffer is a side-effect |
| 274 // of BindFramebufferToOutputSurface). | 283 // of BindFramebufferToOutputSurface). |
| 275 for (auto& overlay : frame.overlay_list) { | 284 for (auto& overlay : frame.overlay_list) { |
| 276 if (overlay.use_output_surface_for_resource) { | 285 if (overlay.use_output_surface_for_resource) { |
| 277 BindFramebufferToOutputSurface(&frame); | 286 BindFramebufferToOutputSurface(&frame); |
| 278 break; | 287 break; |
| (...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 444 | 453 |
| 445 const gfx::Rect surface_rect_in_draw_space = | 454 const gfx::Rect surface_rect_in_draw_space = |
| 446 OutputSurfaceRectInDrawSpace(frame); | 455 OutputSurfaceRectInDrawSpace(frame); |
| 447 gfx::Rect render_pass_scissor_in_draw_space = surface_rect_in_draw_space; | 456 gfx::Rect render_pass_scissor_in_draw_space = surface_rect_in_draw_space; |
| 448 | 457 |
| 449 if (frame->current_render_pass == frame->root_render_pass) { | 458 if (frame->current_render_pass == frame->root_render_pass) { |
| 450 render_pass_scissor_in_draw_space.Intersect( | 459 render_pass_scissor_in_draw_space.Intersect( |
| 451 DeviceViewportRectInDrawSpace(frame)); | 460 DeviceViewportRectInDrawSpace(frame)); |
| 452 } | 461 } |
| 453 | 462 |
| 454 if (Capabilities().using_partial_swap) { | 463 if (use_partial_swap_) { |
| 455 render_pass_scissor_in_draw_space.Intersect( | 464 render_pass_scissor_in_draw_space.Intersect( |
| 456 ComputeScissorRectForRenderPass(frame)); | 465 ComputeScissorRectForRenderPass(frame)); |
| 457 } | 466 } |
| 458 | 467 |
| 459 if (NeedDeviceClip(frame)) { | 468 if (NeedDeviceClip(frame)) { |
| 460 render_pass_scissor_in_draw_space.Intersect( | 469 render_pass_scissor_in_draw_space.Intersect( |
| 461 DeviceClipRectInDrawSpace(frame)); | 470 DeviceClipRectInDrawSpace(frame)); |
| 462 } | 471 } |
| 463 | 472 |
| 464 bool render_pass_is_clipped = | 473 bool render_pass_is_clipped = |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 573 auto iter = render_pass_textures_.find(id); | 582 auto iter = render_pass_textures_.find(id); |
| 574 return iter != render_pass_textures_.end() && iter->second->id(); | 583 return iter != render_pass_textures_.end() && iter->second->id(); |
| 575 } | 584 } |
| 576 | 585 |
| 577 // static | 586 // static |
| 578 gfx::Size DirectRenderer::RenderPassTextureSize(const RenderPass* render_pass) { | 587 gfx::Size DirectRenderer::RenderPassTextureSize(const RenderPass* render_pass) { |
| 579 return render_pass->output_rect.size(); | 588 return render_pass->output_rect.size(); |
| 580 } | 589 } |
| 581 | 590 |
| 582 } // namespace cc | 591 } // namespace cc |
| OLD | NEW |