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 <limits> | 8 #include <limits> |
9 #include <set> | 9 #include <set> |
10 | 10 |
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
270 SkColor color; | 270 SkColor color; |
271 float width; | 271 float width; |
272 if (*iter && iter->IsReadyToDraw()) { | 272 if (*iter && iter->IsReadyToDraw()) { |
273 ManagedTileState::DrawInfo::Mode mode = iter->draw_info().mode(); | 273 ManagedTileState::DrawInfo::Mode mode = iter->draw_info().mode(); |
274 if (mode == ManagedTileState::DrawInfo::SOLID_COLOR_MODE) { | 274 if (mode == ManagedTileState::DrawInfo::SOLID_COLOR_MODE) { |
275 color = DebugColors::SolidColorTileBorderColor(); | 275 color = DebugColors::SolidColorTileBorderColor(); |
276 width = DebugColors::SolidColorTileBorderWidth(layer_tree_impl()); | 276 width = DebugColors::SolidColorTileBorderWidth(layer_tree_impl()); |
277 } else if (mode == ManagedTileState::DrawInfo::PICTURE_PILE_MODE) { | 277 } else if (mode == ManagedTileState::DrawInfo::PICTURE_PILE_MODE) { |
278 color = DebugColors::PictureTileBorderColor(); | 278 color = DebugColors::PictureTileBorderColor(); |
279 width = DebugColors::PictureTileBorderWidth(layer_tree_impl()); | 279 width = DebugColors::PictureTileBorderWidth(layer_tree_impl()); |
| 280 } else if (iter->draw_info().has_compressed_resource()) { |
| 281 color = DebugColors::CompressedTileBorderColor(); |
| 282 width = DebugColors::CompressedTileBorderWidth(layer_tree_impl()); |
280 } else if (iter.resolution() == HIGH_RESOLUTION) { | 283 } else if (iter.resolution() == HIGH_RESOLUTION) { |
281 color = DebugColors::HighResTileBorderColor(); | 284 color = DebugColors::HighResTileBorderColor(); |
282 width = DebugColors::HighResTileBorderWidth(layer_tree_impl()); | 285 width = DebugColors::HighResTileBorderWidth(layer_tree_impl()); |
283 } else if (iter.resolution() == LOW_RESOLUTION) { | 286 } else if (iter.resolution() == LOW_RESOLUTION) { |
284 color = DebugColors::LowResTileBorderColor(); | 287 color = DebugColors::LowResTileBorderColor(); |
285 width = DebugColors::LowResTileBorderWidth(layer_tree_impl()); | 288 width = DebugColors::LowResTileBorderWidth(layer_tree_impl()); |
286 } else if (iter->contents_scale() > max_contents_scale) { | 289 } else if (iter->contents_scale() > max_contents_scale) { |
287 color = DebugColors::ExtraHighResTileBorderColor(); | 290 color = DebugColors::ExtraHighResTileBorderColor(); |
288 width = DebugColors::ExtraHighResTileBorderWidth(layer_tree_impl()); | 291 width = DebugColors::ExtraHighResTileBorderWidth(layer_tree_impl()); |
289 } else { | 292 } else { |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
374 .allow_rasterize_on_demand) { | 377 .allow_rasterize_on_demand) { |
375 ++on_demand_missing_tile_count; | 378 ++on_demand_missing_tile_count; |
376 break; | 379 break; |
377 } | 380 } |
378 | 381 |
379 gfx::RectF texture_rect = iter.texture_rect(); | 382 gfx::RectF texture_rect = iter.texture_rect(); |
380 | 383 |
381 ResourceProvider* resource_provider = | 384 ResourceProvider* resource_provider = |
382 layer_tree_impl()->resource_provider(); | 385 layer_tree_impl()->resource_provider(); |
383 ResourceFormat format = | 386 ResourceFormat format = |
384 resource_provider->memory_efficient_texture_format(); | 387 resource_provider->memory_efficient_texture_format( |
| 388 FORMAT_USAGE_NATIVE); |
385 PictureDrawQuad* quad = | 389 PictureDrawQuad* quad = |
386 render_pass->CreateAndAppendDrawQuad<PictureDrawQuad>(); | 390 render_pass->CreateAndAppendDrawQuad<PictureDrawQuad>(); |
387 quad->SetNew(shared_quad_state, geometry_rect, opaque_rect, | 391 quad->SetNew(shared_quad_state, geometry_rect, opaque_rect, |
388 visible_geometry_rect, texture_rect, iter.texture_size(), | 392 visible_geometry_rect, texture_rect, iter.texture_size(), |
389 format, iter->content_rect(), iter->contents_scale(), | 393 format, iter->content_rect(), iter->contents_scale(), |
390 raster_source_); | 394 raster_source_); |
391 has_draw_quad = true; | 395 has_draw_quad = true; |
392 break; | 396 break; |
393 } | 397 } |
394 case ManagedTileState::DrawInfo::SOLID_COLOR_MODE: { | 398 case ManagedTileState::DrawInfo::SOLID_COLOR_MODE: { |
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
609 // the tilings have not been managed, request an update draw properties | 613 // the tilings have not been managed, request an update draw properties |
610 // to force tilings to get managed. | 614 // to force tilings to get managed. |
611 layer_tree_impl()->set_needs_update_draw_properties(); | 615 layer_tree_impl()->set_needs_update_draw_properties(); |
612 } | 616 } |
613 | 617 |
614 skia::RefPtr<SkPicture> PictureLayerImpl::GetPicture() { | 618 skia::RefPtr<SkPicture> PictureLayerImpl::GetPicture() { |
615 return raster_source_->GetFlattenedPicture(); | 619 return raster_source_->GetFlattenedPicture(); |
616 } | 620 } |
617 | 621 |
618 scoped_refptr<Tile> PictureLayerImpl::CreateTile(PictureLayerTiling* tiling, | 622 scoped_refptr<Tile> PictureLayerImpl::CreateTile(PictureLayerTiling* tiling, |
619 const gfx::Rect& content_rect) { | 623 const gfx::Rect& content_rect, |
| 624 int flags) { |
620 DCHECK(!raster_source_->IsSolidColor()); | 625 DCHECK(!raster_source_->IsSolidColor()); |
621 if (!raster_source_->CoversRect(content_rect, tiling->contents_scale())) | 626 if (!raster_source_->CoversRect(content_rect, tiling->contents_scale())) |
622 return scoped_refptr<Tile>(); | 627 return scoped_refptr<Tile>(); |
623 | 628 |
624 int flags = 0; | |
625 | |
626 // We don't handle solid color masks, so we shouldn't bother analyzing those. | 629 // We don't handle solid color masks, so we shouldn't bother analyzing those. |
627 // Otherwise, always analyze to maximize memory savings. | 630 // Otherwise, always analyze to maximize memory savings. |
628 if (!is_mask_) | 631 if (!is_mask_) |
629 flags = Tile::USE_PICTURE_ANALYSIS; | 632 flags |= Tile::USE_PICTURE_ANALYSIS; |
| 633 if (contents_opaque()) |
| 634 flags |= Tile::IS_OPAQUE; |
630 | 635 |
631 return layer_tree_impl()->tile_manager()->CreateTile( | 636 return layer_tree_impl()->tile_manager()->CreateTile( |
632 raster_source_.get(), content_rect.size(), content_rect, | 637 raster_source_.get(), content_rect.size(), content_rect, |
633 tiling->contents_scale(), id(), layer_tree_impl()->source_frame_number(), | 638 tiling->contents_scale(), id(), layer_tree_impl()->source_frame_number(), |
634 flags); | 639 flags); |
635 } | 640 } |
636 | 641 |
637 const Region* PictureLayerImpl::GetPendingInvalidation() { | 642 const Region* PictureLayerImpl::GetPendingInvalidation() { |
638 if (layer_tree_impl()->IsPendingTree()) | 643 if (layer_tree_impl()->IsPendingTree()) |
639 return &invalidation_; | 644 return &invalidation_; |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
777 raster_page_scale_ = other->raster_page_scale_; | 782 raster_page_scale_ = other->raster_page_scale_; |
778 raster_device_scale_ = other->raster_device_scale_; | 783 raster_device_scale_ = other->raster_device_scale_; |
779 raster_source_scale_ = other->raster_source_scale_; | 784 raster_source_scale_ = other->raster_source_scale_; |
780 raster_contents_scale_ = other->raster_contents_scale_; | 785 raster_contents_scale_ = other->raster_contents_scale_; |
781 low_res_raster_contents_scale_ = other->low_res_raster_contents_scale_; | 786 low_res_raster_contents_scale_ = other->low_res_raster_contents_scale_; |
782 | 787 |
783 bool synced_high_res_tiling = false; | 788 bool synced_high_res_tiling = false; |
784 if (CanHaveTilings()) { | 789 if (CanHaveTilings()) { |
785 synced_high_res_tiling = tilings_->SyncTilings( | 790 synced_high_res_tiling = tilings_->SyncTilings( |
786 *other->tilings_, raster_source_->GetSize(), invalidation_, | 791 *other->tilings_, raster_source_->GetSize(), invalidation_, |
787 MinimumContentsScale(), raster_source_.get()); | 792 MinimumContentsScale(), raster_source_.get(), |
| 793 layer_tree_impl()->CurrentBeginFrameArgs().frame_time); |
788 } else { | 794 } else { |
789 RemoveAllTilings(); | 795 RemoveAllTilings(); |
790 } | 796 } |
791 | 797 |
792 // If our MinimumContentsScale has changed to prevent the twin's high res | 798 // If our MinimumContentsScale has changed to prevent the twin's high res |
793 // tiling from being synced, we should reset the raster scale and let it be | 799 // tiling from being synced, we should reset the raster scale and let it be |
794 // recalculated (1) again. This can happen if our bounds shrink to the point | 800 // recalculated (1) again. This can happen if our bounds shrink to the point |
795 // where min contents scale grows. | 801 // where min contents scale grows. |
796 // (1) - TODO(vmpstr) Instead of hoping that this will be recalculated, we | 802 // (1) - TODO(vmpstr) Instead of hoping that this will be recalculated, we |
797 // should refactor this code a little bit and actually recalculate this. | 803 // should refactor this code a little bit and actually recalculate this. |
(...skipping 557 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1355 | 1361 |
1356 bool PictureLayerImpl::AllTilesRequiredForDrawAreReadyToDraw() const { | 1362 bool PictureLayerImpl::AllTilesRequiredForDrawAreReadyToDraw() const { |
1357 if (!layer_tree_impl()->IsActiveTree()) | 1363 if (!layer_tree_impl()->IsActiveTree()) |
1358 return true; | 1364 return true; |
1359 | 1365 |
1360 return AllTilesRequiredAreReadyToDraw( | 1366 return AllTilesRequiredAreReadyToDraw( |
1361 &PictureLayerTiling::IsTileRequiredForDrawIfVisible); | 1367 &PictureLayerTiling::IsTileRequiredForDrawIfVisible); |
1362 } | 1368 } |
1363 | 1369 |
1364 } // namespace cc | 1370 } // namespace cc |
OLD | NEW |