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/picture_layer_impl.h" | 5 #include "cc/layers/picture_layer_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <cmath> | 8 #include <cmath> |
9 #include <limits> | 9 #include <limits> |
10 #include <set> | 10 #include <set> |
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
172 render_pass, bounds(), shared_quad_state, append_quads_data); | 172 render_pass, bounds(), shared_quad_state, append_quads_data); |
173 | 173 |
174 SolidColorLayerImpl::AppendSolidQuads( | 174 SolidColorLayerImpl::AppendSolidQuads( |
175 render_pass, occlusion_in_content_space, shared_quad_state, | 175 render_pass, occlusion_in_content_space, shared_quad_state, |
176 visible_content_rect(), raster_source_->GetSolidColor(), | 176 visible_content_rect(), raster_source_->GetSolidColor(), |
177 append_quads_data); | 177 append_quads_data); |
178 return; | 178 return; |
179 } | 179 } |
180 | 180 |
181 float max_contents_scale = MaximumTilingContentsScale(); | 181 float max_contents_scale = MaximumTilingContentsScale(); |
182 gfx::Transform scaled_draw_transform = draw_transform(); | 182 PopulateScaledSharedQuadState(shared_quad_state, max_contents_scale); |
183 scaled_draw_transform.Scale(SK_MScalar1 / max_contents_scale, | |
184 SK_MScalar1 / max_contents_scale); | |
185 gfx::Size scaled_content_bounds = | |
186 gfx::ToCeiledSize(gfx::ScaleSize(bounds(), max_contents_scale)); | |
187 gfx::Rect scaled_visible_content_rect = | |
188 gfx::ScaleToEnclosingRect(visible_content_rect(), max_contents_scale); | |
189 scaled_visible_content_rect.Intersect(gfx::Rect(scaled_content_bounds)); | |
190 Occlusion scaled_occlusion = | 183 Occlusion scaled_occlusion = |
191 occlusion_in_content_space.GetOcclusionWithGivenDrawTransform( | 184 occlusion_in_content_space.GetOcclusionWithGivenDrawTransform( |
192 scaled_draw_transform); | 185 shared_quad_state->content_to_target_transform); |
193 | |
194 shared_quad_state->SetAll( | |
195 scaled_draw_transform, scaled_content_bounds, scaled_visible_content_rect, | |
196 draw_properties().clip_rect, draw_properties().is_clipped, | |
197 draw_properties().opacity, draw_properties().blend_mode, | |
198 sorting_context_id_); | |
199 | 186 |
200 if (current_draw_mode_ == DRAW_MODE_RESOURCELESS_SOFTWARE) { | 187 if (current_draw_mode_ == DRAW_MODE_RESOURCELESS_SOFTWARE) { |
201 AppendDebugBorderQuad( | 188 AppendDebugBorderQuad( |
202 render_pass, | 189 render_pass, shared_quad_state->content_bounds, shared_quad_state, |
203 scaled_content_bounds, | 190 append_quads_data, DebugColors::DirectPictureBorderColor(), |
204 shared_quad_state, | |
205 append_quads_data, | |
206 DebugColors::DirectPictureBorderColor(), | |
207 DebugColors::DirectPictureBorderWidth(layer_tree_impl())); | 191 DebugColors::DirectPictureBorderWidth(layer_tree_impl())); |
208 | 192 |
209 gfx::Rect geometry_rect = scaled_visible_content_rect; | 193 gfx::Rect geometry_rect = shared_quad_state->visible_content_rect; |
210 gfx::Rect opaque_rect = contents_opaque() ? geometry_rect : gfx::Rect(); | 194 gfx::Rect opaque_rect = contents_opaque() ? geometry_rect : gfx::Rect(); |
211 gfx::Rect visible_geometry_rect = | 195 gfx::Rect visible_geometry_rect = |
212 scaled_occlusion.GetUnoccludedContentRect(geometry_rect); | 196 scaled_occlusion.GetUnoccludedContentRect(geometry_rect); |
213 if (visible_geometry_rect.IsEmpty()) | 197 if (visible_geometry_rect.IsEmpty()) |
214 return; | 198 return; |
215 | 199 |
216 gfx::Size texture_size = scaled_visible_content_rect.size(); | 200 gfx::Rect quad_content_rect = shared_quad_state->visible_content_rect; |
| 201 gfx::Size texture_size = quad_content_rect.size(); |
217 gfx::RectF texture_rect = gfx::RectF(texture_size); | 202 gfx::RectF texture_rect = gfx::RectF(texture_size); |
218 gfx::Rect quad_content_rect = scaled_visible_content_rect; | |
219 | 203 |
220 PictureDrawQuad* quad = | 204 PictureDrawQuad* quad = |
221 render_pass->CreateAndAppendDrawQuad<PictureDrawQuad>(); | 205 render_pass->CreateAndAppendDrawQuad<PictureDrawQuad>(); |
222 quad->SetNew(shared_quad_state, geometry_rect, opaque_rect, | 206 quad->SetNew(shared_quad_state, geometry_rect, opaque_rect, |
223 visible_geometry_rect, texture_rect, texture_size, | 207 visible_geometry_rect, texture_rect, texture_size, |
224 nearest_neighbor_, RGBA_8888, quad_content_rect, | 208 nearest_neighbor_, RGBA_8888, quad_content_rect, |
225 max_contents_scale, raster_source_); | 209 max_contents_scale, raster_source_); |
226 return; | 210 return; |
227 } | 211 } |
228 | 212 |
229 AppendDebugBorderQuad( | 213 AppendDebugBorderQuad(render_pass, shared_quad_state->content_bounds, |
230 render_pass, scaled_content_bounds, shared_quad_state, append_quads_data); | 214 shared_quad_state, append_quads_data); |
231 | 215 |
232 if (ShowDebugBorders()) { | 216 if (ShowDebugBorders()) { |
233 for (PictureLayerTilingSet::CoverageIterator iter( | 217 for (PictureLayerTilingSet::CoverageIterator iter( |
234 tilings_.get(), | 218 tilings_.get(), max_contents_scale, |
235 max_contents_scale, | 219 shared_quad_state->visible_content_rect, ideal_contents_scale_); |
236 scaled_visible_content_rect, | 220 iter; ++iter) { |
237 ideal_contents_scale_); | |
238 iter; | |
239 ++iter) { | |
240 SkColor color; | 221 SkColor color; |
241 float width; | 222 float width; |
242 if (*iter && iter->IsReadyToDraw()) { | 223 if (*iter && iter->IsReadyToDraw()) { |
243 TileDrawInfo::Mode mode = iter->draw_info().mode(); | 224 TileDrawInfo::Mode mode = iter->draw_info().mode(); |
244 if (mode == TileDrawInfo::SOLID_COLOR_MODE) { | 225 if (mode == TileDrawInfo::SOLID_COLOR_MODE) { |
245 color = DebugColors::SolidColorTileBorderColor(); | 226 color = DebugColors::SolidColorTileBorderColor(); |
246 width = DebugColors::SolidColorTileBorderWidth(layer_tree_impl()); | 227 width = DebugColors::SolidColorTileBorderWidth(layer_tree_impl()); |
247 } else if (mode == TileDrawInfo::PICTURE_PILE_MODE) { | 228 } else if (mode == TileDrawInfo::PICTURE_PILE_MODE) { |
248 color = DebugColors::PictureTileBorderColor(); | 229 color = DebugColors::PictureTileBorderColor(); |
249 width = DebugColors::PictureTileBorderWidth(layer_tree_impl()); | 230 width = DebugColors::PictureTileBorderWidth(layer_tree_impl()); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
283 | 264 |
284 // Ignore missing tiles outside of viewport for tile priority. This is | 265 // Ignore missing tiles outside of viewport for tile priority. This is |
285 // normally the same as draw viewport but can be independently overridden by | 266 // normally the same as draw viewport but can be independently overridden by |
286 // embedders like Android WebView with SetExternalDrawConstraints. | 267 // embedders like Android WebView with SetExternalDrawConstraints. |
287 gfx::Rect scaled_viewport_for_tile_priority = gfx::ScaleToEnclosingRect( | 268 gfx::Rect scaled_viewport_for_tile_priority = gfx::ScaleToEnclosingRect( |
288 viewport_rect_for_tile_priority_in_content_space_, max_contents_scale); | 269 viewport_rect_for_tile_priority_in_content_space_, max_contents_scale); |
289 | 270 |
290 size_t missing_tile_count = 0u; | 271 size_t missing_tile_count = 0u; |
291 size_t on_demand_missing_tile_count = 0u; | 272 size_t on_demand_missing_tile_count = 0u; |
292 only_used_low_res_last_append_quads_ = true; | 273 only_used_low_res_last_append_quads_ = true; |
293 for (PictureLayerTilingSet::CoverageIterator iter(tilings_.get(), | 274 for (PictureLayerTilingSet::CoverageIterator iter( |
294 max_contents_scale, | 275 tilings_.get(), max_contents_scale, |
295 scaled_visible_content_rect, | 276 shared_quad_state->visible_content_rect, ideal_contents_scale_); |
296 ideal_contents_scale_); | 277 iter; ++iter) { |
297 iter; | |
298 ++iter) { | |
299 gfx::Rect geometry_rect = iter.geometry_rect(); | 278 gfx::Rect geometry_rect = iter.geometry_rect(); |
300 gfx::Rect opaque_rect = contents_opaque() ? geometry_rect : gfx::Rect(); | 279 gfx::Rect opaque_rect = contents_opaque() ? geometry_rect : gfx::Rect(); |
301 gfx::Rect visible_geometry_rect = | 280 gfx::Rect visible_geometry_rect = |
302 scaled_occlusion.GetUnoccludedContentRect(geometry_rect); | 281 scaled_occlusion.GetUnoccludedContentRect(geometry_rect); |
303 if (visible_geometry_rect.IsEmpty()) | 282 if (visible_geometry_rect.IsEmpty()) |
304 continue; | 283 continue; |
305 | 284 |
306 append_quads_data->visible_content_area += | 285 append_quads_data->visible_content_area += |
307 visible_geometry_rect.width() * visible_geometry_rect.height(); | 286 visible_geometry_rect.width() * visible_geometry_rect.height(); |
308 | 287 |
(...skipping 924 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1233 | 1212 |
1234 bool PictureLayerImpl::IsOnActiveOrPendingTree() const { | 1213 bool PictureLayerImpl::IsOnActiveOrPendingTree() const { |
1235 return !layer_tree_impl()->IsRecycleTree(); | 1214 return !layer_tree_impl()->IsRecycleTree(); |
1236 } | 1215 } |
1237 | 1216 |
1238 bool PictureLayerImpl::HasValidTilePriorities() const { | 1217 bool PictureLayerImpl::HasValidTilePriorities() const { |
1239 return IsOnActiveOrPendingTree() && IsDrawnRenderSurfaceLayerListMember(); | 1218 return IsOnActiveOrPendingTree() && IsDrawnRenderSurfaceLayerListMember(); |
1240 } | 1219 } |
1241 | 1220 |
1242 } // namespace cc | 1221 } // namespace cc |
OLD | NEW |