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

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

Issue 343653004: cc: Don't add new tilings while syncing a tiling. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: managetilingsinsync: rebase Created 6 years, 6 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 9
10 #include "base/time/time.h" 10 #include "base/time/time.h"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 ideal_page_scale_(0.f), 54 ideal_page_scale_(0.f),
55 ideal_device_scale_(0.f), 55 ideal_device_scale_(0.f),
56 ideal_source_scale_(0.f), 56 ideal_source_scale_(0.f),
57 ideal_contents_scale_(0.f), 57 ideal_contents_scale_(0.f),
58 raster_page_scale_(0.f), 58 raster_page_scale_(0.f),
59 raster_device_scale_(0.f), 59 raster_device_scale_(0.f),
60 raster_source_scale_(0.f), 60 raster_source_scale_(0.f),
61 raster_contents_scale_(0.f), 61 raster_contents_scale_(0.f),
62 low_res_raster_contents_scale_(0.f), 62 low_res_raster_contents_scale_(0.f),
63 raster_source_scale_is_fixed_(false), 63 raster_source_scale_is_fixed_(false),
64 was_animating_transform_to_screen_(false), 64 was_screen_space_transform_animating_(false),
65 needs_post_commit_initialization_(true), 65 needs_post_commit_initialization_(true),
66 should_update_tile_priorities_(false) { 66 should_update_tile_priorities_(false) {
67 layer_tree_impl()->RegisterPictureLayerImpl(this); 67 layer_tree_impl()->RegisterPictureLayerImpl(this);
68 } 68 }
69 69
70 PictureLayerImpl::~PictureLayerImpl() { 70 PictureLayerImpl::~PictureLayerImpl() {
71 layer_tree_impl()->UnregisterPictureLayerImpl(this); 71 layer_tree_impl()->UnregisterPictureLayerImpl(this);
72 } 72 }
73 73
74 const char* PictureLayerImpl::LayerTypeAsString() const { 74 const char* PictureLayerImpl::LayerTypeAsString() const {
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after
380 on_demand_missing_tile_count); 380 on_demand_missing_tile_count);
381 } 381 }
382 382
383 // Aggressively remove any tilings that are not seen to save memory. Note 383 // Aggressively remove any tilings that are not seen to save memory. Note
384 // that this is at the expense of doing cause more frequent re-painting. A 384 // that this is at the expense of doing cause more frequent re-painting. A
385 // better scheme would be to maintain a tighter visible_content_rect for the 385 // better scheme would be to maintain a tighter visible_content_rect for the
386 // finer tilings. 386 // finer tilings.
387 CleanUpTilingsOnActiveLayer(seen_tilings); 387 CleanUpTilingsOnActiveLayer(seen_tilings);
388 } 388 }
389 389
390 void PictureLayerImpl::UpdateTilePriorities() { 390 void PictureLayerImpl::UpdateTiles() {
391 TRACE_EVENT0("cc", "PictureLayerImpl::UpdateTilePriorities"); 391 TRACE_EVENT0("cc", "PictureLayerImpl::UpdateTiles");
392 392
393 DoPostCommitInitializationIfNeeded(); 393 DoPostCommitInitializationIfNeeded();
394 394
395 if (layer_tree_impl()->device_viewport_valid_for_tile_management()) { 395 if (layer_tree_impl()->device_viewport_valid_for_tile_management()) {
396 visible_rect_for_tile_priority_ = visible_content_rect(); 396 visible_rect_for_tile_priority_ = visible_content_rect();
397 viewport_size_for_tile_priority_ = layer_tree_impl()->DrawViewportSize(); 397 viewport_size_for_tile_priority_ = layer_tree_impl()->DrawViewportSize();
398 screen_space_transform_for_tile_priority_ = screen_space_transform(); 398 screen_space_transform_for_tile_priority_ = screen_space_transform();
399 } 399 }
400 400
401 if (!CanHaveTilings()) { 401 if (!CanHaveTilings()) {
402 ideal_page_scale_ = 0.f; 402 ideal_page_scale_ = 0.f;
403 ideal_device_scale_ = 0.f; 403 ideal_device_scale_ = 0.f;
404 ideal_contents_scale_ = 0.f; 404 ideal_contents_scale_ = 0.f;
405 ideal_source_scale_ = 0.f; 405 ideal_source_scale_ = 0.f;
406 SanityCheckTilingState(); 406 SanityCheckTilingState();
407 return; 407 return;
408 } 408 }
409 409
410 UpdateIdealScales();
411
412 DCHECK(tilings_->num_tilings() > 0 || raster_contents_scale_ == 0.f)
413 << "A layer with no tilings shouldn't have valid raster scales";
414 if (!raster_contents_scale_ || ShouldAdjustRasterScale()) {
415 RecalculateRasterScales();
416 AddTilingsForRasterScale();
417 }
418
419 DCHECK(raster_page_scale_);
420 DCHECK(raster_device_scale_);
421 DCHECK(raster_source_scale_);
422 DCHECK(raster_contents_scale_);
423 DCHECK(low_res_raster_contents_scale_);
424
425 was_screen_space_transform_animating_ =
426 draw_properties().screen_space_transform_is_animating;
427
410 // TODO(sohanjg): Avoid needlessly update priorities when syncing to a 428 // TODO(sohanjg): Avoid needlessly update priorities when syncing to a
411 // non-updated tree which will then be updated immediately afterwards. 429 // non-updated tree which will then be updated immediately afterwards.
412 should_update_tile_priorities_ = true; 430 should_update_tile_priorities_ = true;
413 431
414 UpdateIdealScales(); 432 UpdateTilePriorities();
415 ManageTilings(draw_properties().screen_space_transform_is_animating,
416 draw_properties().maximum_animation_contents_scale);
417 433
418 if (!tilings_->num_tilings()) 434 if (layer_tree_impl()->IsPendingTree())
419 return; 435 MarkVisibleResourcesAsRequired();
436 }
437
438 void PictureLayerImpl::UpdateTilePriorities() {
439 TRACE_EVENT0("cc", "PictureLayerImpl::UpdateTilePriorities");
420 440
421 double current_frame_time_in_seconds = 441 double current_frame_time_in_seconds =
422 (layer_tree_impl()->CurrentFrameTimeTicks() - 442 (layer_tree_impl()->CurrentFrameTimeTicks() -
423 base::TimeTicks()).InSecondsF(); 443 base::TimeTicks()).InSecondsF();
424 444
425 bool tiling_needs_update = false; 445 bool tiling_needs_update = false;
426 for (size_t i = 0; i < tilings_->num_tilings(); ++i) { 446 for (size_t i = 0; i < tilings_->num_tilings(); ++i) {
427 if (tilings_->tiling_at(i)->NeedsUpdateForFrameAtTime( 447 if (tilings_->tiling_at(i)->NeedsUpdateForFrameAtTime(
428 current_frame_time_in_seconds)) { 448 current_frame_time_in_seconds)) {
429 tiling_needs_update = true; 449 tiling_needs_update = true;
(...skipping 14 matching lines...) Expand all
444 gfx::ToEnclosingRect(MathUtil::ProjectClippedRect( 464 gfx::ToEnclosingRect(MathUtil::ProjectClippedRect(
445 screen_to_layer, gfx::Rect(viewport_size_for_tile_priority_))); 465 screen_to_layer, gfx::Rect(viewport_size_for_tile_priority_)));
446 visible_rect_in_content_space.Intersect(gfx::Rect(content_bounds())); 466 visible_rect_in_content_space.Intersect(gfx::Rect(content_bounds()));
447 } 467 }
448 } 468 }
449 469
450 gfx::Rect visible_layer_rect = gfx::ScaleToEnclosingRect( 470 gfx::Rect visible_layer_rect = gfx::ScaleToEnclosingRect(
451 visible_rect_in_content_space, 1.f / contents_scale_x()); 471 visible_rect_in_content_space, 1.f / contents_scale_x());
452 WhichTree tree = 472 WhichTree tree =
453 layer_tree_impl()->IsActiveTree() ? ACTIVE_TREE : PENDING_TREE; 473 layer_tree_impl()->IsActiveTree() ? ACTIVE_TREE : PENDING_TREE;
454 // TODO(sohanjg): Passing MaximumContentsScale as layer contents scale 474 for (size_t i = 0; i < tilings_->num_tilings(); ++i) {
455 // in UpdateTilePriorities is wrong and should be ideal contents scale. 475 // TODO(sohanjg): Passing MaximumContentsScale as layer contents scale
456 tilings_->UpdateTilePriorities(tree, 476 // in UpdateTilePriorities is wrong and should be ideal contents scale.
457 visible_layer_rect, 477 tilings_->tiling_at(i)->UpdateTilePriorities(tree,
458 MaximumTilingContentsScale(), 478 visible_layer_rect,
459 current_frame_time_in_seconds); 479 MaximumTilingContentsScale(),
460 480 current_frame_time_in_seconds);
461 if (layer_tree_impl()->IsPendingTree()) 481 }
462 MarkVisibleResourcesAsRequired();
463 482
464 // Tile priorities were modified. 483 // Tile priorities were modified.
465 layer_tree_impl()->DidModifyTilePriorities(); 484 layer_tree_impl()->DidModifyTilePriorities();
466 } 485 }
467 486
468 void PictureLayerImpl::NotifyTileStateChanged(const Tile* tile) { 487 void PictureLayerImpl::NotifyTileStateChanged(const Tile* tile) {
469 if (layer_tree_impl()->IsActiveTree()) { 488 if (layer_tree_impl()->IsActiveTree()) {
470 gfx::RectF layer_damage_rect = 489 gfx::RectF layer_damage_rect =
471 gfx::ScaleRect(tile->content_rect(), 1.f / tile->contents_scale()); 490 gfx::ScaleRect(tile->content_rect(), 1.f / tile->contents_scale());
472 AddDamageRect(layer_damage_rect); 491 AddDamageRect(layer_damage_rect);
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
719 iter->GetTileVersionForDrawing(); 738 iter->GetTileVersionForDrawing();
720 if (!tile_version.IsReadyToDraw() || 739 if (!tile_version.IsReadyToDraw() ||
721 tile_version.mode() != ManagedTileState::TileVersion::RESOURCE_MODE) 740 tile_version.mode() != ManagedTileState::TileVersion::RESOURCE_MODE)
722 return 0; 741 return 0;
723 742
724 return tile_version.get_resource_id(); 743 return tile_version.get_resource_id();
725 } 744 }
726 745
727 void PictureLayerImpl::MarkVisibleResourcesAsRequired() const { 746 void PictureLayerImpl::MarkVisibleResourcesAsRequired() const {
728 DCHECK(layer_tree_impl()->IsPendingTree()); 747 DCHECK(layer_tree_impl()->IsPendingTree());
729 DCHECK(!layer_tree_impl()->needs_update_draw_properties());
730 DCHECK(ideal_contents_scale_); 748 DCHECK(ideal_contents_scale_);
731 DCHECK_GT(tilings_->num_tilings(), 0u); 749 DCHECK_GT(tilings_->num_tilings(), 0u);
732 750
733 // The goal of this function is to find the minimum set of tiles that need to 751 // The goal of this function is to find the minimum set of tiles that need to
734 // be ready to draw in order to activate without flashing content from a 752 // be ready to draw in order to activate without flashing content from a
735 // higher res on the active tree to a lower res on the pending tree. 753 // higher res on the active tree to a lower res on the pending tree.
736 754
737 // First, early out for layers with no visible content. 755 // First, early out for layers with no visible content.
738 if (visible_content_rect().IsEmpty()) 756 if (visible_content_rect().IsEmpty())
739 return; 757 return;
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
933 namespace { 951 namespace {
934 952
935 inline float PositiveRatio(float float1, float float2) { 953 inline float PositiveRatio(float float1, float float2) {
936 DCHECK_GT(float1, 0); 954 DCHECK_GT(float1, 0);
937 DCHECK_GT(float2, 0); 955 DCHECK_GT(float2, 0);
938 return float1 > float2 ? float1 / float2 : float2 / float1; 956 return float1 > float2 ? float1 / float2 : float2 / float1;
939 } 957 }
940 958
941 } // namespace 959 } // namespace
942 960
943 void PictureLayerImpl::ManageTilings(bool animating_transform_to_screen, 961 void PictureLayerImpl::AddTilingsForRasterScale() {
944 float maximum_animation_contents_scale) {
945 DCHECK(ideal_contents_scale_);
946 DCHECK(ideal_page_scale_);
947 DCHECK(ideal_device_scale_);
948 DCHECK(ideal_source_scale_);
949 DCHECK(CanHaveTilings());
950 DCHECK(!needs_post_commit_initialization_);
951
952 bool change_target_tiling =
953 raster_page_scale_ == 0.f ||
954 raster_device_scale_ == 0.f ||
955 raster_source_scale_ == 0.f ||
956 raster_contents_scale_ == 0.f ||
957 low_res_raster_contents_scale_ == 0.f ||
958 ShouldAdjustRasterScale(animating_transform_to_screen);
959
960 if (tilings_->num_tilings() == 0) {
961 DCHECK(change_target_tiling)
962 << "A layer with no tilings shouldn't have valid raster scales";
963 }
964
965 if (change_target_tiling) {
966 RecalculateRasterScales(animating_transform_to_screen,
967 maximum_animation_contents_scale);
968 }
969
970 was_animating_transform_to_screen_ = animating_transform_to_screen;
971
972 if (!change_target_tiling)
973 return;
974
975 PictureLayerTiling* high_res = NULL; 962 PictureLayerTiling* high_res = NULL;
976 PictureLayerTiling* low_res = NULL; 963 PictureLayerTiling* low_res = NULL;
977 964
978 PictureLayerTiling* previous_low_res = NULL; 965 PictureLayerTiling* previous_low_res = NULL;
979 for (size_t i = 0; i < tilings_->num_tilings(); ++i) { 966 for (size_t i = 0; i < tilings_->num_tilings(); ++i) {
980 PictureLayerTiling* tiling = tilings_->tiling_at(i); 967 PictureLayerTiling* tiling = tilings_->tiling_at(i);
981 if (tiling->contents_scale() == raster_contents_scale_) 968 if (tiling->contents_scale() == raster_contents_scale_)
982 high_res = tiling; 969 high_res = tiling;
983 if (tiling->contents_scale() == low_res_raster_contents_scale_) 970 if (tiling->contents_scale() == low_res_raster_contents_scale_)
984 low_res = tiling; 971 low_res = tiling;
985 if (tiling->resolution() == LOW_RESOLUTION) 972 if (tiling->resolution() == LOW_RESOLUTION)
986 previous_low_res = tiling; 973 previous_low_res = tiling;
987 974
988 // Reset all tilings to non-ideal until the end of this function. 975 // Reset all tilings to non-ideal until the end of this function.
989 tiling->set_resolution(NON_IDEAL_RESOLUTION); 976 tiling->set_resolution(NON_IDEAL_RESOLUTION);
990 } 977 }
991 978
992 if (!high_res) { 979 if (!high_res) {
993 high_res = AddTiling(raster_contents_scale_); 980 high_res = AddTiling(raster_contents_scale_);
994 if (raster_contents_scale_ == low_res_raster_contents_scale_) 981 if (raster_contents_scale_ == low_res_raster_contents_scale_)
995 low_res = high_res; 982 low_res = high_res;
996 } 983 }
997 984
998 // Only create new low res tilings when the transform is static. This 985 // Only create new low res tilings when the transform is static. This
999 // prevents wastefully creating a paired low res tiling for every new high res 986 // prevents wastefully creating a paired low res tiling for every new high res
1000 // tiling during a pinch or a CSS animation. 987 // tiling during a pinch or a CSS animation.
1001 bool is_pinching = layer_tree_impl()->PinchGestureActive(); 988 bool is_pinching = layer_tree_impl()->PinchGestureActive();
1002 if (layer_tree_impl()->create_low_res_tiling() && !is_pinching && 989 if (layer_tree_impl()->create_low_res_tiling() && !is_pinching &&
1003 !animating_transform_to_screen && !low_res && low_res != high_res) 990 !draw_properties().screen_space_transform_is_animating && !low_res &&
991 low_res != high_res)
1004 low_res = AddTiling(low_res_raster_contents_scale_); 992 low_res = AddTiling(low_res_raster_contents_scale_);
1005 993
1006 // Set low-res if we have one. 994 // Set low-res if we have one.
1007 if (!low_res) 995 if (!low_res)
1008 low_res = previous_low_res; 996 low_res = previous_low_res;
1009 if (low_res && low_res != high_res) 997 if (low_res && low_res != high_res)
1010 low_res->set_resolution(LOW_RESOLUTION); 998 low_res->set_resolution(LOW_RESOLUTION);
1011 999
1012 // Make sure we always have one high-res (even if high == low). 1000 // Make sure we always have one high-res (even if high == low).
1013 high_res->set_resolution(HIGH_RESOLUTION); 1001 high_res->set_resolution(HIGH_RESOLUTION);
1014 1002
1015 SanityCheckTilingState(); 1003 SanityCheckTilingState();
1016 } 1004 }
1017 1005
1018 bool PictureLayerImpl::ShouldAdjustRasterScale( 1006 bool PictureLayerImpl::ShouldAdjustRasterScale() const {
1019 bool animating_transform_to_screen) const { 1007 if (was_screen_space_transform_animating_ !=
1020 if (was_animating_transform_to_screen_ != animating_transform_to_screen) 1008 draw_properties().screen_space_transform_is_animating)
1021 return true; 1009 return true;
1022 1010
1023 bool is_pinching = layer_tree_impl()->PinchGestureActive(); 1011 bool is_pinching = layer_tree_impl()->PinchGestureActive();
1024 if (is_pinching && raster_page_scale_) { 1012 if (is_pinching && raster_page_scale_) {
1025 // We change our raster scale when it is: 1013 // We change our raster scale when it is:
1026 // - Higher than ideal (need a lower-res tiling available) 1014 // - Higher than ideal (need a lower-res tiling available)
1027 // - Too far from ideal (need a higher-res tiling available) 1015 // - Too far from ideal (need a higher-res tiling available)
1028 float ratio = ideal_page_scale_ / raster_page_scale_; 1016 float ratio = ideal_page_scale_ / raster_page_scale_;
1029 if (raster_page_scale_ > ideal_page_scale_ || 1017 if (raster_page_scale_ > ideal_page_scale_ ||
1030 ratio > kMaxScaleRatioDuringPinch) 1018 ratio > kMaxScaleRatioDuringPinch)
1031 return true; 1019 return true;
1032 } 1020 }
1033 1021
1034 if (!is_pinching) { 1022 if (!is_pinching) {
1035 // When not pinching, match the ideal page scale factor. 1023 // When not pinching, match the ideal page scale factor.
1036 if (raster_page_scale_ != ideal_page_scale_) 1024 if (raster_page_scale_ != ideal_page_scale_)
1037 return true; 1025 return true;
1038 } 1026 }
1039 1027
1040 // Always match the ideal device scale factor. 1028 // Always match the ideal device scale factor.
1041 if (raster_device_scale_ != ideal_device_scale_) 1029 if (raster_device_scale_ != ideal_device_scale_)
1042 return true; 1030 return true;
1043 1031
1044 // When the source scale changes we want to match it, but not when animating 1032 // When the source scale changes we want to match it, but not when animating
1045 // or when we've fixed the scale in place. 1033 // or when we've fixed the scale in place.
1046 if (!animating_transform_to_screen && !raster_source_scale_is_fixed_ && 1034 if (!draw_properties().screen_space_transform_is_animating &&
1035 !raster_source_scale_is_fixed_ &&
1047 raster_source_scale_ != ideal_source_scale_) 1036 raster_source_scale_ != ideal_source_scale_)
1048 return true; 1037 return true;
1049 1038
1050 return false; 1039 return false;
1051 } 1040 }
1052 1041
1053 float PictureLayerImpl::SnappedContentsScale(float scale) { 1042 float PictureLayerImpl::SnappedContentsScale(float scale) {
1054 // If a tiling exists within the max snapping ratio, snap to its scale. 1043 // If a tiling exists within the max snapping ratio, snap to its scale.
1055 float snapped_contents_scale = scale; 1044 float snapped_contents_scale = scale;
1056 float snapped_ratio = kSnapToExistingTilingRatio; 1045 float snapped_ratio = kSnapToExistingTilingRatio;
1057 for (size_t i = 0; i < tilings_->num_tilings(); ++i) { 1046 for (size_t i = 0; i < tilings_->num_tilings(); ++i) {
1058 float tiling_contents_scale = tilings_->tiling_at(i)->contents_scale(); 1047 float tiling_contents_scale = tilings_->tiling_at(i)->contents_scale();
1059 float ratio = PositiveRatio(tiling_contents_scale, scale); 1048 float ratio = PositiveRatio(tiling_contents_scale, scale);
1060 if (ratio < snapped_ratio) { 1049 if (ratio < snapped_ratio) {
1061 snapped_contents_scale = tiling_contents_scale; 1050 snapped_contents_scale = tiling_contents_scale;
1062 snapped_ratio = ratio; 1051 snapped_ratio = ratio;
1063 } 1052 }
1064 } 1053 }
1065 return snapped_contents_scale; 1054 return snapped_contents_scale;
1066 } 1055 }
1067 1056
1068 void PictureLayerImpl::RecalculateRasterScales( 1057 void PictureLayerImpl::RecalculateRasterScales() {
1069 bool animating_transform_to_screen,
1070 float maximum_animation_contents_scale) {
1071 float old_raster_contents_scale = raster_contents_scale_; 1058 float old_raster_contents_scale = raster_contents_scale_;
1072 float old_raster_page_scale = raster_page_scale_; 1059 float old_raster_page_scale = raster_page_scale_;
1073 float old_raster_source_scale = raster_source_scale_; 1060 float old_raster_source_scale = raster_source_scale_;
1074 1061
1075 raster_device_scale_ = ideal_device_scale_; 1062 raster_device_scale_ = ideal_device_scale_;
1076 raster_page_scale_ = ideal_page_scale_; 1063 raster_page_scale_ = ideal_page_scale_;
1077 raster_source_scale_ = ideal_source_scale_; 1064 raster_source_scale_ = ideal_source_scale_;
1078 raster_contents_scale_ = ideal_contents_scale_; 1065 raster_contents_scale_ = ideal_contents_scale_;
1079 1066
1080 // If we're not animating, or leaving an animation, and the 1067 // If we're not animating, or leaving an animation, and the
1081 // ideal_source_scale_ changes, then things are unpredictable, and we fix 1068 // ideal_source_scale_ changes, then things are unpredictable, and we fix
1082 // the raster_source_scale_ in place. 1069 // the raster_source_scale_ in place.
1083 if (old_raster_source_scale && !animating_transform_to_screen && 1070 if (old_raster_source_scale &&
1084 !was_animating_transform_to_screen_ && 1071 !draw_properties().screen_space_transform_is_animating &&
1072 !was_screen_space_transform_animating_ &&
1085 old_raster_source_scale != ideal_source_scale_) 1073 old_raster_source_scale != ideal_source_scale_)
1086 raster_source_scale_is_fixed_ = true; 1074 raster_source_scale_is_fixed_ = true;
1087 1075
1088 // TODO(danakj): Adjust raster source scale closer to ideal source scale at 1076 // TODO(danakj): Adjust raster source scale closer to ideal source scale at
1089 // a throttled rate. Possibly make use of invalidation_.IsEmpty() on pending 1077 // a throttled rate. Possibly make use of invalidation_.IsEmpty() on pending
1090 // tree. This will allow CSS scale changes to get re-rastered at an 1078 // tree. This will allow CSS scale changes to get re-rastered at an
1091 // appropriate rate. 1079 // appropriate rate.
1092 if (raster_source_scale_is_fixed_) { 1080 if (raster_source_scale_is_fixed_) {
1093 raster_contents_scale_ /= raster_source_scale_; 1081 raster_contents_scale_ /= raster_source_scale_;
1094 raster_source_scale_ = 1.f; 1082 raster_source_scale_ = 1.f;
(...skipping 15 matching lines...) Expand all
1110 raster_page_scale_ = 1098 raster_page_scale_ =
1111 raster_contents_scale_ / raster_device_scale_ / raster_source_scale_; 1099 raster_contents_scale_ / raster_device_scale_ / raster_source_scale_;
1112 } 1100 }
1113 1101
1114 raster_contents_scale_ = 1102 raster_contents_scale_ =
1115 std::max(raster_contents_scale_, MinimumContentsScale()); 1103 std::max(raster_contents_scale_, MinimumContentsScale());
1116 1104
1117 // Since we're not re-rasterizing during animation, rasterize at the maximum 1105 // Since we're not re-rasterizing during animation, rasterize at the maximum
1118 // scale that will occur during the animation, if the maximum scale is 1106 // scale that will occur during the animation, if the maximum scale is
1119 // known. 1107 // known.
1120 if (animating_transform_to_screen) { 1108 if (draw_properties().screen_space_transform_is_animating) {
1121 if (maximum_animation_contents_scale > 0.f) { 1109 if (draw_properties().maximum_animation_contents_scale > 0.f) {
1122 raster_contents_scale_ = 1110 raster_contents_scale_ =
1123 std::max(raster_contents_scale_, maximum_animation_contents_scale); 1111 std::max(raster_contents_scale_,
1112 draw_properties().maximum_animation_contents_scale);
1124 } else { 1113 } else {
1125 raster_contents_scale_ = 1114 raster_contents_scale_ =
1126 std::max(raster_contents_scale_, 1115 std::max(raster_contents_scale_,
1127 1.f * ideal_page_scale_ * ideal_device_scale_); 1116 1.f * ideal_page_scale_ * ideal_device_scale_);
1128 } 1117 }
1129 } 1118 }
1130 1119
1131 // If this layer would only create one tile at this content scale, 1120 // If this layer would only create one tile at this content scale,
1132 // don't create a low res tiling. 1121 // don't create a low res tiling.
1133 gfx::Size content_bounds = 1122 gfx::Size content_bounds =
(...skipping 490 matching lines...) Expand 10 before | Expand all | Expand 10 after
1624 return iterator_index_ < iterators_.size(); 1613 return iterator_index_ < iterators_.size();
1625 } 1614 }
1626 1615
1627 bool PictureLayerImpl::LayerEvictionTileIterator::IsCorrectType( 1616 bool PictureLayerImpl::LayerEvictionTileIterator::IsCorrectType(
1628 PictureLayerTiling::TilingEvictionTileIterator* it) const { 1617 PictureLayerTiling::TilingEvictionTileIterator* it) const {
1629 return it->get_type() == iteration_stage_ && 1618 return it->get_type() == iteration_stage_ &&
1630 (**it)->required_for_activation() == required_for_activation_; 1619 (**it)->required_for_activation() == required_for_activation_;
1631 } 1620 }
1632 1621
1633 } // namespace cc 1622 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698