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 |