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 | 8 |
9 #include "base/time.h" | 9 #include "base/time.h" |
10 #include "cc/base/math_util.h" | 10 #include "cc/base/math_util.h" |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
99 SharedQuadState* shared_quad_state = | 99 SharedQuadState* shared_quad_state = |
100 quad_sink->UseSharedQuadState(CreateSharedQuadState()); | 100 quad_sink->UseSharedQuadState(CreateSharedQuadState()); |
101 AppendDebugBorderQuad(quad_sink, shared_quad_state, append_quads_data); | 101 AppendDebugBorderQuad(quad_sink, shared_quad_state, append_quads_data); |
102 | 102 |
103 bool clipped = false; | 103 bool clipped = false; |
104 gfx::QuadF target_quad = MathUtil::MapQuad( | 104 gfx::QuadF target_quad = MathUtil::MapQuad( |
105 draw_transform(), | 105 draw_transform(), |
106 gfx::QuadF(rect), | 106 gfx::QuadF(rect), |
107 &clipped); | 107 &clipped); |
108 if (ShowDebugBorders()) { | 108 if (ShowDebugBorders()) { |
109 for (PictureLayerTilingSet::Iterator iter(tilings_.get(), | 109 for (PictureLayerTilingSet::CoverageIterator iter( |
110 contents_scale_x(), | 110 tilings_.get(), contents_scale_x(), rect, ideal_contents_scale_); |
111 rect, | |
112 ideal_contents_scale_); | |
113 iter; | 111 iter; |
114 ++iter) { | 112 ++iter) { |
115 SkColor color; | 113 SkColor color; |
116 float width; | 114 float width; |
117 if (*iter && iter->drawing_info().IsReadyToDraw()) { | 115 if (*iter && iter->drawing_info().IsReadyToDraw()) { |
118 ManagedTileState::DrawingInfo::Mode mode = iter->drawing_info().mode(); | 116 ManagedTileState::DrawingInfo::Mode mode = iter->drawing_info().mode(); |
119 if (mode == ManagedTileState::DrawingInfo::SOLID_COLOR_MODE || | 117 if (mode == ManagedTileState::DrawingInfo::SOLID_COLOR_MODE || |
120 mode == ManagedTileState::DrawingInfo::TRANSPARENT_MODE) { | 118 mode == ManagedTileState::DrawingInfo::TRANSPARENT_MODE) { |
121 color = DebugColors::SolidColorTileBorderColor(); | 119 color = DebugColors::SolidColorTileBorderColor(); |
122 width = DebugColors::SolidColorTileBorderWidth(layer_tree_impl()); | 120 width = DebugColors::SolidColorTileBorderWidth(layer_tree_impl()); |
(...skipping 24 matching lines...) Expand all Loading... |
147 debug_border_quad->SetNew(shared_quad_state, geometry_rect, color, width); | 145 debug_border_quad->SetNew(shared_quad_state, geometry_rect, color, width); |
148 quad_sink->Append(debug_border_quad.PassAs<DrawQuad>(), | 146 quad_sink->Append(debug_border_quad.PassAs<DrawQuad>(), |
149 append_quads_data); | 147 append_quads_data); |
150 } | 148 } |
151 } | 149 } |
152 | 150 |
153 // Keep track of the tilings that were used so that tilings that are | 151 // Keep track of the tilings that were used so that tilings that are |
154 // unused can be considered for removal. | 152 // unused can be considered for removal. |
155 std::vector<PictureLayerTiling*> seen_tilings; | 153 std::vector<PictureLayerTiling*> seen_tilings; |
156 | 154 |
157 for (PictureLayerTilingSet::Iterator iter(tilings_.get(), | 155 for (PictureLayerTilingSet::CoverageIterator iter( |
158 contents_scale_x(), | 156 tilings_.get(), contents_scale_x(), rect, ideal_contents_scale_); |
159 rect, | |
160 ideal_contents_scale_); | |
161 iter; | 157 iter; |
162 ++iter) { | 158 ++iter) { |
163 gfx::Rect geometry_rect = iter.geometry_rect(); | 159 gfx::Rect geometry_rect = iter.geometry_rect(); |
164 if (!*iter || !iter->drawing_info().IsReadyToDraw()) { | 160 if (!*iter || !iter->drawing_info().IsReadyToDraw()) { |
165 if (DrawCheckerboardForMissingTiles()) { | 161 if (DrawCheckerboardForMissingTiles()) { |
166 // TODO(enne): Figure out how to show debug "invalidated checker" color | 162 // TODO(enne): Figure out how to show debug "invalidated checker" color |
167 scoped_ptr<CheckerboardDrawQuad> quad = CheckerboardDrawQuad::Create(); | 163 scoped_ptr<CheckerboardDrawQuad> quad = CheckerboardDrawQuad::Create(); |
168 SkColor color = DebugColors::DefaultCheckerboardColor(); | 164 SkColor color = DebugColors::DefaultCheckerboardColor(); |
169 quad->SetNew(shared_quad_state, geometry_rect, color); | 165 quad->SetNew(shared_quad_state, geometry_rect, color); |
170 if (quad_sink->Append(quad.PassAs<DrawQuad>(), append_quads_data)) | 166 if (quad_sink->Append(quad.PassAs<DrawQuad>(), append_quads_data)) |
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
495 if (is_mask_ == is_mask) | 491 if (is_mask_ == is_mask) |
496 return; | 492 return; |
497 is_mask_ = is_mask; | 493 is_mask_ = is_mask; |
498 if (tilings_) | 494 if (tilings_) |
499 tilings_->RemoveAllTiles(); | 495 tilings_->RemoveAllTiles(); |
500 } | 496 } |
501 | 497 |
502 ResourceProvider::ResourceId PictureLayerImpl::ContentsResourceId() const { | 498 ResourceProvider::ResourceId PictureLayerImpl::ContentsResourceId() const { |
503 gfx::Rect content_rect(content_bounds()); | 499 gfx::Rect content_rect(content_bounds()); |
504 float scale = contents_scale_x(); | 500 float scale = contents_scale_x(); |
505 for (PictureLayerTilingSet::Iterator | 501 for (PictureLayerTilingSet::CoverageIterator |
506 iter(tilings_.get(), scale, content_rect, ideal_contents_scale_); | 502 iter(tilings_.get(), scale, content_rect, ideal_contents_scale_); |
507 iter; | 503 iter; |
508 ++iter) { | 504 ++iter) { |
509 // Mask resource not ready yet. | 505 // Mask resource not ready yet. |
510 if (!*iter || | 506 if (!*iter || |
511 iter->drawing_info().mode() != | 507 iter->drawing_info().mode() != |
512 ManagedTileState::DrawingInfo::RESOURCE_MODE || | 508 ManagedTileState::DrawingInfo::RESOURCE_MODE || |
513 !iter->drawing_info().IsReadyToDraw()) | 509 !iter->drawing_info().IsReadyToDraw()) |
514 return 0; | 510 return 0; |
515 // Masks only supported if they fit on exactly one tile. | 511 // Masks only supported if they fit on exactly one tile. |
(...skipping 26 matching lines...) Expand all Loading... |
542 std::min(twin->ideal_contents_scale_, twin->raster_contents_scale_)); | 538 std::min(twin->ideal_contents_scale_, twin->raster_contents_scale_)); |
543 } | 539 } |
544 | 540 |
545 Region missing_region = rect; | 541 Region missing_region = rect; |
546 for (size_t i = 0; i < tilings_->num_tilings(); ++i) { | 542 for (size_t i = 0; i < tilings_->num_tilings(); ++i) { |
547 PictureLayerTiling* tiling = tilings_->tiling_at(i); | 543 PictureLayerTiling* tiling = tilings_->tiling_at(i); |
548 | 544 |
549 if (tiling->contents_scale() < min_acceptable_scale) | 545 if (tiling->contents_scale() < min_acceptable_scale) |
550 continue; | 546 continue; |
551 | 547 |
552 for (PictureLayerTiling::Iterator iter(tiling, contents_scale_x(), rect); | 548 for (PictureLayerTiling::CoverageIterator iter(tiling, |
| 549 contents_scale_x(), |
| 550 rect); |
553 iter; | 551 iter; |
554 ++iter) { | 552 ++iter) { |
555 if (should_force_uploads && *iter) | 553 if (should_force_uploads && *iter) |
556 layer_tree_impl()->tile_manager()->ForceTileUploadToComplete(*iter); | 554 layer_tree_impl()->tile_manager()->ForceTileUploadToComplete(*iter); |
557 // A null tile (i.e. no recording) is considered "ready". | 555 // A null tile (i.e. no recording) is considered "ready". |
558 if (!*iter || iter->drawing_info().IsReadyToDraw()) | 556 if (!*iter || iter->drawing_info().IsReadyToDraw()) |
559 missing_region.Subtract(iter.geometry_rect()); | 557 missing_region.Subtract(iter.geometry_rect()); |
560 } | 558 } |
561 } | 559 } |
562 | 560 |
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
864 scoped_ptr<base::Value> PictureLayerImpl::AsValue() const { | 862 scoped_ptr<base::Value> PictureLayerImpl::AsValue() const { |
865 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue()); | 863 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue()); |
866 LayerImpl::AsValueInto(state.get()); | 864 LayerImpl::AsValueInto(state.get()); |
867 | 865 |
868 state->SetDouble("ideal_contents_scale", ideal_contents_scale_); | 866 state->SetDouble("ideal_contents_scale", ideal_contents_scale_); |
869 state->Set("tilings", tilings_->AsValue().release()); | 867 state->Set("tilings", tilings_->AsValue().release()); |
870 return state.PassAs<base::Value>(); | 868 return state.PassAs<base::Value>(); |
871 } | 869 } |
872 | 870 |
873 } // namespace cc | 871 } // namespace cc |
OLD | NEW |