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 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
248 for (PictureLayerTilingSet::CoverageIterator iter( | 248 for (PictureLayerTilingSet::CoverageIterator iter( |
249 tilings_.get(), | 249 tilings_.get(), |
250 max_contents_scale, | 250 max_contents_scale, |
251 scaled_visible_content_rect, | 251 scaled_visible_content_rect, |
252 ideal_contents_scale_); | 252 ideal_contents_scale_); |
253 iter; | 253 iter; |
254 ++iter) { | 254 ++iter) { |
255 SkColor color; | 255 SkColor color; |
256 float width; | 256 float width; |
257 if (*iter && iter->IsReadyToDraw()) { | 257 if (*iter && iter->IsReadyToDraw()) { |
258 ManagedTileState::DrawInfo::Mode mode = iter->draw_info().mode(); | 258 TileDrawInfo::Mode mode = iter->draw_info().mode(); |
259 if (mode == ManagedTileState::DrawInfo::SOLID_COLOR_MODE) { | 259 if (mode == TileDrawInfo::SOLID_COLOR_MODE) { |
260 color = DebugColors::SolidColorTileBorderColor(); | 260 color = DebugColors::SolidColorTileBorderColor(); |
261 width = DebugColors::SolidColorTileBorderWidth(layer_tree_impl()); | 261 width = DebugColors::SolidColorTileBorderWidth(layer_tree_impl()); |
262 } else if (mode == ManagedTileState::DrawInfo::PICTURE_PILE_MODE) { | 262 } else if (mode == TileDrawInfo::PICTURE_PILE_MODE) { |
263 color = DebugColors::PictureTileBorderColor(); | 263 color = DebugColors::PictureTileBorderColor(); |
264 width = DebugColors::PictureTileBorderWidth(layer_tree_impl()); | 264 width = DebugColors::PictureTileBorderWidth(layer_tree_impl()); |
265 } else if (iter.resolution() == HIGH_RESOLUTION) { | 265 } else if (iter.resolution() == HIGH_RESOLUTION) { |
266 color = DebugColors::HighResTileBorderColor(); | 266 color = DebugColors::HighResTileBorderColor(); |
267 width = DebugColors::HighResTileBorderWidth(layer_tree_impl()); | 267 width = DebugColors::HighResTileBorderWidth(layer_tree_impl()); |
268 } else if (iter.resolution() == LOW_RESOLUTION) { | 268 } else if (iter.resolution() == LOW_RESOLUTION) { |
269 color = DebugColors::LowResTileBorderColor(); | 269 color = DebugColors::LowResTileBorderColor(); |
270 width = DebugColors::LowResTileBorderWidth(layer_tree_impl()); | 270 width = DebugColors::LowResTileBorderWidth(layer_tree_impl()); |
271 } else if (iter->contents_scale() > max_contents_scale) { | 271 } else if (iter->contents_scale() > max_contents_scale) { |
272 color = DebugColors::ExtraHighResTileBorderColor(); | 272 color = DebugColors::ExtraHighResTileBorderColor(); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
316 gfx::Rect visible_geometry_rect = | 316 gfx::Rect visible_geometry_rect = |
317 scaled_occlusion.GetUnoccludedContentRect(geometry_rect); | 317 scaled_occlusion.GetUnoccludedContentRect(geometry_rect); |
318 if (visible_geometry_rect.IsEmpty()) | 318 if (visible_geometry_rect.IsEmpty()) |
319 continue; | 319 continue; |
320 | 320 |
321 append_quads_data->visible_content_area += | 321 append_quads_data->visible_content_area += |
322 visible_geometry_rect.width() * visible_geometry_rect.height(); | 322 visible_geometry_rect.width() * visible_geometry_rect.height(); |
323 | 323 |
324 bool has_draw_quad = false; | 324 bool has_draw_quad = false; |
325 if (*iter && iter->IsReadyToDraw()) { | 325 if (*iter && iter->IsReadyToDraw()) { |
326 const ManagedTileState::DrawInfo& draw_info = iter->draw_info(); | 326 const TileDrawInfo& draw_info = iter->draw_info(); |
327 switch (draw_info.mode()) { | 327 switch (draw_info.mode()) { |
328 case ManagedTileState::DrawInfo::RESOURCE_MODE: { | 328 case TileDrawInfo::RESOURCE_MODE: { |
329 gfx::RectF texture_rect = iter.texture_rect(); | 329 gfx::RectF texture_rect = iter.texture_rect(); |
330 | 330 |
331 // The raster_contents_scale_ is the best scale that the layer is | 331 // The raster_contents_scale_ is the best scale that the layer is |
332 // trying to produce, even though it may not be ideal. Since that's | 332 // trying to produce, even though it may not be ideal. Since that's |
333 // the best the layer can promise in the future, consider those as | 333 // the best the layer can promise in the future, consider those as |
334 // complete. But if a tile is ideal scale, we don't want to consider | 334 // complete. But if a tile is ideal scale, we don't want to consider |
335 // it incomplete and trying to replace it with a tile at a worse | 335 // it incomplete and trying to replace it with a tile at a worse |
336 // scale. | 336 // scale. |
337 if (iter->contents_scale() != raster_contents_scale_ && | 337 if (iter->contents_scale() != raster_contents_scale_ && |
338 iter->contents_scale() != ideal_contents_scale_ && | 338 iter->contents_scale() != ideal_contents_scale_ && |
339 geometry_rect.Intersects(scaled_viewport_for_tile_priority)) { | 339 geometry_rect.Intersects(scaled_viewport_for_tile_priority)) { |
340 append_quads_data->num_incomplete_tiles++; | 340 append_quads_data->num_incomplete_tiles++; |
341 } | 341 } |
342 | 342 |
343 TileDrawQuad* quad = | 343 TileDrawQuad* quad = |
344 render_pass->CreateAndAppendDrawQuad<TileDrawQuad>(); | 344 render_pass->CreateAndAppendDrawQuad<TileDrawQuad>(); |
345 quad->SetNew(shared_quad_state, | 345 quad->SetNew(shared_quad_state, |
346 geometry_rect, | 346 geometry_rect, |
347 opaque_rect, | 347 opaque_rect, |
348 visible_geometry_rect, | 348 visible_geometry_rect, |
349 draw_info.get_resource_id(), | 349 draw_info.get_resource_id(), |
350 texture_rect, | 350 texture_rect, |
351 iter.texture_size(), | 351 iter.texture_size(), |
352 draw_info.contents_swizzled(), | 352 draw_info.contents_swizzled(), |
353 nearest_neighbor_); | 353 nearest_neighbor_); |
354 has_draw_quad = true; | 354 has_draw_quad = true; |
355 break; | 355 break; |
356 } | 356 } |
357 case ManagedTileState::DrawInfo::PICTURE_PILE_MODE: { | 357 case TileDrawInfo::PICTURE_PILE_MODE: { |
358 if (!layer_tree_impl() | 358 if (!layer_tree_impl() |
359 ->GetRendererCapabilities() | 359 ->GetRendererCapabilities() |
360 .allow_rasterize_on_demand) { | 360 .allow_rasterize_on_demand) { |
361 ++on_demand_missing_tile_count; | 361 ++on_demand_missing_tile_count; |
362 break; | 362 break; |
363 } | 363 } |
364 | 364 |
365 gfx::RectF texture_rect = iter.texture_rect(); | 365 gfx::RectF texture_rect = iter.texture_rect(); |
366 | 366 |
367 ResourceProvider* resource_provider = | 367 ResourceProvider* resource_provider = |
368 layer_tree_impl()->resource_provider(); | 368 layer_tree_impl()->resource_provider(); |
369 ResourceFormat format = | 369 ResourceFormat format = |
370 resource_provider->memory_efficient_texture_format(); | 370 resource_provider->memory_efficient_texture_format(); |
371 PictureDrawQuad* quad = | 371 PictureDrawQuad* quad = |
372 render_pass->CreateAndAppendDrawQuad<PictureDrawQuad>(); | 372 render_pass->CreateAndAppendDrawQuad<PictureDrawQuad>(); |
373 quad->SetNew(shared_quad_state, geometry_rect, opaque_rect, | 373 quad->SetNew(shared_quad_state, geometry_rect, opaque_rect, |
374 visible_geometry_rect, texture_rect, iter.texture_size(), | 374 visible_geometry_rect, texture_rect, iter.texture_size(), |
375 nearest_neighbor_, format, iter->content_rect(), | 375 nearest_neighbor_, format, iter->content_rect(), |
376 iter->contents_scale(), raster_source_); | 376 iter->contents_scale(), raster_source_); |
377 has_draw_quad = true; | 377 has_draw_quad = true; |
378 break; | 378 break; |
379 } | 379 } |
380 case ManagedTileState::DrawInfo::SOLID_COLOR_MODE: { | 380 case TileDrawInfo::SOLID_COLOR_MODE: { |
381 SolidColorDrawQuad* quad = | 381 SolidColorDrawQuad* quad = |
382 render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); | 382 render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); |
383 quad->SetNew(shared_quad_state, | 383 quad->SetNew(shared_quad_state, |
384 geometry_rect, | 384 geometry_rect, |
385 visible_geometry_rect, | 385 visible_geometry_rect, |
386 draw_info.get_solid_color(), | 386 draw_info.get_solid_color(), |
387 false); | 387 false); |
388 has_draw_quad = true; | 388 has_draw_quad = true; |
389 break; | 389 break; |
390 } | 390 } |
(...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
783 if (!iter || !*iter) { | 783 if (!iter || !*iter) { |
784 *resource_id = 0; | 784 *resource_id = 0; |
785 return; | 785 return; |
786 } | 786 } |
787 | 787 |
788 // Masks only supported if they fit on exactly one tile. | 788 // Masks only supported if they fit on exactly one tile. |
789 DCHECK(iter.geometry_rect() == content_rect) | 789 DCHECK(iter.geometry_rect() == content_rect) |
790 << "iter rect " << iter.geometry_rect().ToString() << " content rect " | 790 << "iter rect " << iter.geometry_rect().ToString() << " content rect " |
791 << content_rect.ToString(); | 791 << content_rect.ToString(); |
792 | 792 |
793 const ManagedTileState::DrawInfo& draw_info = iter->draw_info(); | 793 const TileDrawInfo& draw_info = iter->draw_info(); |
794 if (!draw_info.IsReadyToDraw() || | 794 if (!draw_info.IsReadyToDraw() || |
795 draw_info.mode() != ManagedTileState::DrawInfo::RESOURCE_MODE) { | 795 draw_info.mode() != TileDrawInfo::RESOURCE_MODE) { |
796 *resource_id = 0; | 796 *resource_id = 0; |
797 return; | 797 return; |
798 } | 798 } |
799 | 799 |
800 *resource_id = draw_info.get_resource_id(); | 800 *resource_id = draw_info.get_resource_id(); |
801 *resource_size = iter.texture_size(); | 801 *resource_size = iter.texture_size(); |
802 } | 802 } |
803 | 803 |
804 void PictureLayerImpl::SetNearestNeighbor(bool nearest_neighbor) { | 804 void PictureLayerImpl::SetNearestNeighbor(bool nearest_neighbor) { |
805 if (nearest_neighbor_ == nearest_neighbor) | 805 if (nearest_neighbor_ == nearest_neighbor) |
(...skipping 519 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1325 | 1325 |
1326 bool PictureLayerImpl::AllTilesRequiredForDrawAreReadyToDraw() const { | 1326 bool PictureLayerImpl::AllTilesRequiredForDrawAreReadyToDraw() const { |
1327 if (!layer_tree_impl()->IsActiveTree()) | 1327 if (!layer_tree_impl()->IsActiveTree()) |
1328 return true; | 1328 return true; |
1329 | 1329 |
1330 return AllTilesRequiredAreReadyToDraw( | 1330 return AllTilesRequiredAreReadyToDraw( |
1331 &PictureLayerTiling::IsTileRequiredForDrawIfVisible); | 1331 &PictureLayerTiling::IsTileRequiredForDrawIfVisible); |
1332 } | 1332 } |
1333 | 1333 |
1334 } // namespace cc | 1334 } // namespace cc |
OLD | NEW |