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

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

Issue 2543473004: cc: Move filters from RenderPassDrawQuad to RenderPass (Closed)
Patch Set: Created 4 years 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
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 <stddef.h> 7 #include <stddef.h>
8 8
9 #include <unordered_map> 9 #include <unordered_map>
10 #include <utility> 10 #include <utility>
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 DCHECK(initialized_); 159 DCHECK(initialized_);
160 if (visible_ == visible) 160 if (visible_ == visible)
161 return; 161 return;
162 visible_ = visible; 162 visible_ = visible;
163 DidChangeVisibility(); 163 DidChangeVisibility();
164 } 164 }
165 165
166 void DirectRenderer::DecideRenderPassAllocationsForFrame( 166 void DirectRenderer::DecideRenderPassAllocationsForFrame(
167 const RenderPassList& render_passes_in_draw_order) { 167 const RenderPassList& render_passes_in_draw_order) {
168 render_pass_bypass_quads_.clear(); 168 render_pass_bypass_quads_.clear();
169 render_pass_filters_.clear();
danakj 2016/12/01 01:50:46 This isn't part of allocating.. while I appreciate
ajuma 2016/12/13 15:08:11 Done.
170 render_pass_background_filters_.clear();
169 171
170 std::unordered_map<RenderPassId, gfx::Size, RenderPassIdHash> 172 std::unordered_map<RenderPassId, gfx::Size, RenderPassIdHash>
171 render_passes_in_frame; 173 render_passes_in_frame;
172 RenderPass* root_render_pass = render_passes_in_draw_order.back().get(); 174 RenderPass* root_render_pass = render_passes_in_draw_order.back().get();
173 for (size_t i = 0; i < render_passes_in_draw_order.size(); ++i) { 175 for (size_t i = 0; i < render_passes_in_draw_order.size(); ++i) {
174 RenderPass* pass = render_passes_in_draw_order[i].get(); 176 RenderPass* pass = render_passes_in_draw_order[i].get();
175 if (pass != root_render_pass) { 177 if (pass != root_render_pass) {
178 if (!pass->filters.IsEmpty())
179 render_pass_filters_.push_back(std::make_pair(pass->id, pass->filters));
danakj 2016/12/01 01:50:46 why copy the filters, you could store a pointer to
weiliangc 2016/12/01 21:20:54 I mean we store the filters pointers here, and whe
danakj 2016/12/01 21:26:02 i'm not totally sure what you mean, but what i mea
ajuma 2016/12/13 15:08:11 Changed to storing a pointer to the RenderPass's f
180 if (!pass->background_filters.IsEmpty()) {
181 render_pass_background_filters_.push_back(
182 std::make_pair(pass->id, pass->background_filters));
183 }
176 if (const TileDrawQuad* tile_quad = CanPassBeDrawnDirectly(pass)) { 184 if (const TileDrawQuad* tile_quad = CanPassBeDrawnDirectly(pass)) {
177 render_pass_bypass_quads_[pass->id] = *tile_quad; 185 render_pass_bypass_quads_[pass->id] = *tile_quad;
178 continue; 186 continue;
179 } 187 }
188 } else {
189 DCHECK(pass->filters.IsEmpty());
190 DCHECK(pass->background_filters.IsEmpty());
180 } 191 }
181 render_passes_in_frame.insert(std::pair<RenderPassId, gfx::Size>( 192 render_passes_in_frame.insert(std::pair<RenderPassId, gfx::Size>(
182 pass->id, RenderPassTextureSize(pass))); 193 pass->id, RenderPassTextureSize(pass)));
183 } 194 }
184 195
185 std::vector<RenderPassId> passes_to_delete; 196 std::vector<RenderPassId> passes_to_delete;
186 for (auto pass_iter = render_pass_textures_.begin(); 197 for (auto pass_iter = render_pass_textures_.begin();
187 pass_iter != render_pass_textures_.end(); ++pass_iter) { 198 pass_iter != render_pass_textures_.end(); ++pass_iter) {
188 auto it = render_passes_in_frame.find(pass_iter->first); 199 auto it = render_passes_in_frame.find(pass_iter->first);
189 if (it == render_passes_in_frame.end()) { 200 if (it == render_passes_in_frame.end()) {
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 output_surface_plane.quad_rect_in_target_space = 281 output_surface_plane.quad_rect_in_target_space =
271 root_render_pass->output_rect; 282 root_render_pass->output_rect;
272 output_surface_plane.use_output_surface_for_resource = true; 283 output_surface_plane.use_output_surface_for_resource = true;
273 output_surface_plane.overlay_handled = true; 284 output_surface_plane.overlay_handled = true;
274 frame.overlay_list.push_back(output_surface_plane); 285 frame.overlay_list.push_back(output_surface_plane);
275 } 286 }
276 287
277 // Attempt to replace some or all of the quads of the root render pass with 288 // Attempt to replace some or all of the quads of the root render pass with
278 // overlays. 289 // overlays.
279 overlay_processor_->ProcessForOverlays( 290 overlay_processor_->ProcessForOverlays(
280 resource_provider_, root_render_pass, &frame.overlay_list, 291 resource_provider_, root_render_pass, render_pass_filters_,
292 render_pass_background_filters_, &frame.overlay_list,
281 &frame.ca_layer_overlay_list, &frame.root_damage_rect); 293 &frame.ca_layer_overlay_list, &frame.root_damage_rect);
282 294
283 // We can skip all drawing if the damage rect is now empty. 295 // We can skip all drawing if the damage rect is now empty.
284 bool skip_drawing_root_render_pass = 296 bool skip_drawing_root_render_pass =
285 frame.root_damage_rect.IsEmpty() && allow_empty_swap_; 297 frame.root_damage_rect.IsEmpty() && allow_empty_swap_;
286 298
287 // If we have to draw but don't support partial swap, the whole output should 299 // If we have to draw but don't support partial swap, the whole output should
288 // be considered damaged. 300 // be considered damaged.
289 if (!skip_drawing_root_render_pass && !use_partial_swap_) 301 if (!skip_drawing_root_render_pass && !use_partial_swap_)
290 frame.root_damage_rect = root_render_pass->output_rect; 302 frame.root_damage_rect = root_render_pass->output_rect;
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
398 return; 410 return;
399 } 411 }
400 412
401 std::vector<gfx::QuadF> quads; 413 std::vector<gfx::QuadF> quads;
402 poly.ToQuads2D(&quads); 414 poly.ToQuads2D(&quads);
403 for (size_t i = 0; i < quads.size(); ++i) { 415 for (size_t i = 0; i < quads.size(); ++i) {
404 DoDrawQuad(frame, poly.original_ref(), &quads[i]); 416 DoDrawQuad(frame, poly.original_ref(), &quads[i]);
405 } 417 }
406 } 418 }
407 419
420 const FilterOperations* DirectRenderer::FiltersForPass(RenderPassId id) const {
danakj 2016/12/01 01:50:46 const&?
weiliangc 2016/12/01 21:20:54 like mentioned in line 179, if we store pointers,
danakj 2016/12/01 21:26:02 here I'm talking about the |id|
ajuma 2016/12/13 15:08:11 Changed |id| to const&, but then changed back to p
421 auto it =
422 std::find_if(render_pass_filters_.begin(), render_pass_filters_.end(),
423 [id](const std::pair<RenderPassId, FilterOperations>& p) {
424 return p.first == id;
425 });
426 return it == render_pass_filters_.end() ? nullptr : &it->second;
427 }
428
429 const FilterOperations* DirectRenderer::BackgroundFiltersForPass(
430 RenderPassId id) const {
danakj 2016/12/01 01:50:46 const&
ajuma 2016/12/13 15:08:11 Done.
431 auto it =
432 std::find_if(render_pass_background_filters_.begin(),
433 render_pass_background_filters_.end(),
434 [id](const std::pair<RenderPassId, FilterOperations>& p) {
435 return p.first == id;
436 });
437 return it == render_pass_background_filters_.end() ? nullptr : &it->second;
438 }
439
408 void DirectRenderer::FlushPolygons( 440 void DirectRenderer::FlushPolygons(
409 std::deque<std::unique_ptr<DrawPolygon>>* poly_list, 441 std::deque<std::unique_ptr<DrawPolygon>>* poly_list,
410 DrawingFrame* frame, 442 DrawingFrame* frame,
411 const gfx::Rect& render_pass_scissor, 443 const gfx::Rect& render_pass_scissor,
412 bool use_render_pass_scissor) { 444 bool use_render_pass_scissor) {
413 if (poly_list->empty()) { 445 if (poly_list->empty()) {
414 return; 446 return;
415 } 447 }
416 448
417 BspTree bsp_tree(poly_list); 449 BspTree bsp_tree(poly_list);
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
572 auto iter = render_pass_textures_.find(id); 604 auto iter = render_pass_textures_.find(id);
573 return iter != render_pass_textures_.end() && iter->second->id(); 605 return iter != render_pass_textures_.end() && iter->second->id();
574 } 606 }
575 607
576 // static 608 // static
577 gfx::Size DirectRenderer::RenderPassTextureSize(const RenderPass* render_pass) { 609 gfx::Size DirectRenderer::RenderPassTextureSize(const RenderPass* render_pass) {
578 return render_pass->output_rect.size(); 610 return render_pass->output_rect.size();
579 } 611 }
580 612
581 } // namespace cc 613 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698