Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1083)

Side by Side Diff: cc/output/direct_renderer.cc

Issue 1437413002: cc: Remove ScopedPtrVector and cc::remove_if. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/output/bsp_tree_unittest.cc ('k') | cc/output/gl_renderer.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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.Union(next_root_damage_rect_); 211 frame.root_damage_rect.Union(next_root_damage_rect_);
211 next_root_damage_rect_ = gfx::Rect(); 212 next_root_damage_rect_ = gfx::Rect();
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 } else { 250 } else {
250 overlay_processor_->ProcessForOverlays( 251 overlay_processor_->ProcessForOverlays(
251 resource_provider_, render_passes_in_draw_order, &frame.overlay_list, 252 resource_provider_, render_passes_in_draw_order, &frame.overlay_list,
252 &frame.root_damage_rect); 253 &frame.root_damage_rect);
253 254
254 // No need to render in case the damage rect is completely composited 255 // No need to render in case the damage rect is completely composited
255 // using 256 // using
256 // overlays and dont have any copy requests. 257 // overlays and dont have any copy requests.
257 if (frame.root_damage_rect.IsEmpty()) { 258 if (frame.root_damage_rect.IsEmpty()) {
258 bool handle_copy_requests = false; 259 bool handle_copy_requests = false;
259 for (auto* pass : *render_passes_in_draw_order) { 260 for (const auto& pass : *render_passes_in_draw_order) {
260 if (!pass->copy_requests.empty()) { 261 if (!pass->copy_requests.empty()) {
261 handle_copy_requests = true; 262 handle_copy_requests = true;
262 break; 263 break;
263 } 264 }
264 } 265 }
265 266
266 if (!handle_copy_requests) { 267 if (!handle_copy_requests) {
267 BindFramebufferToOutputSurface(&frame); 268 BindFramebufferToOutputSurface(&frame);
268 FinishDrawingFrame(&frame); 269 FinishDrawingFrame(&frame);
269 render_passes_in_draw_order->clear(); 270 render_passes_in_draw_order->clear();
270 return; 271 return;
271 } 272 }
272 overlay_processor_->ProcessForOverlays( 273 overlay_processor_->ProcessForOverlays(
273 resource_provider_, render_passes_in_draw_order, 274 resource_provider_, render_passes_in_draw_order,
274 &frame.overlay_list, &frame.root_damage_rect); 275 &frame.overlay_list, &frame.root_damage_rect);
275 } 276 }
276 } 277 }
277 } 278 }
278 279
279 for (size_t i = 0; i < render_passes_in_draw_order->size(); ++i) { 280 for (const auto& pass : *render_passes_in_draw_order) {
280 RenderPass* pass = render_passes_in_draw_order->at(i); 281 DrawRenderPass(&frame, pass.get());
281 DrawRenderPass(&frame, pass);
282 282
283 for (ScopedPtrVector<CopyOutputRequest>::iterator it = 283 bool first_request = true;
284 pass->copy_requests.begin(); 284 for (auto& copy_request : pass->copy_requests) {
285 it != pass->copy_requests.end(); 285 // Doing a readback is destructive of our state on Mac, so make sure
286 ++it) { 286 // we restore the state between readbacks. http://crbug.com/99393.
287 if (it != pass->copy_requests.begin()) { 287 if (!first_request)
288 // Doing a readback is destructive of our state on Mac, so make sure 288 UseRenderPass(&frame, pass.get());
289 // we restore the state between readbacks. http://crbug.com/99393. 289 CopyCurrentRenderPassToBitmap(&frame, std::move(copy_request));
290 UseRenderPass(&frame, pass); 290 first_request = false;
291 }
292 CopyCurrentRenderPassToBitmap(&frame, pass->copy_requests.take(it));
293 } 291 }
294 } 292 }
295 FinishDrawingFrame(&frame); 293 FinishDrawingFrame(&frame);
296 294
297 render_passes_in_draw_order->clear(); 295 render_passes_in_draw_order->clear();
298 } 296 }
299 297
300 gfx::Rect DirectRenderer::ComputeScissorRectForRenderPass( 298 gfx::Rect DirectRenderer::ComputeScissorRectForRenderPass(
301 const DrawingFrame* frame) { 299 const DrawingFrame* frame) {
302 gfx::Rect render_pass_scissor = frame->current_render_pass->output_rect; 300 gfx::Rect render_pass_scissor = frame->current_render_pass->output_rect;
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after
570 ScopedResource* texture = render_pass_textures_.get(id); 568 ScopedResource* texture = render_pass_textures_.get(id);
571 return texture && texture->id(); 569 return texture && texture->id();
572 } 570 }
573 571
574 // static 572 // static
575 gfx::Size DirectRenderer::RenderPassTextureSize(const RenderPass* render_pass) { 573 gfx::Size DirectRenderer::RenderPassTextureSize(const RenderPass* render_pass) {
576 return render_pass->output_rect.size(); 574 return render_pass->output_rect.size();
577 } 575 }
578 576
579 } // namespace cc 577 } // namespace cc
OLDNEW
« no previous file with comments | « cc/output/bsp_tree_unittest.cc ('k') | cc/output/gl_renderer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698