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