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

Side by Side Diff: cc/output/overlay_processor.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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/overlay_processor.h" 5 #include "cc/output/overlay_processor.h"
6 6
7 #include "cc/output/output_surface.h" 7 #include "cc/output/output_surface.h"
8 #include "cc/output/overlay_strategy_single_on_top.h" 8 #include "cc/output/overlay_strategy_single_on_top.h"
9 #include "cc/output/overlay_strategy_underlay.h" 9 #include "cc/output/overlay_strategy_underlay.h"
10 #include "cc/quads/draw_quad.h" 10 #include "cc/quads/draw_quad.h"
(...skipping 17 matching lines...) Expand all
28 28
29 gfx::Rect OverlayProcessor::GetAndResetOverlayDamage() { 29 gfx::Rect OverlayProcessor::GetAndResetOverlayDamage() {
30 gfx::Rect result = overlay_damage_rect_; 30 gfx::Rect result = overlay_damage_rect_;
31 overlay_damage_rect_ = gfx::Rect(); 31 overlay_damage_rect_ = gfx::Rect();
32 return result; 32 return result;
33 } 33 }
34 34
35 bool OverlayProcessor::ProcessForCALayers( 35 bool OverlayProcessor::ProcessForCALayers(
36 ResourceProvider* resource_provider, 36 ResourceProvider* resource_provider,
37 RenderPass* render_pass, 37 RenderPass* render_pass,
38 const RenderPassFilterList& render_pass_filters,
39 const RenderPassFilterList& render_pass_background_filters,
38 OverlayCandidateList* overlay_candidates, 40 OverlayCandidateList* overlay_candidates,
39 CALayerOverlayList* ca_layer_overlays, 41 CALayerOverlayList* ca_layer_overlays,
40 gfx::Rect* damage_rect) { 42 gfx::Rect* damage_rect) {
41 OverlayCandidateValidator* overlay_validator = 43 OverlayCandidateValidator* overlay_validator =
42 surface_->GetOverlayCandidateValidator(); 44 surface_->GetOverlayCandidateValidator();
43 if (!overlay_validator || !overlay_validator->AllowCALayerOverlays()) 45 if (!overlay_validator || !overlay_validator->AllowCALayerOverlays())
44 return false; 46 return false;
45 47
46 if (!ProcessForCALayerOverlays(resource_provider, 48 if (!ProcessForCALayerOverlays(
47 gfx::RectF(render_pass->output_rect), 49 resource_provider, gfx::RectF(render_pass->output_rect),
48 render_pass->quad_list, ca_layer_overlays)) 50 render_pass->quad_list, render_pass_filters,
51 render_pass_background_filters, ca_layer_overlays))
49 return false; 52 return false;
50 53
51 // CALayer overlays are all-or-nothing. If all quads were replaced with 54 // CALayer overlays are all-or-nothing. If all quads were replaced with
52 // layers then clear the list and remove the backbuffer from the overcandidate 55 // layers then clear the list and remove the backbuffer from the overcandidate
53 // list. 56 // list.
54 overlay_candidates->clear(); 57 overlay_candidates->clear();
55 overlay_damage_rect_ = render_pass->output_rect; 58 overlay_damage_rect_ = render_pass->output_rect;
56 *damage_rect = gfx::Rect(); 59 *damage_rect = gfx::Rect();
57 return true; 60 return true;
58 } 61 }
59 62
60 void OverlayProcessor::ProcessForOverlays(ResourceProvider* resource_provider, 63 void OverlayProcessor::ProcessForOverlays(
61 RenderPass* render_pass, 64 ResourceProvider* resource_provider,
62 OverlayCandidateList* candidates, 65 RenderPass* render_pass,
63 CALayerOverlayList* ca_layer_overlays, 66 const RenderPassFilterList& render_pass_filters,
64 gfx::Rect* damage_rect) { 67 const RenderPassFilterList& render_pass_background_filters,
68 OverlayCandidateList* candidates,
69 CALayerOverlayList* ca_layer_overlays,
70 gfx::Rect* damage_rect) {
65 // If we have any copy requests, we can't remove any quads for overlays or 71 // If we have any copy requests, we can't remove any quads for overlays or
66 // CALayers because the framebuffer would be missing the removed quads' 72 // CALayers because the framebuffer would be missing the removed quads'
67 // contents. 73 // contents.
68 if (!render_pass->copy_requests.empty()) { 74 if (!render_pass->copy_requests.empty()) {
69 // If overlay processing was skipped for a frame there's no way to be sure 75 // If overlay processing was skipped for a frame there's no way to be sure
70 // of the state of the previous frame, so reset. 76 // of the state of the previous frame, so reset.
71 previous_frame_underlay_rect_ = gfx::Rect(); 77 previous_frame_underlay_rect_ = gfx::Rect();
72 return; 78 return;
73 } 79 }
74 80
75 // First attempt to process for CALayers. 81 // First attempt to process for CALayers.
76 if (ProcessForCALayers(resource_provider, render_pass, candidates, 82 if (ProcessForCALayers(resource_provider, render_pass, render_pass_filters,
83 render_pass_background_filters, candidates,
77 ca_layer_overlays, damage_rect)) { 84 ca_layer_overlays, damage_rect)) {
78 return; 85 return;
79 } 86 }
80 87
81 // Only if that fails, attempt hardware overlay strategies. 88 // Only if that fails, attempt hardware overlay strategies.
82 for (const auto& strategy : strategies_) { 89 for (const auto& strategy : strategies_) {
83 if (!strategy->Attempt(resource_provider, render_pass, candidates)) 90 if (!strategy->Attempt(resource_provider, render_pass, candidates))
84 continue; 91 continue;
85 92
86 UpdateDamageRect(candidates, damage_rect); 93 UpdateDamageRect(candidates, damage_rect);
(...skipping 28 matching lines...) Expand all
115 } 122 }
116 123
117 if (this_frame_underlay_rect == previous_frame_underlay_rect_) 124 if (this_frame_underlay_rect == previous_frame_underlay_rect_)
118 damage_rect->Subtract(this_frame_underlay_rect); 125 damage_rect->Subtract(this_frame_underlay_rect);
119 previous_frame_underlay_rect_ = this_frame_underlay_rect; 126 previous_frame_underlay_rect_ = this_frame_underlay_rect;
120 127
121 damage_rect->Union(output_surface_overlay_damage_rect); 128 damage_rect->Union(output_surface_overlay_damage_rect);
122 } 129 }
123 130
124 } // namespace cc 131 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698