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 <utility> | 7 #include <utility> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/containers/hash_tables.h" | 10 #include "base/containers/hash_tables.h" |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
144 const gfx::Vector2d& amount) { | 144 const gfx::Vector2d& amount) { |
145 enlarge_pass_texture_amount_ = amount; | 145 enlarge_pass_texture_amount_ = amount; |
146 } | 146 } |
147 | 147 |
148 void DirectRenderer::DecideRenderPassAllocationsForFrame( | 148 void DirectRenderer::DecideRenderPassAllocationsForFrame( |
149 const RenderPassList& render_passes_in_draw_order) { | 149 const RenderPassList& render_passes_in_draw_order) { |
150 base::hash_map<RenderPassId, gfx::Size> render_passes_in_frame; | 150 base::hash_map<RenderPassId, gfx::Size> render_passes_in_frame; |
151 for (size_t i = 0; i < render_passes_in_draw_order.size(); ++i) | 151 for (size_t i = 0; i < render_passes_in_draw_order.size(); ++i) |
152 render_passes_in_frame.insert(std::pair<RenderPassId, gfx::Size>( | 152 render_passes_in_frame.insert(std::pair<RenderPassId, gfx::Size>( |
153 render_passes_in_draw_order[i]->id, | 153 render_passes_in_draw_order[i]->id, |
154 RenderPassTextureSize(render_passes_in_draw_order[i]))); | 154 RenderPassTextureSize(render_passes_in_draw_order[i].get()))); |
155 | 155 |
156 std::vector<RenderPassId> passes_to_delete; | 156 std::vector<RenderPassId> passes_to_delete; |
157 for (auto pass_iter = render_pass_textures_.begin(); | 157 for (auto pass_iter = render_pass_textures_.begin(); |
158 pass_iter != render_pass_textures_.end(); ++pass_iter) { | 158 pass_iter != render_pass_textures_.end(); ++pass_iter) { |
159 base::hash_map<RenderPassId, gfx::Size>::const_iterator it = | 159 base::hash_map<RenderPassId, gfx::Size>::const_iterator it = |
160 render_passes_in_frame.find(pass_iter->first); | 160 render_passes_in_frame.find(pass_iter->first); |
161 if (it == render_passes_in_frame.end()) { | 161 if (it == render_passes_in_frame.end()) { |
162 passes_to_delete.push_back(pass_iter->first); | 162 passes_to_delete.push_back(pass_iter->first); |
163 continue; | 163 continue; |
164 } | 164 } |
(...skipping 26 matching lines...) Expand all Loading... | |
191 void DirectRenderer::DrawFrame(RenderPassList* render_passes_in_draw_order, | 191 void DirectRenderer::DrawFrame(RenderPassList* render_passes_in_draw_order, |
192 float device_scale_factor, | 192 float device_scale_factor, |
193 const gfx::Rect& device_viewport_rect, | 193 const gfx::Rect& device_viewport_rect, |
194 const gfx::Rect& device_clip_rect, | 194 const gfx::Rect& device_clip_rect, |
195 bool disable_picture_quad_image_filtering) { | 195 bool disable_picture_quad_image_filtering) { |
196 TRACE_EVENT0("cc", "DirectRenderer::DrawFrame"); | 196 TRACE_EVENT0("cc", "DirectRenderer::DrawFrame"); |
197 UMA_HISTOGRAM_COUNTS( | 197 UMA_HISTOGRAM_COUNTS( |
198 "Renderer4.renderPassCount", | 198 "Renderer4.renderPassCount", |
199 base::saturated_cast<int>(render_passes_in_draw_order->size())); | 199 base::saturated_cast<int>(render_passes_in_draw_order->size())); |
200 | 200 |
201 const RenderPass* root_render_pass = render_passes_in_draw_order->back(); | 201 const RenderPass* root_render_pass = |
202 render_passes_in_draw_order->back().get(); | |
202 DCHECK(root_render_pass); | 203 DCHECK(root_render_pass); |
203 | 204 |
204 DrawingFrame frame; | 205 DrawingFrame frame; |
205 frame.render_passes_in_draw_order = render_passes_in_draw_order; | 206 frame.render_passes_in_draw_order = render_passes_in_draw_order; |
206 frame.root_render_pass = root_render_pass; | 207 frame.root_render_pass = root_render_pass; |
207 frame.root_damage_rect = Capabilities().using_partial_swap | 208 frame.root_damage_rect = Capabilities().using_partial_swap |
208 ? root_render_pass->damage_rect | 209 ? root_render_pass->damage_rect |
209 : root_render_pass->output_rect; | 210 : root_render_pass->output_rect; |
210 frame.root_damage_rect.Intersect(gfx::Rect(device_viewport_rect.size())); | 211 frame.root_damage_rect.Intersect(gfx::Rect(device_viewport_rect.size())); |
211 frame.device_viewport_rect = device_viewport_rect; | 212 frame.device_viewport_rect = device_viewport_rect; |
(...skipping 28 matching lines...) Expand all Loading... | |
240 // otherwise the framebuffer will be missing the overlay contents. | 241 // otherwise the framebuffer will be missing the overlay contents. |
241 if (root_render_pass->copy_requests.empty()) { | 242 if (root_render_pass->copy_requests.empty()) { |
242 overlay_processor_->ProcessForOverlays( | 243 overlay_processor_->ProcessForOverlays( |
243 resource_provider_, render_passes_in_draw_order, &frame.overlay_list, | 244 resource_provider_, render_passes_in_draw_order, &frame.overlay_list, |
244 &frame.root_damage_rect); | 245 &frame.root_damage_rect); |
245 | 246 |
246 // No need to render in case the damage rect is completely composited using | 247 // No need to render in case the damage rect is completely composited using |
247 // overlays and dont have any copy requests. | 248 // overlays and dont have any copy requests. |
248 if (frame.root_damage_rect.IsEmpty()) { | 249 if (frame.root_damage_rect.IsEmpty()) { |
249 bool handle_copy_requests = false; | 250 bool handle_copy_requests = false; |
250 for (auto* pass : *render_passes_in_draw_order) { | 251 for (const scoped_ptr<RenderPass>& pass : *render_passes_in_draw_order) { |
danakj
2015/11/17 01:12:17
auto
vmpstr
2015/11/17 23:26:24
Done.
| |
251 if (!pass->copy_requests.empty()) { | 252 if (!pass->copy_requests.empty()) { |
252 handle_copy_requests = true; | 253 handle_copy_requests = true; |
253 break; | 254 break; |
254 } | 255 } |
255 } | 256 } |
256 | 257 |
257 if (!handle_copy_requests) { | 258 if (!handle_copy_requests) { |
258 BindFramebufferToOutputSurface(&frame); | 259 BindFramebufferToOutputSurface(&frame); |
259 FinishDrawingFrame(&frame); | 260 FinishDrawingFrame(&frame); |
260 render_passes_in_draw_order->clear(); | 261 render_passes_in_draw_order->clear(); |
261 return; | 262 return; |
262 } | 263 } |
263 } | 264 } |
264 } | 265 } |
265 | 266 |
266 for (size_t i = 0; i < render_passes_in_draw_order->size(); ++i) { | 267 for (size_t i = 0; i < render_passes_in_draw_order->size(); ++i) { |
danakj
2015/11/17 01:12:17
what have i done. iterating on size() and using at
vmpstr
2015/11/17 23:26:24
Done.
| |
267 RenderPass* pass = render_passes_in_draw_order->at(i); | 268 RenderPass* pass = (*render_passes_in_draw_order)[i].get(); |
268 DrawRenderPass(&frame, pass); | 269 DrawRenderPass(&frame, pass); |
269 | 270 |
270 for (ScopedPtrVector<CopyOutputRequest>::iterator it = | 271 for (std::vector<scoped_ptr<CopyOutputRequest>>::iterator it = |
danakj
2015/11/17 01:12:17
auto
vmpstr
2015/11/17 23:26:24
Done.
| |
271 pass->copy_requests.begin(); | 272 pass->copy_requests.begin(); |
272 it != pass->copy_requests.end(); | 273 it != pass->copy_requests.end(); ++it) { |
273 ++it) { | |
274 if (it != pass->copy_requests.begin()) { | 274 if (it != pass->copy_requests.begin()) { |
275 // Doing a readback is destructive of our state on Mac, so make sure | 275 // Doing a readback is destructive of our state on Mac, so make sure |
276 // we restore the state between readbacks. http://crbug.com/99393. | 276 // we restore the state between readbacks. http://crbug.com/99393. |
277 UseRenderPass(&frame, pass); | 277 UseRenderPass(&frame, pass); |
278 } | 278 } |
279 CopyCurrentRenderPassToBitmap(&frame, pass->copy_requests.take(it)); | 279 CopyCurrentRenderPassToBitmap(&frame, it->Pass()); |
280 } | 280 } |
281 } | 281 } |
282 FinishDrawingFrame(&frame); | 282 FinishDrawingFrame(&frame); |
283 | 283 |
284 render_passes_in_draw_order->clear(); | 284 render_passes_in_draw_order->clear(); |
285 } | 285 } |
286 | 286 |
287 gfx::Rect DirectRenderer::ComputeScissorRectForRenderPass( | 287 gfx::Rect DirectRenderer::ComputeScissorRectForRenderPass( |
288 const DrawingFrame* frame) { | 288 const DrawingFrame* frame) { |
289 gfx::Rect render_pass_scissor = frame->current_render_pass->output_rect; | 289 gfx::Rect render_pass_scissor = frame->current_render_pass->output_rect; |
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
557 ScopedResource* texture = render_pass_textures_.get(id); | 557 ScopedResource* texture = render_pass_textures_.get(id); |
558 return texture && texture->id(); | 558 return texture && texture->id(); |
559 } | 559 } |
560 | 560 |
561 // static | 561 // static |
562 gfx::Size DirectRenderer::RenderPassTextureSize(const RenderPass* render_pass) { | 562 gfx::Size DirectRenderer::RenderPassTextureSize(const RenderPass* render_pass) { |
563 return render_pass->output_rect.size(); | 563 return render_pass->output_rect.size(); |
564 } | 564 } |
565 | 565 |
566 } // namespace cc | 566 } // namespace cc |
OLD | NEW |