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 "base/time.h" | 7 #include "base/time.h" |
8 #include "cc/base/math_util.h" | 8 #include "cc/base/math_util.h" |
9 #include "cc/base/util.h" | 9 #include "cc/base/util.h" |
10 #include "cc/debug/debug_colors.h" | 10 #include "cc/debug/debug_colors.h" |
(...skipping 11 matching lines...) Expand all Loading... |
22 namespace { | 22 namespace { |
23 const float kMaxScaleRatioDuringPinch = 2.0f; | 23 const float kMaxScaleRatioDuringPinch = 2.0f; |
24 } | 24 } |
25 | 25 |
26 namespace cc { | 26 namespace cc { |
27 | 27 |
28 PictureLayerImpl::PictureLayerImpl(LayerTreeImpl* tree_impl, int id) | 28 PictureLayerImpl::PictureLayerImpl(LayerTreeImpl* tree_impl, int id) |
29 : LayerImpl(tree_impl, id), | 29 : LayerImpl(tree_impl, id), |
30 pile_(PicturePileImpl::Create(true)), | 30 pile_(PicturePileImpl::Create(true)), |
31 last_content_scale_(0), | 31 last_content_scale_(0), |
32 ideal_contents_scale_(0), | |
33 is_mask_(false), | 32 is_mask_(false), |
34 ideal_page_scale_(0.f), | 33 ideal_page_scale_(0.f), |
35 ideal_device_scale_(0.f), | 34 ideal_device_scale_(0.f), |
36 ideal_source_scale_(0.f), | 35 ideal_source_scale_(0.f), |
| 36 ideal_contents_scale_(0.f), |
37 raster_page_scale_(0.f), | 37 raster_page_scale_(0.f), |
38 raster_device_scale_(0.f), | 38 raster_device_scale_(0.f), |
39 raster_source_scale_(0.f), | 39 raster_source_scale_(0.f), |
| 40 raster_contents_scale_(0.f), |
| 41 low_res_raster_contents_scale_(0.f), |
40 raster_source_scale_was_animating_(false), | 42 raster_source_scale_was_animating_(false), |
41 is_using_lcd_text_(true) { | 43 is_using_lcd_text_(true) { |
42 } | 44 } |
43 | 45 |
44 PictureLayerImpl::~PictureLayerImpl() { | 46 PictureLayerImpl::~PictureLayerImpl() { |
45 } | 47 } |
46 | 48 |
47 const char* PictureLayerImpl::LayerTypeAsString() const { | 49 const char* PictureLayerImpl::LayerTypeAsString() const { |
48 return "PictureLayer"; | 50 return "PictureLayer"; |
49 } | 51 } |
(...skipping 23 matching lines...) Expand all Loading... |
73 PictureLayerImpl* layer_impl = static_cast<PictureLayerImpl*>(base_layer); | 75 PictureLayerImpl* layer_impl = static_cast<PictureLayerImpl*>(base_layer); |
74 | 76 |
75 layer_impl->SetIsMask(is_mask_); | 77 layer_impl->SetIsMask(is_mask_); |
76 layer_impl->TransferTilingSet(tilings_.Pass()); | 78 layer_impl->TransferTilingSet(tilings_.Pass()); |
77 layer_impl->pile_ = pile_; | 79 layer_impl->pile_ = pile_; |
78 pile_ = PicturePileImpl::Create(is_using_lcd_text_); | 80 pile_ = PicturePileImpl::Create(is_using_lcd_text_); |
79 | 81 |
80 layer_impl->raster_page_scale_ = raster_page_scale_; | 82 layer_impl->raster_page_scale_ = raster_page_scale_; |
81 layer_impl->raster_device_scale_ = raster_device_scale_; | 83 layer_impl->raster_device_scale_ = raster_device_scale_; |
82 layer_impl->raster_source_scale_ = raster_source_scale_; | 84 layer_impl->raster_source_scale_ = raster_source_scale_; |
| 85 layer_impl->raster_contents_scale_ = raster_contents_scale_; |
| 86 layer_impl->low_res_raster_contents_scale_ = low_res_raster_contents_scale_; |
83 layer_impl->is_using_lcd_text_ = is_using_lcd_text_; | 87 layer_impl->is_using_lcd_text_ = is_using_lcd_text_; |
84 } | 88 } |
85 | 89 |
86 | 90 |
87 void PictureLayerImpl::AppendQuads(QuadSink* quad_sink, | 91 void PictureLayerImpl::AppendQuads(QuadSink* quad_sink, |
88 AppendQuadsData* append_quads_data) { | 92 AppendQuadsData* append_quads_data) { |
89 const gfx::Rect& rect = visible_content_rect(); | 93 const gfx::Rect& rect = visible_content_rect(); |
90 gfx::Rect content_rect(content_bounds()); | 94 gfx::Rect content_rect(content_bounds()); |
91 | 95 |
92 SharedQuadState* shared_quad_state = | 96 SharedQuadState* shared_quad_state = |
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
390 return default_tile_size; | 394 return default_tile_size; |
391 } | 395 } |
392 | 396 |
393 void PictureLayerImpl::SyncFromActiveLayer() { | 397 void PictureLayerImpl::SyncFromActiveLayer() { |
394 DCHECK(layer_tree_impl()->IsPendingTree()); | 398 DCHECK(layer_tree_impl()->IsPendingTree()); |
395 | 399 |
396 if (!DrawsContent()) { | 400 if (!DrawsContent()) { |
397 raster_page_scale_ = 0; | 401 raster_page_scale_ = 0; |
398 raster_device_scale_ = 0; | 402 raster_device_scale_ = 0; |
399 raster_source_scale_ = 0; | 403 raster_source_scale_ = 0; |
| 404 raster_contents_scale_ = 0; |
| 405 low_res_raster_contents_scale_ = 0; |
400 return; | 406 return; |
401 } | 407 } |
402 | 408 |
403 // If there is an active tree version of this layer, get a copy of its | 409 // If there is an active tree version of this layer, get a copy of its |
404 // tiles. This needs to be done last, after setting invalidation and the | 410 // tiles. This needs to be done last, after setting invalidation and the |
405 // pile. | 411 // pile. |
406 if (PictureLayerImpl* active_twin = ActiveTwin()) | 412 if (PictureLayerImpl* active_twin = ActiveTwin()) |
407 SyncFromActiveLayer(active_twin); | 413 SyncFromActiveLayer(active_twin); |
408 } | 414 } |
409 | 415 |
410 void PictureLayerImpl::SyncFromActiveLayer(const PictureLayerImpl* other) { | 416 void PictureLayerImpl::SyncFromActiveLayer(const PictureLayerImpl* other) { |
411 raster_page_scale_ = other->raster_page_scale_; | 417 raster_page_scale_ = other->raster_page_scale_; |
412 raster_device_scale_ = other->raster_device_scale_; | 418 raster_device_scale_ = other->raster_device_scale_; |
413 raster_source_scale_ = other->raster_source_scale_; | 419 raster_source_scale_ = other->raster_source_scale_; |
| 420 raster_contents_scale_ = other->raster_contents_scale_; |
| 421 low_res_raster_contents_scale_ = other->low_res_raster_contents_scale_; |
414 is_using_lcd_text_ = other->is_using_lcd_text_; | 422 is_using_lcd_text_ = other->is_using_lcd_text_; |
415 | 423 |
416 // Add synthetic invalidations for any recordings that were dropped. As | 424 // Add synthetic invalidations for any recordings that were dropped. As |
417 // tiles are updated to point to this new pile, this will force the dropping | 425 // tiles are updated to point to this new pile, this will force the dropping |
418 // of tiles that can no longer be rastered. This is not ideal, but is a | 426 // of tiles that can no longer be rastered. This is not ideal, but is a |
419 // trade-off for memory (use the same pile as much as possible, by switching | 427 // trade-off for memory (use the same pile as much as possible, by switching |
420 // during DidBecomeActive) and for time (don't bother checking every tile | 428 // during DidBecomeActive) and for time (don't bother checking every tile |
421 // during activation to see if the new pile can still raster it). | 429 // during activation to see if the new pile can still raster it). |
422 // | 430 // |
423 // TODO(enne): Clean up this double loop. | 431 // TODO(enne): Clean up this double loop. |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
487 } | 495 } |
488 return 0; | 496 return 0; |
489 } | 497 } |
490 | 498 |
491 bool PictureLayerImpl::AreVisibleResourcesReady() const { | 499 bool PictureLayerImpl::AreVisibleResourcesReady() const { |
492 DCHECK(layer_tree_impl()->IsPendingTree()); | 500 DCHECK(layer_tree_impl()->IsPendingTree()); |
493 DCHECK(ideal_contents_scale_); | 501 DCHECK(ideal_contents_scale_); |
494 | 502 |
495 const gfx::Rect& rect = visible_content_rect(); | 503 const gfx::Rect& rect = visible_content_rect(); |
496 | 504 |
497 float raster_contents_scale = | |
498 raster_page_scale_ * | |
499 raster_device_scale_ * | |
500 raster_source_scale_; | |
501 | |
502 float min_acceptable_scale = | 505 float min_acceptable_scale = |
503 std::min(raster_contents_scale, ideal_contents_scale_); | 506 std::min(raster_contents_scale_, ideal_contents_scale_); |
504 | 507 |
505 TreePriority tree_priority = | 508 TreePriority tree_priority = |
506 layer_tree_impl()->tile_manager()->GlobalState().tree_priority; | 509 layer_tree_impl()->tile_manager()->GlobalState().tree_priority; |
507 bool should_force_uploads = | 510 bool should_force_uploads = |
508 tree_priority != SMOOTHNESS_TAKES_PRIORITY && | 511 tree_priority != SMOOTHNESS_TAKES_PRIORITY && |
509 layer_tree_impl()->animationRegistrar()-> | 512 layer_tree_impl()->animationRegistrar()-> |
510 active_animation_controllers().empty(); | 513 active_animation_controllers().empty(); |
511 | 514 |
512 if (PictureLayerImpl* twin = ActiveTwin()) { | 515 if (PictureLayerImpl* twin = ActiveTwin()) { |
513 float twin_raster_contents_scale = | |
514 twin->raster_page_scale_ * | |
515 twin->raster_device_scale_ * | |
516 twin->raster_source_scale_; | |
517 | |
518 min_acceptable_scale = std::min( | 516 min_acceptable_scale = std::min( |
519 min_acceptable_scale, | 517 min_acceptable_scale, |
520 std::min(twin->ideal_contents_scale_, twin_raster_contents_scale)); | 518 std::min(twin->ideal_contents_scale_, twin->raster_contents_scale_)); |
521 } | 519 } |
522 | 520 |
523 Region missing_region = rect; | 521 Region missing_region = rect; |
524 for (size_t i = 0; i < tilings_->num_tilings(); ++i) { | 522 for (size_t i = 0; i < tilings_->num_tilings(); ++i) { |
525 PictureLayerTiling* tiling = tilings_->tiling_at(i); | 523 PictureLayerTiling* tiling = tilings_->tiling_at(i); |
526 | 524 |
527 if (tiling->contents_scale() < min_acceptable_scale) | 525 if (tiling->contents_scale() < min_acceptable_scale) |
528 continue; | 526 continue; |
529 | 527 |
530 for (PictureLayerTiling::Iterator iter(tiling, contents_scale_x(), rect); | 528 for (PictureLayerTiling::Iterator iter(tiling, contents_scale_x(), rect); |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
597 | 595 |
598 void PictureLayerImpl::ManageTilings(bool animating_transform_to_screen) { | 596 void PictureLayerImpl::ManageTilings(bool animating_transform_to_screen) { |
599 DCHECK(ideal_contents_scale_); | 597 DCHECK(ideal_contents_scale_); |
600 DCHECK(ideal_page_scale_); | 598 DCHECK(ideal_page_scale_); |
601 DCHECK(ideal_device_scale_); | 599 DCHECK(ideal_device_scale_); |
602 DCHECK(ideal_source_scale_); | 600 DCHECK(ideal_source_scale_); |
603 | 601 |
604 if (pile_->recorded_region().IsEmpty()) | 602 if (pile_->recorded_region().IsEmpty()) |
605 return; | 603 return; |
606 | 604 |
607 bool is_active_layer = layer_tree_impl()->IsActiveTree(); | 605 bool change_target_tiling = |
608 bool is_pinching = layer_tree_impl()->PinchGestureActive(); | 606 !raster_page_scale_ || !raster_device_scale_ || !raster_source_scale_ || |
| 607 ShouldAdjustRasterScale(animating_transform_to_screen); |
609 | 608 |
610 bool change_target_tiling = false; | 609 if (layer_tree_impl()->IsActiveTree()) { |
611 | 610 // Store the value for the next time ShouldAdjustRasterScale is called. |
612 if (!raster_page_scale_ || !raster_device_scale_ || !raster_source_scale_) | |
613 change_target_tiling = true; | |
614 | |
615 // TODO(danakj): Adjust raster_source_scale_ closer to ideal_source_scale_ at | |
616 // a throttled rate. Possibly make use of invalidation_.IsEmpty() on pending | |
617 // tree. This will allow CSS scale changes to get re-rastered at an | |
618 // appropriate rate. | |
619 | |
620 if (is_active_layer) { | |
621 if (raster_source_scale_was_animating_ && !animating_transform_to_screen) | |
622 change_target_tiling = true; | |
623 raster_source_scale_was_animating_ = animating_transform_to_screen; | 611 raster_source_scale_was_animating_ = animating_transform_to_screen; |
624 } | 612 } |
625 | 613 |
626 if (is_active_layer && is_pinching && raster_page_scale_) { | |
627 // If the page scale diverges too far during pinch, change raster target to | |
628 // the current page scale. | |
629 float ratio = PositiveRatio(ideal_page_scale_, raster_page_scale_); | |
630 if (ratio >= kMaxScaleRatioDuringPinch) | |
631 change_target_tiling = true; | |
632 } | |
633 | |
634 if (!is_pinching) { | |
635 // When not pinching, match the ideal page scale factor. | |
636 if (raster_page_scale_ != ideal_page_scale_) | |
637 change_target_tiling = true; | |
638 } | |
639 | |
640 // Always match the ideal device scale factor. | |
641 if (raster_device_scale_ != ideal_device_scale_) | |
642 change_target_tiling = true; | |
643 | |
644 if (!change_target_tiling) | 614 if (!change_target_tiling) |
645 return; | 615 return; |
646 | 616 |
647 raster_page_scale_ = ideal_page_scale_; | 617 raster_page_scale_ = ideal_page_scale_; |
648 raster_device_scale_ = ideal_device_scale_; | 618 raster_device_scale_ = ideal_device_scale_; |
649 raster_source_scale_ = ideal_source_scale_; | 619 raster_source_scale_ = ideal_source_scale_; |
650 | 620 |
651 float raster_contents_scale; | |
652 float low_res_raster_contents_scale; | |
653 CalculateRasterContentsScale(animating_transform_to_screen, | 621 CalculateRasterContentsScale(animating_transform_to_screen, |
654 &raster_contents_scale, | 622 &raster_contents_scale_, |
655 &low_res_raster_contents_scale); | 623 &low_res_raster_contents_scale_); |
656 | 624 |
657 PictureLayerTiling* high_res = NULL; | 625 PictureLayerTiling* high_res = NULL; |
658 PictureLayerTiling* low_res = NULL; | 626 PictureLayerTiling* low_res = NULL; |
659 | 627 |
660 for (size_t i = 0; i < tilings_->num_tilings(); ++i) { | 628 for (size_t i = 0; i < tilings_->num_tilings(); ++i) { |
661 PictureLayerTiling* tiling = tilings_->tiling_at(i); | 629 PictureLayerTiling* tiling = tilings_->tiling_at(i); |
662 if (tiling->contents_scale() == raster_contents_scale) | 630 if (tiling->contents_scale() == raster_contents_scale_) |
663 high_res = tiling; | 631 high_res = tiling; |
664 if (tiling->contents_scale() == low_res_raster_contents_scale) | 632 if (tiling->contents_scale() == low_res_raster_contents_scale_) |
665 low_res = tiling; | 633 low_res = tiling; |
666 | 634 |
667 // Reset all tilings to non-ideal until the end of this function. | 635 // Reset all tilings to non-ideal until the end of this function. |
668 tiling->set_resolution(NON_IDEAL_RESOLUTION); | 636 tiling->set_resolution(NON_IDEAL_RESOLUTION); |
669 } | 637 } |
670 | 638 |
671 if (!high_res) { | 639 if (!high_res) { |
672 high_res = AddTiling(raster_contents_scale); | 640 high_res = AddTiling(raster_contents_scale_); |
673 if (raster_contents_scale == low_res_raster_contents_scale) | 641 if (raster_contents_scale_ == low_res_raster_contents_scale_) |
674 low_res = high_res; | 642 low_res = high_res; |
675 } | 643 } |
676 if (!low_res && low_res != high_res) | 644 if (!low_res && low_res != high_res) |
677 low_res = AddTiling(low_res_raster_contents_scale); | 645 low_res = AddTiling(low_res_raster_contents_scale_); |
678 | 646 |
679 if (high_res) | 647 if (high_res) |
680 high_res->set_resolution(HIGH_RESOLUTION); | 648 high_res->set_resolution(HIGH_RESOLUTION); |
681 if (low_res && low_res != high_res) | 649 if (low_res && low_res != high_res) |
682 low_res->set_resolution(LOW_RESOLUTION); | 650 low_res->set_resolution(LOW_RESOLUTION); |
683 } | 651 } |
684 | 652 |
| 653 bool PictureLayerImpl::ShouldAdjustRasterScale( |
| 654 bool animating_transform_to_screen) const { |
| 655 // TODO(danakj): Adjust raster source scale closer to ideal source scale at |
| 656 // a throttled rate. Possibly make use of invalidation_.IsEmpty() on pending |
| 657 // tree. This will allow CSS scale changes to get re-rastered at an |
| 658 // appropriate rate. |
| 659 |
| 660 bool is_active_layer = layer_tree_impl()->IsActiveTree(); |
| 661 if (is_active_layer && raster_source_scale_was_animating_ && |
| 662 !animating_transform_to_screen) |
| 663 return true; |
| 664 |
| 665 bool is_pinching = layer_tree_impl()->PinchGestureActive(); |
| 666 if (is_active_layer && is_pinching && raster_page_scale_) { |
| 667 // If the page scale diverges too far during pinch, change raster target to |
| 668 // the current page scale. |
| 669 float ratio = PositiveRatio(ideal_page_scale_, raster_page_scale_); |
| 670 if (ratio >= kMaxScaleRatioDuringPinch) |
| 671 return true; |
| 672 } |
| 673 |
| 674 if (!is_pinching) { |
| 675 // When not pinching, match the ideal page scale factor. |
| 676 if (raster_page_scale_ != ideal_page_scale_) |
| 677 return true; |
| 678 } |
| 679 |
| 680 // Always match the ideal device scale factor. |
| 681 if (raster_device_scale_ != ideal_device_scale_) |
| 682 return true; |
| 683 |
| 684 return false; |
| 685 } |
| 686 |
685 void PictureLayerImpl::CalculateRasterContentsScale( | 687 void PictureLayerImpl::CalculateRasterContentsScale( |
686 bool animating_transform_to_screen, | 688 bool animating_transform_to_screen, |
687 float* raster_contents_scale, | 689 float* raster_contents_scale, |
688 float* low_res_raster_contents_scale) { | 690 float* low_res_raster_contents_scale) const { |
689 *raster_contents_scale = ideal_contents_scale_; | 691 *raster_contents_scale = ideal_contents_scale_; |
690 | 692 |
691 // Don't allow animating CSS scales to drop below 1. | 693 // Don't allow animating CSS scales to drop below 1. |
692 if (animating_transform_to_screen) { | 694 if (animating_transform_to_screen) { |
693 *raster_contents_scale = std::max( | 695 *raster_contents_scale = std::max( |
694 *raster_contents_scale, 1.f * ideal_page_scale_ * ideal_device_scale_); | 696 *raster_contents_scale, 1.f * ideal_page_scale_ * ideal_device_scale_); |
695 } | 697 } |
696 | 698 |
697 float low_res_factor = | 699 float low_res_factor = |
698 layer_tree_impl()->settings().low_res_contents_scale_factor; | 700 layer_tree_impl()->settings().low_res_contents_scale_factor; |
699 *low_res_raster_contents_scale = std::max( | 701 *low_res_raster_contents_scale = std::max( |
700 *raster_contents_scale * low_res_factor, | 702 *raster_contents_scale * low_res_factor, |
701 MinimumContentsScale()); | 703 MinimumContentsScale()); |
702 } | 704 } |
703 | 705 |
704 void PictureLayerImpl::CleanUpTilingsOnActiveLayer( | 706 void PictureLayerImpl::CleanUpTilingsOnActiveLayer( |
705 std::vector<PictureLayerTiling*> used_tilings) { | 707 std::vector<PictureLayerTiling*> used_tilings) { |
706 DCHECK(layer_tree_impl()->IsActiveTree()); | 708 DCHECK(layer_tree_impl()->IsActiveTree()); |
707 | 709 |
708 float raster_contents_scale = | |
709 raster_page_scale_ * raster_device_scale_ * raster_source_scale_; | |
710 | |
711 float min_acceptable_high_res_scale = std::min( | 710 float min_acceptable_high_res_scale = std::min( |
712 raster_contents_scale, ideal_contents_scale_); | 711 raster_contents_scale_, ideal_contents_scale_); |
713 float max_acceptable_high_res_scale = std::max( | 712 float max_acceptable_high_res_scale = std::max( |
714 raster_contents_scale, ideal_contents_scale_); | 713 raster_contents_scale_, ideal_contents_scale_); |
715 | 714 |
716 PictureLayerImpl* twin = PendingTwin(); | 715 PictureLayerImpl* twin = PendingTwin(); |
717 if (twin) { | 716 if (twin) { |
718 float twin_raster_contents_scale = | |
719 twin->raster_page_scale_ * | |
720 twin->raster_device_scale_ * | |
721 twin->raster_source_scale_; | |
722 | |
723 min_acceptable_high_res_scale = std::min( | 717 min_acceptable_high_res_scale = std::min( |
724 min_acceptable_high_res_scale, | 718 min_acceptable_high_res_scale, |
725 std::min(twin_raster_contents_scale, twin->ideal_contents_scale_)); | 719 std::min(twin->raster_contents_scale_, twin->ideal_contents_scale_)); |
726 max_acceptable_high_res_scale = std::max( | 720 max_acceptable_high_res_scale = std::max( |
727 max_acceptable_high_res_scale, | 721 max_acceptable_high_res_scale, |
728 std::max(twin_raster_contents_scale, twin->ideal_contents_scale_)); | 722 std::max(twin->raster_contents_scale_, twin->ideal_contents_scale_)); |
729 } | 723 } |
730 | 724 |
731 float low_res_factor = | 725 float low_res_factor = |
732 layer_tree_impl()->settings().low_res_contents_scale_factor; | 726 layer_tree_impl()->settings().low_res_contents_scale_factor; |
733 | 727 |
734 float min_acceptable_low_res_scale = | 728 float min_acceptable_low_res_scale = |
735 low_res_factor * min_acceptable_high_res_scale; | 729 low_res_factor * min_acceptable_high_res_scale; |
736 float max_acceptable_low_res_scale = | 730 float max_acceptable_low_res_scale = |
737 low_res_factor * max_acceptable_high_res_scale; | 731 low_res_factor * max_acceptable_high_res_scale; |
738 | 732 |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
846 scoped_ptr<base::Value> PictureLayerImpl::AsValue() const { | 840 scoped_ptr<base::Value> PictureLayerImpl::AsValue() const { |
847 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue()); | 841 scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue()); |
848 LayerImpl::AsValueInto(state.get()); | 842 LayerImpl::AsValueInto(state.get()); |
849 | 843 |
850 state->SetDouble("ideal_contents_scale", ideal_contents_scale_); | 844 state->SetDouble("ideal_contents_scale", ideal_contents_scale_); |
851 state->Set("tilings", tilings_->AsValue().release()); | 845 state->Set("tilings", tilings_->AsValue().release()); |
852 return state.PassAs<base::Value>(); | 846 return state.PassAs<base::Value>(); |
853 } | 847 } |
854 | 848 |
855 } // namespace cc | 849 } // namespace cc |
OLD | NEW |