Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(472)

Side by Side Diff: cc/layers/picture_layer_impl.cc

Issue 367833003: cc: Start using raster/eviction iterators. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 LayerTreeImpl* tree_impl) { 90 LayerTreeImpl* tree_impl) {
91 return PictureLayerImpl::Create(tree_impl, id()).PassAs<LayerImpl>(); 91 return PictureLayerImpl::Create(tree_impl, id()).PassAs<LayerImpl>();
92 } 92 }
93 93
94 void PictureLayerImpl::PushPropertiesTo(LayerImpl* base_layer) { 94 void PictureLayerImpl::PushPropertiesTo(LayerImpl* base_layer) {
95 // It's possible this layer was never drawn or updated (e.g. because it was 95 // It's possible this layer was never drawn or updated (e.g. because it was
96 // a descendant of an opacity 0 layer). 96 // a descendant of an opacity 0 layer).
97 DoPostCommitInitializationIfNeeded(); 97 DoPostCommitInitializationIfNeeded();
98 PictureLayerImpl* layer_impl = static_cast<PictureLayerImpl*>(base_layer); 98 PictureLayerImpl* layer_impl = static_cast<PictureLayerImpl*>(base_layer);
99 99
100 // We have already synced the important bits from the the active layer, and
101 // we will soon swap out its tilings and use them for recycling. However,
102 // there are now tiles in this layer's tilings that were unref'd and replaced
103 // with new tiles (due to invalidation). This resets all active priorities on
104 // the to-be-recycled tiling to ensure replaced tiles don't linger and take
105 // memory (due to a stale 'active' priority).
106 if (layer_impl->tilings_)
107 layer_impl->tilings_->DidBecomeRecycled();
108
109 LayerImpl::PushPropertiesTo(base_layer); 100 LayerImpl::PushPropertiesTo(base_layer);
110 101
111 // When the pending tree pushes to the active tree, the pending twin 102 // When the pending tree pushes to the active tree, the pending twin
112 // becomes recycled. 103 // becomes recycled.
113 layer_impl->twin_layer_ = NULL; 104 layer_impl->twin_layer_ = NULL;
114 twin_layer_ = NULL; 105 twin_layer_ = NULL;
115 106
116 layer_impl->pile_ = pile_; 107 layer_impl->pile_ = pile_;
117 108
118 // Tilings would be expensive to push, so we swap. 109 // Tilings would be expensive to push, so we swap.
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 float width; 213 float width;
223 if (*iter && iter->IsReadyToDraw()) { 214 if (*iter && iter->IsReadyToDraw()) {
224 ManagedTileState::TileVersion::Mode mode = 215 ManagedTileState::TileVersion::Mode mode =
225 iter->GetTileVersionForDrawing().mode(); 216 iter->GetTileVersionForDrawing().mode();
226 if (mode == ManagedTileState::TileVersion::SOLID_COLOR_MODE) { 217 if (mode == ManagedTileState::TileVersion::SOLID_COLOR_MODE) {
227 color = DebugColors::SolidColorTileBorderColor(); 218 color = DebugColors::SolidColorTileBorderColor();
228 width = DebugColors::SolidColorTileBorderWidth(layer_tree_impl()); 219 width = DebugColors::SolidColorTileBorderWidth(layer_tree_impl());
229 } else if (mode == ManagedTileState::TileVersion::PICTURE_PILE_MODE) { 220 } else if (mode == ManagedTileState::TileVersion::PICTURE_PILE_MODE) {
230 color = DebugColors::PictureTileBorderColor(); 221 color = DebugColors::PictureTileBorderColor();
231 width = DebugColors::PictureTileBorderWidth(layer_tree_impl()); 222 width = DebugColors::PictureTileBorderWidth(layer_tree_impl());
232 } else if (iter->priority(ACTIVE_TREE).resolution == HIGH_RESOLUTION) { 223 } else if (iter.resolution() == HIGH_RESOLUTION) {
233 color = DebugColors::HighResTileBorderColor(); 224 color = DebugColors::HighResTileBorderColor();
234 width = DebugColors::HighResTileBorderWidth(layer_tree_impl()); 225 width = DebugColors::HighResTileBorderWidth(layer_tree_impl());
235 } else if (iter->priority(ACTIVE_TREE).resolution == LOW_RESOLUTION) { 226 } else if (iter.resolution() == LOW_RESOLUTION) {
236 color = DebugColors::LowResTileBorderColor(); 227 color = DebugColors::LowResTileBorderColor();
237 width = DebugColors::LowResTileBorderWidth(layer_tree_impl()); 228 width = DebugColors::LowResTileBorderWidth(layer_tree_impl());
238 } else if (iter->contents_scale() > max_contents_scale) { 229 } else if (iter->contents_scale() > max_contents_scale) {
239 color = DebugColors::ExtraHighResTileBorderColor(); 230 color = DebugColors::ExtraHighResTileBorderColor();
240 width = DebugColors::ExtraHighResTileBorderWidth(layer_tree_impl()); 231 width = DebugColors::ExtraHighResTileBorderWidth(layer_tree_impl());
241 } else { 232 } else {
242 color = DebugColors::ExtraLowResTileBorderColor(); 233 color = DebugColors::ExtraLowResTileBorderColor();
243 width = DebugColors::ExtraLowResTileBorderWidth(layer_tree_impl()); 234 width = DebugColors::ExtraLowResTileBorderWidth(layer_tree_impl());
244 } 235 }
245 } else { 236 } else {
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 374
384 if (geometry_rect.Intersects(scaled_viewport_for_tile_priority)) { 375 if (geometry_rect.Intersects(scaled_viewport_for_tile_priority)) {
385 append_quads_data->num_missing_tiles++; 376 append_quads_data->num_missing_tiles++;
386 ++missing_tile_count; 377 ++missing_tile_count;
387 } 378 }
388 append_quads_data->approximated_visible_content_area += 379 append_quads_data->approximated_visible_content_area +=
389 visible_geometry_rect.width() * visible_geometry_rect.height(); 380 visible_geometry_rect.width() * visible_geometry_rect.height();
390 continue; 381 continue;
391 } 382 }
392 383
393 if (iter->priority(ACTIVE_TREE).resolution != HIGH_RESOLUTION) { 384 if (iter.resolution() != HIGH_RESOLUTION) {
394 append_quads_data->approximated_visible_content_area += 385 append_quads_data->approximated_visible_content_area +=
395 visible_geometry_rect.width() * visible_geometry_rect.height(); 386 visible_geometry_rect.width() * visible_geometry_rect.height();
396 } 387 }
397 388
398 if (seen_tilings.empty() || seen_tilings.back() != iter.CurrentTiling()) 389 if (seen_tilings.empty() || seen_tilings.back() != iter.CurrentTiling())
399 seen_tilings.push_back(iter.CurrentTiling()); 390 seen_tilings.push_back(iter.CurrentTiling());
400 } 391 }
401 392
402 if (missing_tile_count) { 393 if (missing_tile_count) {
403 TRACE_EVENT_INSTANT2("cc", 394 TRACE_EVENT_INSTANT2("cc",
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
452 DCHECK(raster_source_scale_); 443 DCHECK(raster_source_scale_);
453 DCHECK(raster_contents_scale_); 444 DCHECK(raster_contents_scale_);
454 DCHECK(low_res_raster_contents_scale_); 445 DCHECK(low_res_raster_contents_scale_);
455 446
456 was_screen_space_transform_animating_ = 447 was_screen_space_transform_animating_ =
457 draw_properties().screen_space_transform_is_animating; 448 draw_properties().screen_space_transform_is_animating;
458 449
459 should_update_tile_priorities_ = true; 450 should_update_tile_priorities_ = true;
460 451
461 UpdateTilePriorities(occlusion_in_content_space); 452 UpdateTilePriorities(occlusion_in_content_space);
462
463 if (layer_tree_impl()->IsPendingTree())
464 MarkVisibleResourcesAsRequired();
465 } 453 }
466 454
467 void PictureLayerImpl::UpdateTilePriorities( 455 void PictureLayerImpl::UpdateTilePriorities(
468 const Occlusion& occlusion_in_content_space) { 456 const Occlusion& occlusion_in_content_space) {
469 TRACE_EVENT0("cc", "PictureLayerImpl::UpdateTilePriorities"); 457 TRACE_EVENT0("cc", "PictureLayerImpl::UpdateTilePriorities");
470 458
471 double current_frame_time_in_seconds = 459 double current_frame_time_in_seconds =
472 (layer_tree_impl()->CurrentBeginFrameArgs().frame_time - 460 (layer_tree_impl()->CurrentBeginFrameArgs().frame_time -
473 base::TimeTicks()).InSecondsF(); 461 base::TimeTicks()).InSecondsF();
474 462
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
534 void PictureLayerImpl::NotifyTileStateChanged(const Tile* tile) { 522 void PictureLayerImpl::NotifyTileStateChanged(const Tile* tile) {
535 if (layer_tree_impl()->IsActiveTree()) { 523 if (layer_tree_impl()->IsActiveTree()) {
536 gfx::RectF layer_damage_rect = 524 gfx::RectF layer_damage_rect =
537 gfx::ScaleRect(tile->content_rect(), 1.f / tile->contents_scale()); 525 gfx::ScaleRect(tile->content_rect(), 1.f / tile->contents_scale());
538 AddDamageRect(layer_damage_rect); 526 AddDamageRect(layer_damage_rect);
539 } 527 }
540 } 528 }
541 529
542 void PictureLayerImpl::DidBecomeActive() { 530 void PictureLayerImpl::DidBecomeActive() {
543 LayerImpl::DidBecomeActive(); 531 LayerImpl::DidBecomeActive();
544 tilings_->DidBecomeActive();
545 layer_tree_impl()->DidModifyTilePriorities(); 532 layer_tree_impl()->DidModifyTilePriorities();
danakj 2014/09/19 01:41:46 Can we do this from LayerTreeHostImpl directly and
vmpstr 2014/09/19 21:22:52 I've tried to just call DidModifyTilePriorities fr
546 } 533 }
547 534
548 void PictureLayerImpl::DidBeginTracing() { 535 void PictureLayerImpl::DidBeginTracing() {
549 pile_->DidBeginTracing(); 536 pile_->DidBeginTracing();
550 } 537 }
551 538
552 void PictureLayerImpl::ReleaseResources() { 539 void PictureLayerImpl::ReleaseResources() {
553 if (tilings_) 540 if (tilings_)
554 RemoveAllTilings(); 541 RemoveAllTilings();
555 542
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
627 layer_tree_impl()->begin_impl_frame_interval().InSecondsF() * 614 layer_tree_impl()->begin_impl_frame_interval().InSecondsF() *
628 layer_tree_impl()->settings().skewport_target_time_multiplier; 615 layer_tree_impl()->settings().skewport_target_time_multiplier;
629 } 616 }
630 617
631 int PictureLayerImpl::GetSkewportExtrapolationLimitInContentPixels() const { 618 int PictureLayerImpl::GetSkewportExtrapolationLimitInContentPixels() const {
632 return layer_tree_impl() 619 return layer_tree_impl()
633 ->settings() 620 ->settings()
634 .skewport_extrapolation_limit_in_content_pixels; 621 .skewport_extrapolation_limit_in_content_pixels;
635 } 622 }
636 623
624 bool PictureLayerImpl::RequiresHighResToDraw() const {
625 const PictureLayerImpl* layer = this;
626 if (GetTree() == PENDING_TREE)
danakj 2014/09/19 01:41:46 GetTree() is a virtual function call, how about ju
vmpstr 2014/09/19 21:22:52 Done.
627 layer = twin_layer_;
628 if (layer)
629 return layer->layer_tree_impl()->RequiresHighResToDraw();
630 return false;
631 }
632
637 gfx::Size PictureLayerImpl::CalculateTileSize( 633 gfx::Size PictureLayerImpl::CalculateTileSize(
638 const gfx::Size& content_bounds) const { 634 const gfx::Size& content_bounds) const {
639 int max_texture_size = 635 int max_texture_size =
640 layer_tree_impl()->resource_provider()->max_texture_size(); 636 layer_tree_impl()->resource_provider()->max_texture_size();
641 637
642 if (pile_->is_mask()) { 638 if (pile_->is_mask()) {
643 // Masks are not tiled, so if we can't cover the whole mask with one tile, 639 // Masks are not tiled, so if we can't cover the whole mask with one tile,
644 // don't make any tiles at all. Returning an empty size signals this. 640 // don't make any tiles at all. Returning an empty size signals this.
645 if (content_bounds.width() > max_texture_size || 641 if (content_bounds.width() > max_texture_size ||
646 content_bounds.height() > max_texture_size) 642 content_bounds.height() > max_texture_size)
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
765 761
766 const ManagedTileState::TileVersion& tile_version = 762 const ManagedTileState::TileVersion& tile_version =
767 iter->GetTileVersionForDrawing(); 763 iter->GetTileVersionForDrawing();
768 if (!tile_version.IsReadyToDraw() || 764 if (!tile_version.IsReadyToDraw() ||
769 tile_version.mode() != ManagedTileState::TileVersion::RESOURCE_MODE) 765 tile_version.mode() != ManagedTileState::TileVersion::RESOURCE_MODE)
770 return 0; 766 return 0;
771 767
772 return tile_version.get_resource_id(); 768 return tile_version.get_resource_id();
773 } 769 }
774 770
775 void PictureLayerImpl::MarkVisibleResourcesAsRequired() const {
776 DCHECK(layer_tree_impl()->IsPendingTree());
777 DCHECK(ideal_contents_scale_);
778 DCHECK_GT(tilings_->num_tilings(), 0u);
779
780 // The goal of this function is to find the minimum set of tiles that need to
781 // be ready to draw in order to activate without flashing content from a
782 // higher res on the active tree to a lower res on the pending tree.
783
784 // First, early out for layers with no visible content.
785 if (visible_content_rect().IsEmpty())
786 return;
787
788 // Only mark tiles inside the viewport for tile priority as required for
789 // activation. This viewport is normally the same as the draw viewport but
790 // can be independently overridden by embedders like Android WebView with
791 // SetExternalDrawConstraints.
792 gfx::Rect rect = GetViewportForTilePriorityInContentSpace();
793
794 float min_acceptable_scale =
795 std::min(raster_contents_scale_, ideal_contents_scale_);
796
797 if (PictureLayerImpl* twin = twin_layer_) {
798 float twin_min_acceptable_scale =
799 std::min(twin->ideal_contents_scale_, twin->raster_contents_scale_);
800 // Ignore 0 scale in case CalculateContentsScale() has never been
801 // called for active twin.
802 if (twin_min_acceptable_scale != 0.0f) {
803 min_acceptable_scale =
804 std::min(min_acceptable_scale, twin_min_acceptable_scale);
805 }
806 }
807
808 PictureLayerTiling* high_res = NULL;
809 PictureLayerTiling* low_res = NULL;
810
811 // First pass: ready to draw tiles in acceptable but non-ideal tilings are
812 // marked as required for activation so that their textures are not thrown
813 // away; any non-ready tiles are not marked as required.
814 Region missing_region = rect;
815 for (size_t i = 0; i < tilings_->num_tilings(); ++i) {
816 PictureLayerTiling* tiling = tilings_->tiling_at(i);
817 DCHECK(tiling->has_ever_been_updated());
818
819 if (tiling->resolution() == LOW_RESOLUTION) {
820 DCHECK(!low_res) << "There can only be one low res tiling";
821 low_res = tiling;
822 }
823 if (tiling->contents_scale() < min_acceptable_scale)
824 continue;
825 if (tiling->resolution() == HIGH_RESOLUTION) {
826 DCHECK(!high_res) << "There can only be one high res tiling";
827 high_res = tiling;
828 continue;
829 }
830 for (PictureLayerTiling::CoverageIterator iter(tiling, 1.f, rect); iter;
831 ++iter) {
832 if (!*iter || !iter->IsReadyToDraw())
833 continue;
834
835 missing_region.Subtract(iter.geometry_rect());
836 iter->MarkRequiredForActivation();
837 }
838 }
839 DCHECK(high_res) << "There must be one high res tiling";
840
841 // If these pointers are null (because no twin, no matching tiling, or the
842 // simpification just below), then high res tiles will be required to fill any
843 // holes left by the first pass above. If the pointers are valid, then this
844 // layer is allowed to skip any tiles that are not ready on its twin.
845 const PictureLayerTiling* twin_high_res = NULL;
846 const PictureLayerTiling* twin_low_res = NULL;
847
848 if (twin_layer_) {
849 // As a simplification, only allow activating to skip twin tiles that the
850 // active layer is also missing when both this layer and its twin have
851 // "simple" sets of tilings: only 2 tilings (high and low) or only 1 high
852 // res tiling. This avoids having to iterate/track coverage of non-ideal
853 // tilings during the last draw call on the active layer.
854 if (tilings_->num_tilings() <= 2 &&
855 twin_layer_->tilings_->num_tilings() <= tilings_->num_tilings()) {
856 twin_low_res = low_res ? GetTwinTiling(low_res) : NULL;
857 twin_high_res = high_res ? GetTwinTiling(high_res) : NULL;
858 }
859
860 // If this layer and its twin have different transforms, then don't compare
861 // them and only allow activating to high res tiles, since tiles on each
862 // layer will be in different places on screen.
863 if (twin_layer_->layer_tree_impl()->RequiresHighResToDraw() ||
864 bounds() != twin_layer_->bounds() ||
865 draw_properties().screen_space_transform !=
866 twin_layer_->draw_properties().screen_space_transform) {
867 twin_high_res = NULL;
868 twin_low_res = NULL;
869 }
870 }
871
872 // As a second pass, mark as required any visible high res tiles not filled in
873 // by acceptable non-ideal tiles from the first pass.
874 if (MarkVisibleTilesAsRequired(
875 high_res, twin_high_res, rect, missing_region)) {
876 // As an optional third pass, if a high res tile was skipped because its
877 // twin was also missing, then fall back to mark low res tiles as required
878 // in case the active twin is substituting those for missing high res
879 // content. Only suitable, when low res is enabled.
880 if (low_res) {
881 MarkVisibleTilesAsRequired(low_res, twin_low_res, rect, missing_region);
882 }
883 }
884 }
885
886 bool PictureLayerImpl::MarkVisibleTilesAsRequired(
887 PictureLayerTiling* tiling,
888 const PictureLayerTiling* optional_twin_tiling,
889 const gfx::Rect& rect,
890 const Region& missing_region) const {
891 bool twin_had_missing_tile = false;
892 for (PictureLayerTiling::CoverageIterator iter(tiling, 1.f, rect); iter;
893 ++iter) {
894 Tile* tile = *iter;
895 // A null tile (i.e. missing recording) can just be skipped.
896 if (!tile)
897 continue;
898
899 // If the tile is occluded, don't mark it as required for activation.
900 if (tile->is_occluded(PENDING_TREE))
901 continue;
902
903 // If the missing region doesn't cover it, this tile is fully
904 // covered by acceptable tiles at other scales.
905 if (!missing_region.Intersects(iter.geometry_rect()))
906 continue;
907
908 // If the twin tile doesn't exist (i.e. missing recording or so far away
909 // that it is outside the visible tile rect) or this tile is shared between
910 // with the twin, then this tile isn't required to prevent flashing.
911 if (optional_twin_tiling) {
912 Tile* twin_tile = optional_twin_tiling->TileAt(iter.i(), iter.j());
913 if (!twin_tile || twin_tile == tile) {
914 // However if the shared tile is being used on the active tree, then
915 // there's no missing content in this place, and low res is not needed.
916 if (!twin_tile || !twin_tile->IsReadyToDraw())
917 twin_had_missing_tile = true;
918 continue;
919 }
920 }
921
922 tile->MarkRequiredForActivation();
923 }
924 return twin_had_missing_tile;
925 }
926
927 void PictureLayerImpl::DoPostCommitInitialization() { 771 void PictureLayerImpl::DoPostCommitInitialization() {
928 DCHECK(needs_post_commit_initialization_); 772 DCHECK(needs_post_commit_initialization_);
929 DCHECK(layer_tree_impl()->IsPendingTree()); 773 DCHECK(layer_tree_impl()->IsPendingTree());
930 774
931 if (!tilings_) 775 if (!tilings_)
932 tilings_.reset(new PictureLayerTilingSet(this, bounds())); 776 tilings_.reset(new PictureLayerTilingSet(this, bounds()));
933 777
934 DCHECK(!twin_layer_); 778 DCHECK(!twin_layer_);
935 twin_layer_ = static_cast<PictureLayerImpl*>( 779 twin_layer_ = static_cast<PictureLayerImpl*>(
936 layer_tree_impl()->FindActiveTreeLayerById(id())); 780 layer_tree_impl()->FindActiveTreeLayerById(id()));
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after
1312 if (layer_tree_impl()->IsRecycleTree()) 1156 if (layer_tree_impl()->IsRecycleTree())
1313 return; 1157 return;
1314 1158
1315 if (!CanHaveTilings()) { 1159 if (!CanHaveTilings()) {
1316 DCHECK_EQ(0u, tilings_->num_tilings()); 1160 DCHECK_EQ(0u, tilings_->num_tilings());
1317 return; 1161 return;
1318 } 1162 }
1319 if (tilings_->num_tilings() == 0) 1163 if (tilings_->num_tilings() == 0)
1320 return; 1164 return;
1321 1165
1322 // MarkVisibleResourcesAsRequired depends on having exactly 1 high res 1166 // We should only have one high res tiling.
1323 // tiling to mark its tiles as being required for activation.
1324 DCHECK_EQ(1, tilings_->NumHighResTilings()); 1167 DCHECK_EQ(1, tilings_->NumHighResTilings());
1325 #endif 1168 #endif
1326 } 1169 }
1327 1170
1328 bool PictureLayerImpl::ShouldAdjustRasterScaleDuringScaleAnimations() const { 1171 bool PictureLayerImpl::ShouldAdjustRasterScaleDuringScaleAnimations() const {
1329 if (!layer_tree_impl()->use_gpu_rasterization()) 1172 if (!layer_tree_impl()->use_gpu_rasterization())
1330 return false; 1173 return false;
1331 1174
1332 // Re-rastering text at different scales using GPU rasterization causes 1175 // Re-rastering text at different scales using GPU rasterization causes
1333 // texture uploads for glyphs at each scale (see crbug.com/366225). To 1176 // texture uploads for glyphs at each scale (see crbug.com/366225). To
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
1472 PictureLayerTiling* tiling = tilings_->tiling_at(i); 1315 PictureLayerTiling* tiling = tilings_->tiling_at(i);
1473 if (tiling->resolution() != HIGH_RESOLUTION && 1316 if (tiling->resolution() != HIGH_RESOLUTION &&
1474 tiling->resolution() != LOW_RESOLUTION) 1317 tiling->resolution() != LOW_RESOLUTION)
1475 continue; 1318 continue;
1476 1319
1477 gfx::Rect rect(visible_content_rect()); 1320 gfx::Rect rect(visible_content_rect());
1478 for (PictureLayerTiling::CoverageIterator iter(tiling, 1.f, rect); iter; 1321 for (PictureLayerTiling::CoverageIterator iter(tiling, 1.f, rect); iter;
1479 ++iter) { 1322 ++iter) {
1480 const Tile* tile = *iter; 1323 const Tile* tile = *iter;
1481 // A null tile (i.e. missing recording) can just be skipped. 1324 // A null tile (i.e. missing recording) can just be skipped.
1325 // TODO(vmpstr): Verify this is true if we create tiles in raster
1326 // iterators.
1482 if (!tile) 1327 if (!tile)
1483 continue; 1328 continue;
1484 1329
1485 if (tile->required_for_activation() && !tile->IsReadyToDraw()) 1330 if (tiling->IsTileRequiredForActivation(tile) && !tile->IsReadyToDraw())
danakj 2014/09/19 01:41:46 The pieces all look good to me, but can you explai
vmpstr 2014/09/19 21:22:52 The priority of the tile here isn't accessed (IsTi
danakj 2014/09/19 22:30:06 Oh ok. It'd be nice if I could tell from the funct
vmpstr 2014/09/22 18:01:59 Yeah, I want to start kind of assuming that we nev
1486 return false; 1331 return false;
1487 } 1332 }
1488 } 1333 }
1489 1334
1490 return true; 1335 return true;
1491 } 1336 }
1492 1337
1493 PictureLayerImpl::LayerRasterTileIterator::LayerRasterTileIterator() 1338 PictureLayerImpl::LayerRasterTileIterator::LayerRasterTileIterator()
1494 : layer_(NULL), current_stage_(arraysize(stages_)) { 1339 : layer_(NULL), current_stage_(arraysize(stages_)) {
1495 } 1340 }
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
1758 PictureLayerTilingSet::TilingRange tiling_range = CurrentTilingRange(); 1603 PictureLayerTilingSet::TilingRange tiling_range = CurrentTilingRange();
1759 size_t current_tiling_range_offset = current_tiling_ - tiling_range.start; 1604 size_t current_tiling_range_offset = current_tiling_ - tiling_range.start;
1760 return tiling_range.end - 1 - current_tiling_range_offset; 1605 return tiling_range.end - 1 - current_tiling_range_offset;
1761 } 1606 }
1762 } 1607 }
1763 NOTREACHED(); 1608 NOTREACHED();
1764 return 0; 1609 return 0;
1765 } 1610 }
1766 1611
1767 } // namespace cc 1612 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698