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/layers/delegated_renderer_layer.h" | 5 #include "cc/layers/delegated_renderer_layer.h" |
6 | 6 |
7 #include "cc/layers/delegated_renderer_layer_client.h" | 7 #include "cc/layers/delegated_renderer_layer_client.h" |
8 #include "cc/layers/delegated_renderer_layer_impl.h" | 8 #include "cc/layers/delegated_renderer_layer_impl.h" |
9 #include "cc/output/delegated_frame_data.h" | 9 #include "cc/output/delegated_frame_data.h" |
10 #include "cc/quads/render_pass_draw_quad.h" | 10 #include "cc/quads/render_pass_draw_quad.h" |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
100 SetNextCommitWaitsForActivation(); | 100 SetNextCommitWaitsForActivation(); |
101 } | 101 } |
102 | 102 |
103 void DelegatedRendererLayer::SetDisplaySize(gfx::Size size) { | 103 void DelegatedRendererLayer::SetDisplaySize(gfx::Size size) { |
104 if (display_size_ == size) | 104 if (display_size_ == size) |
105 return; | 105 return; |
106 display_size_ = size; | 106 display_size_ = size; |
107 SetNeedsCommit(); | 107 SetNeedsCommit(); |
108 } | 108 } |
109 | 109 |
110 static bool FrameDataHasFilter(DelegatedFrameData* frame) { | 110 static bool FrameDataRequiresFilterContext(const DelegatedFrameData* frame) { |
111 for (size_t i = 0; i < frame->render_pass_list.size(); ++i) { | 111 for (size_t i = 0; i < frame->render_pass_list.size(); ++i) { |
112 const QuadList& quad_list = frame->render_pass_list[i]->quad_list; | 112 const QuadList& quad_list = frame->render_pass_list[i]->quad_list; |
113 for (size_t j = 0; j < quad_list.size(); ++j) { | 113 for (size_t j = 0; j < quad_list.size(); ++j) { |
| 114 if (quad_list[j]->shared_quad_state->blend_mode != |
| 115 SkXfermode::kSrcOver_Mode) |
| 116 return true; |
114 if (quad_list[j]->material != DrawQuad::RENDER_PASS) | 117 if (quad_list[j]->material != DrawQuad::RENDER_PASS) |
115 continue; | 118 continue; |
116 const RenderPassDrawQuad* render_pass_quad = | 119 const RenderPassDrawQuad* render_pass_quad = |
117 RenderPassDrawQuad::MaterialCast(quad_list[j]); | 120 RenderPassDrawQuad::MaterialCast(quad_list[j]); |
118 if (!render_pass_quad->filters.IsEmpty() || | 121 if (!render_pass_quad->filters.IsEmpty() || |
119 !render_pass_quad->background_filters.IsEmpty()) | 122 !render_pass_quad->background_filters.IsEmpty()) |
120 return true; | 123 return true; |
121 } | 124 } |
122 } | 125 } |
123 return false; | 126 return false; |
124 } | 127 } |
125 | 128 |
126 bool DelegatedRendererLayer::Update(ResourceUpdateQueue* queue, | 129 bool DelegatedRendererLayer::Update(ResourceUpdateQueue* queue, |
127 const OcclusionTracker* occlusion) { | 130 const OcclusionTracker* occlusion) { |
128 bool updated = Layer::Update(queue, occlusion); | 131 bool updated = Layer::Update(queue, occlusion); |
129 if (!should_collect_new_frame_) | 132 if (!should_collect_new_frame_) |
130 return updated; | 133 return updated; |
131 | 134 |
132 frame_data_ = | 135 frame_data_ = |
133 frame_provider_->GetFrameDataAndRefResources(this, &frame_damage_); | 136 frame_provider_->GetFrameDataAndRefResources(this, &frame_damage_); |
134 should_collect_new_frame_ = false; | 137 should_collect_new_frame_ = false; |
135 | 138 |
136 // If any quad has a filter operation, then we need a filter context to draw | 139 // If any quad has a filter operation or a blend mode other than normal, |
137 // this layer's content. | 140 // then we need an offscreen context to draw this layer's content. |
138 if (FrameDataHasFilter(frame_data_) && layer_tree_host()) | 141 if (FrameDataRequiresFilterContext(frame_data_)) |
139 layer_tree_host()->set_needs_filter_context(); | 142 layer_tree_host()->set_needs_filter_context(); |
140 | 143 |
141 return true; | 144 return true; |
142 } | 145 } |
143 | 146 |
144 } // namespace cc | 147 } // namespace cc |
OLD | NEW |