| 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 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 191 | 191 |
| 192 for (auto& pass : render_passes_in_draw_order) { | 192 for (auto& pass : render_passes_in_draw_order) { |
| 193 auto& resource = render_pass_textures_[pass->id]; | 193 auto& resource = render_pass_textures_[pass->id]; |
| 194 if (!resource) | 194 if (!resource) |
| 195 resource = ScopedResource::Create(resource_provider_); | 195 resource = ScopedResource::Create(resource_provider_); |
| 196 } | 196 } |
| 197 } | 197 } |
| 198 | 198 |
| 199 void DirectRenderer::DrawFrame(RenderPassList* render_passes_in_draw_order, | 199 void DirectRenderer::DrawFrame(RenderPassList* render_passes_in_draw_order, |
| 200 float device_scale_factor, | 200 float device_scale_factor, |
| 201 const gfx::ColorSpace& device_color_space, |
| 201 const gfx::Rect& device_viewport_rect, | 202 const gfx::Rect& device_viewport_rect, |
| 202 const gfx::Rect& device_clip_rect, | 203 const gfx::Rect& device_clip_rect, |
| 203 bool disable_picture_quad_image_filtering) { | 204 bool disable_picture_quad_image_filtering) { |
| 204 TRACE_EVENT0("cc", "DirectRenderer::DrawFrame"); | 205 TRACE_EVENT0("cc", "DirectRenderer::DrawFrame"); |
| 205 UMA_HISTOGRAM_COUNTS( | 206 UMA_HISTOGRAM_COUNTS( |
| 206 "Renderer4.renderPassCount", | 207 "Renderer4.renderPassCount", |
| 207 base::saturated_cast<int>(render_passes_in_draw_order->size())); | 208 base::saturated_cast<int>(render_passes_in_draw_order->size())); |
| 208 | 209 |
| 209 RenderPass* root_render_pass = render_passes_in_draw_order->back().get(); | 210 RenderPass* root_render_pass = render_passes_in_draw_order->back().get(); |
| 210 DCHECK(root_render_pass); | 211 DCHECK(root_render_pass); |
| 211 | 212 |
| 212 DrawingFrame frame; | 213 DrawingFrame frame; |
| 213 frame.render_passes_in_draw_order = render_passes_in_draw_order; | 214 frame.render_passes_in_draw_order = render_passes_in_draw_order; |
| 214 frame.root_render_pass = root_render_pass; | 215 frame.root_render_pass = root_render_pass; |
| 215 frame.root_damage_rect = root_render_pass->damage_rect; | 216 frame.root_damage_rect = root_render_pass->damage_rect; |
| 216 frame.root_damage_rect.Union(overlay_processor_->GetAndResetOverlayDamage()); | 217 frame.root_damage_rect.Union(overlay_processor_->GetAndResetOverlayDamage()); |
| 217 frame.root_damage_rect.Intersect(gfx::Rect(device_viewport_rect.size())); | 218 frame.root_damage_rect.Intersect(gfx::Rect(device_viewport_rect.size())); |
| 218 frame.device_viewport_rect = device_viewport_rect; | 219 frame.device_viewport_rect = device_viewport_rect; |
| 219 frame.device_clip_rect = device_clip_rect; | 220 frame.device_clip_rect = device_clip_rect; |
| 220 frame.disable_picture_quad_image_filtering = | 221 frame.disable_picture_quad_image_filtering = |
| 221 disable_picture_quad_image_filtering; | 222 disable_picture_quad_image_filtering; |
| 222 | 223 |
| 223 EnsureBackbuffer(); | 224 EnsureBackbuffer(); |
| 224 | 225 |
| 225 // Only reshape when we know we are going to draw. Otherwise, the reshape | 226 // Only reshape when we know we are going to draw. Otherwise, the reshape |
| 226 // can leave the window at the wrong size if we never draw and the proper | 227 // can leave the window at the wrong size if we never draw and the proper |
| 227 // viewport size is never set. | 228 // viewport size is never set. |
| 228 output_surface_->Reshape(device_viewport_rect.size(), device_scale_factor, | 229 output_surface_->Reshape(device_viewport_rect.size(), device_scale_factor, |
| 230 device_color_space, |
| 229 frame.root_render_pass->has_transparent_background); | 231 frame.root_render_pass->has_transparent_background); |
| 230 | 232 |
| 231 BeginDrawingFrame(&frame); | 233 BeginDrawingFrame(&frame); |
| 232 | 234 |
| 233 // Draw all non-root render passes except for the root render pass. | 235 // Draw all non-root render passes except for the root render pass. |
| 234 for (const auto& pass : *render_passes_in_draw_order) { | 236 for (const auto& pass : *render_passes_in_draw_order) { |
| 235 if (pass.get() == root_render_pass) | 237 if (pass.get() == root_render_pass) |
| 236 break; | 238 break; |
| 237 DrawRenderPassAndExecuteCopyRequests(&frame, pass.get()); | 239 DrawRenderPassAndExecuteCopyRequests(&frame, pass.get()); |
| 238 } | 240 } |
| (...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 571 auto iter = render_pass_textures_.find(id); | 573 auto iter = render_pass_textures_.find(id); |
| 572 return iter != render_pass_textures_.end() && iter->second->id(); | 574 return iter != render_pass_textures_.end() && iter->second->id(); |
| 573 } | 575 } |
| 574 | 576 |
| 575 // static | 577 // static |
| 576 gfx::Size DirectRenderer::RenderPassTextureSize(const RenderPass* render_pass) { | 578 gfx::Size DirectRenderer::RenderPassTextureSize(const RenderPass* render_pass) { |
| 577 return render_pass->output_rect.size(); | 579 return render_pass->output_rect.size(); |
| 578 } | 580 } |
| 579 | 581 |
| 580 } // namespace cc | 582 } // namespace cc |
| OLD | NEW |