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 "base/containers/hash_tables.h" | 5 #include "base/containers/hash_tables.h" |
6 #include "cc/animation/scrollbar_animation_controller.h" | 6 #include "cc/animation/scrollbar_animation_controller.h" |
7 #include "cc/layers/append_quads_data.h" | 7 #include "cc/layers/append_quads_data.h" |
8 #include "cc/layers/painted_scrollbar_layer.h" | 8 #include "cc/layers/painted_scrollbar_layer.h" |
9 #include "cc/layers/painted_scrollbar_layer_impl.h" | 9 #include "cc/layers/painted_scrollbar_layer_impl.h" |
10 #include "cc/layers/scrollbar_layer_interface.h" | 10 #include "cc/layers/scrollbar_layer_interface.h" |
(...skipping 560 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
571 void BeginTest() override { | 571 void BeginTest() override { |
572 scroll_layer_ = Layer::Create(); | 572 scroll_layer_ = Layer::Create(); |
573 layer_tree_host()->root_layer()->AddChild(scroll_layer_); | 573 layer_tree_host()->root_layer()->AddChild(scroll_layer_); |
574 | 574 |
575 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar); | 575 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar); |
576 scrollbar_layer_ = | 576 scrollbar_layer_ = |
577 PaintedScrollbarLayer::Create(scrollbar.Pass(), scroll_layer_->id()); | 577 PaintedScrollbarLayer::Create(scrollbar.Pass(), scroll_layer_->id()); |
578 scrollbar_layer_->SetScrollLayer(scroll_layer_->id()); | 578 scrollbar_layer_->SetScrollLayer(scroll_layer_->id()); |
579 scrollbar_layer_->SetLayerTreeHost(layer_tree_host()); | 579 scrollbar_layer_->SetLayerTreeHost(layer_tree_host()); |
580 scrollbar_layer_->SetBounds(bounds_); | 580 scrollbar_layer_->SetBounds(bounds_); |
581 scrollbar_layer_->SetIsDrawable(true); | |
581 layer_tree_host()->root_layer()->AddChild(scrollbar_layer_); | 582 layer_tree_host()->root_layer()->AddChild(scrollbar_layer_); |
582 | 583 |
583 PostSetNeedsCommitToMainThread(); | 584 PostSetNeedsCommitToMainThread(); |
584 } | 585 } |
585 | 586 |
586 void DidCommitAndDrawFrame() override { | 587 void DidCommitAndDrawFrame() override { |
587 const int kMaxTextureSize = | 588 const int kMaxTextureSize = |
588 layer_tree_host()->GetRendererCapabilities().max_texture_size; | 589 layer_tree_host()->GetRendererCapabilities().max_texture_size; |
589 | 590 |
590 // Check first that we're actually testing something. | 591 // Check first that we're actually testing something. |
591 EXPECT_GT(scrollbar_layer_->bounds().width(), kMaxTextureSize); | 592 EXPECT_GT(scrollbar_layer_->bounds().width(), kMaxTextureSize); |
592 | 593 |
593 EXPECT_EQ(scrollbar_layer_->content_bounds().width(), | 594 EXPECT_EQ(scrollbar_layer_->internal_content_bounds().width(), |
594 kMaxTextureSize - 1); | 595 kMaxTextureSize - 1); |
595 EXPECT_EQ(scrollbar_layer_->content_bounds().height(), | 596 EXPECT_EQ(scrollbar_layer_->internal_content_bounds().height(), |
596 kMaxTextureSize - 1); | 597 kMaxTextureSize - 1); |
597 | 598 |
598 EndTest(); | 599 EndTest(); |
599 } | 600 } |
600 | 601 |
601 void AfterTest() override {} | 602 void AfterTest() override {} |
602 | 603 |
603 private: | 604 private: |
604 scoped_refptr<PaintedScrollbarLayer> scrollbar_layer_; | 605 scoped_refptr<PaintedScrollbarLayer> scrollbar_layer_; |
605 scoped_refptr<Layer> scroll_layer_; | 606 scoped_refptr<Layer> scroll_layer_; |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
675 private: | 676 private: |
676 typedef base::hash_map<UIResourceId, UIResourceBitmap> | 677 typedef base::hash_map<UIResourceId, UIResourceBitmap> |
677 UIResourceBitmapMap; | 678 UIResourceBitmapMap; |
678 UIResourceBitmapMap ui_resource_bitmap_map_; | 679 UIResourceBitmapMap ui_resource_bitmap_map_; |
679 | 680 |
680 int next_id_; | 681 int next_id_; |
681 int total_ui_resource_created_; | 682 int total_ui_resource_created_; |
682 int total_ui_resource_deleted_; | 683 int total_ui_resource_deleted_; |
683 }; | 684 }; |
684 | 685 |
685 class ScrollbarLayerTestResourceCreationAndRelease : public testing::Test { | 686 class ScrollbarLayerResourceTest : public testing::Test { |
686 public: | 687 public: |
687 ScrollbarLayerTestResourceCreationAndRelease() | 688 ScrollbarLayerResourceTest() |
688 : fake_client_(FakeLayerTreeHostClient::DIRECT_3D) {} | 689 : fake_client_(FakeLayerTreeHostClient::DIRECT_3D) { |
690 layer_tree_settings_.single_thread_proxy_scheduler = false; | |
691 layer_tree_host_.reset( | |
692 new FakeLayerTreeHost(&fake_client_, layer_tree_settings_)); | |
693 fake_client_.SetLayerTreeHost(layer_tree_host_.get()); | |
694 // Force output surface creation for renderer capabilities. | |
enne (OOO)
2015/02/11 21:41:59
Previously the MaxTextureSize (which reached into
| |
695 layer_tree_host_->Composite(base::TimeTicks()); | |
696 EXPECT_FALSE(layer_tree_host_->output_surface_lost()); | |
697 } | |
689 | 698 |
699 protected: | |
700 FakeLayerTreeHostClient fake_client_; | |
701 LayerTreeSettings layer_tree_settings_; | |
702 scoped_ptr<FakeLayerTreeHost> layer_tree_host_; | |
703 }; | |
704 | |
705 class ScrollbarLayerTestResourceCreationAndRelease | |
706 : public ScrollbarLayerResourceTest { | |
707 public: | |
690 void TestResourceUpload(int num_updates, | 708 void TestResourceUpload(int num_updates, |
691 size_t expected_resources, | 709 size_t expected_resources, |
692 int expected_created, | 710 int expected_created, |
693 int expected_deleted, | 711 int expected_deleted, |
694 bool use_solid_color_scrollbar) { | 712 bool use_solid_color_scrollbar) { |
695 layer_tree_host_.reset( | |
696 new FakeLayerTreeHost(&fake_client_, layer_tree_settings_)); | |
697 | |
698 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar(false, true, false)); | 713 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar(false, true, false)); |
699 scoped_refptr<Layer> layer_tree_root = Layer::Create(); | 714 scoped_refptr<Layer> layer_tree_root = Layer::Create(); |
700 scoped_refptr<Layer> content_layer = Layer::Create(); | 715 scoped_refptr<Layer> content_layer = Layer::Create(); |
701 scoped_refptr<Layer> scrollbar_layer; | 716 scoped_refptr<Layer> scrollbar_layer; |
702 if (use_solid_color_scrollbar) { | 717 if (use_solid_color_scrollbar) { |
703 const int kThumbThickness = 3; | 718 const int kThumbThickness = 3; |
704 const int kTrackStart = 0; | 719 const int kTrackStart = 0; |
705 const bool kIsLeftSideVerticalScrollbar = false; | 720 const bool kIsLeftSideVerticalScrollbar = false; |
706 scrollbar_layer = | 721 scrollbar_layer = |
707 SolidColorScrollbarLayer::Create(scrollbar->Orientation(), | 722 SolidColorScrollbarLayer::Create(scrollbar->Orientation(), |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
742 | 757 |
743 // A non-solid-color scrollbar should have requested two textures. | 758 // A non-solid-color scrollbar should have requested two textures. |
744 EXPECT_EQ(expected_resources, layer_tree_host_->UIResourceCount()); | 759 EXPECT_EQ(expected_resources, layer_tree_host_->UIResourceCount()); |
745 EXPECT_EQ(expected_created, layer_tree_host_->TotalUIResourceCreated()); | 760 EXPECT_EQ(expected_created, layer_tree_host_->TotalUIResourceCreated()); |
746 EXPECT_EQ(expected_deleted, layer_tree_host_->TotalUIResourceDeleted()); | 761 EXPECT_EQ(expected_deleted, layer_tree_host_->TotalUIResourceDeleted()); |
747 | 762 |
748 testing::Mock::VerifyAndClearExpectations(layer_tree_host_.get()); | 763 testing::Mock::VerifyAndClearExpectations(layer_tree_host_.get()); |
749 | 764 |
750 scrollbar_layer->ClearRenderSurface(); | 765 scrollbar_layer->ClearRenderSurface(); |
751 } | 766 } |
752 | |
753 protected: | |
754 FakeLayerTreeHostClient fake_client_; | |
755 LayerTreeSettings layer_tree_settings_; | |
756 scoped_ptr<FakeLayerTreeHost> layer_tree_host_; | |
757 }; | 767 }; |
758 | 768 |
759 TEST_F(ScrollbarLayerTestResourceCreationAndRelease, ResourceUpload) { | 769 TEST_F(ScrollbarLayerTestResourceCreationAndRelease, ResourceUpload) { |
760 bool use_solid_color_scrollbars = false; | 770 bool use_solid_color_scrollbars = false; |
761 TestResourceUpload(0, 0, 0, 0, use_solid_color_scrollbars); | 771 TestResourceUpload(0, 0, 0, 0, use_solid_color_scrollbars); |
762 int num_updates[3] = {1, 5, 10}; | 772 int num_updates[3] = {1, 5, 10}; |
773 int created = 0; | |
774 int deleted = 0; | |
763 for (int j = 0; j < 3; j++) { | 775 for (int j = 0; j < 3; j++) { |
764 TestResourceUpload(num_updates[j], | 776 created += num_updates[j] * 2; |
enne (OOO)
2015/02/11 21:41:59
This test used to recreate the LTH every time, but
| |
765 2, | 777 deleted = created - 2; |
766 num_updates[j] * 2, | 778 TestResourceUpload(num_updates[j], 2, created, deleted, |
767 (num_updates[j] - 1) * 2, | |
768 use_solid_color_scrollbars); | 779 use_solid_color_scrollbars); |
769 } | 780 } |
770 } | 781 } |
771 | 782 |
772 TEST_F(ScrollbarLayerTestResourceCreationAndRelease, | 783 TEST_F(ScrollbarLayerTestResourceCreationAndRelease, |
773 SolidColorNoResourceUpload) { | 784 SolidColorNoResourceUpload) { |
774 bool use_solid_color_scrollbars = true; | 785 bool use_solid_color_scrollbars = true; |
775 TestResourceUpload(0, 0, 0, 0, use_solid_color_scrollbars); | 786 TestResourceUpload(0, 0, 0, 0, use_solid_color_scrollbars); |
776 TestResourceUpload(1, 0, 0, 0, use_solid_color_scrollbars); | 787 TestResourceUpload(1, 0, 0, 0, use_solid_color_scrollbars); |
777 } | 788 } |
778 | 789 |
779 TEST_F(ScrollbarLayerTestResourceCreationAndRelease, TestResourceUpdate) { | 790 TEST_F(ScrollbarLayerTestResourceCreationAndRelease, TestResourceUpdate) { |
780 FakeLayerTreeHostClient fake_client_(FakeLayerTreeHostClient::DIRECT_3D); | |
781 LayerTreeSettings layer_tree_settings_; | |
782 scoped_ptr<FakeLayerTreeHost> layer_tree_host_; | |
783 | |
784 layer_tree_host_.reset( | |
785 new FakeLayerTreeHost(&fake_client_, layer_tree_settings_)); | |
786 | |
787 gfx::Point scrollbar_location(0, 185); | 791 gfx::Point scrollbar_location(0, 185); |
788 scoped_refptr<Layer> layer_tree_root = Layer::Create(); | 792 scoped_refptr<Layer> layer_tree_root = Layer::Create(); |
789 scoped_refptr<Layer> content_layer = Layer::Create(); | 793 scoped_refptr<Layer> content_layer = Layer::Create(); |
790 scoped_refptr<FakePaintedScrollbarLayer> scrollbar_layer = | 794 scoped_refptr<FakePaintedScrollbarLayer> scrollbar_layer = |
791 FakePaintedScrollbarLayer::Create(false, true, layer_tree_root->id()); | 795 FakePaintedScrollbarLayer::Create(false, true, layer_tree_root->id()); |
792 | 796 |
793 layer_tree_root->AddChild(content_layer); | 797 layer_tree_root->AddChild(content_layer); |
794 layer_tree_root->AddChild(scrollbar_layer); | 798 layer_tree_root->AddChild(scrollbar_layer); |
795 | 799 |
796 layer_tree_host_->SetRootLayer(layer_tree_root); | 800 layer_tree_host_->SetRootLayer(layer_tree_root); |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
911 EXPECT_NE(0, scrollbar_layer->track_resource_id()); | 915 EXPECT_NE(0, scrollbar_layer->track_resource_id()); |
912 EXPECT_EQ(0, scrollbar_layer->thumb_resource_id()); | 916 EXPECT_EQ(0, scrollbar_layer->thumb_resource_id()); |
913 EXPECT_EQ(resource_count, layer_tree_host_->UIResourceCount()); | 917 EXPECT_EQ(resource_count, layer_tree_host_->UIResourceCount()); |
914 EXPECT_EQ(expected_created, layer_tree_host_->TotalUIResourceCreated()); | 918 EXPECT_EQ(expected_created, layer_tree_host_->TotalUIResourceCreated()); |
915 EXPECT_EQ(expected_deleted, layer_tree_host_->TotalUIResourceDeleted()); | 919 EXPECT_EQ(expected_deleted, layer_tree_host_->TotalUIResourceDeleted()); |
916 | 920 |
917 testing::Mock::VerifyAndClearExpectations(layer_tree_host_.get()); | 921 testing::Mock::VerifyAndClearExpectations(layer_tree_host_.get()); |
918 scrollbar_layer->ClearRenderSurface(); | 922 scrollbar_layer->ClearRenderSurface(); |
919 } | 923 } |
920 | 924 |
921 class ScaledScrollbarLayerTestResourceCreation : public testing::Test { | 925 class ScaledScrollbarLayerTestResourceCreation |
926 : public ScrollbarLayerResourceTest { | |
922 public: | 927 public: |
923 ScaledScrollbarLayerTestResourceCreation() | |
924 : fake_client_(FakeLayerTreeHostClient::DIRECT_3D) {} | |
925 | |
926 void TestResourceUpload(const float test_scale) { | 928 void TestResourceUpload(const float test_scale) { |
927 layer_tree_host_.reset( | |
928 new FakeLayerTreeHost(&fake_client_, layer_tree_settings_)); | |
929 | |
930 gfx::Point scrollbar_location(0, 185); | 929 gfx::Point scrollbar_location(0, 185); |
931 scoped_refptr<Layer> layer_tree_root = Layer::Create(); | 930 scoped_refptr<Layer> layer_tree_root = Layer::Create(); |
932 scoped_refptr<Layer> content_layer = Layer::Create(); | 931 scoped_refptr<Layer> content_layer = Layer::Create(); |
933 scoped_refptr<FakePaintedScrollbarLayer> scrollbar_layer = | 932 scoped_refptr<FakePaintedScrollbarLayer> scrollbar_layer = |
934 FakePaintedScrollbarLayer::Create(false, true, layer_tree_root->id()); | 933 FakePaintedScrollbarLayer::Create(false, true, layer_tree_root->id()); |
935 | 934 |
936 layer_tree_root->AddChild(content_layer); | 935 layer_tree_root->AddChild(content_layer); |
937 layer_tree_root->AddChild(scrollbar_layer); | 936 layer_tree_root->AddChild(scrollbar_layer); |
938 | 937 |
939 layer_tree_host_->SetRootLayer(layer_tree_root); | 938 layer_tree_host_->SetRootLayer(layer_tree_root); |
(...skipping 29 matching lines...) Expand all Loading... | |
969 scrollbar_layer->Update(&queue, &occlusion_tracker); | 968 scrollbar_layer->Update(&queue, &occlusion_tracker); |
970 | 969 |
971 // Verify that we have not generated any content uploads that are larger | 970 // Verify that we have not generated any content uploads that are larger |
972 // than their destination textures. | 971 // than their destination textures. |
973 | 972 |
974 gfx::Size track_size = layer_tree_host_->ui_resource_size( | 973 gfx::Size track_size = layer_tree_host_->ui_resource_size( |
975 scrollbar_layer->track_resource_id()); | 974 scrollbar_layer->track_resource_id()); |
976 gfx::Size thumb_size = layer_tree_host_->ui_resource_size( | 975 gfx::Size thumb_size = layer_tree_host_->ui_resource_size( |
977 scrollbar_layer->thumb_resource_id()); | 976 scrollbar_layer->thumb_resource_id()); |
978 | 977 |
979 EXPECT_LE(track_size.width(), scrollbar_layer->content_bounds().width()); | 978 EXPECT_LE(track_size.width(), |
980 EXPECT_LE(track_size.height(), scrollbar_layer->content_bounds().height()); | 979 scrollbar_layer->internal_content_bounds().width()); |
981 EXPECT_LE(thumb_size.width(), scrollbar_layer->content_bounds().width()); | 980 EXPECT_LE(track_size.height(), |
982 EXPECT_LE(thumb_size.height(), scrollbar_layer->content_bounds().height()); | 981 scrollbar_layer->internal_content_bounds().height()); |
982 EXPECT_LE(thumb_size.width(), | |
983 scrollbar_layer->internal_content_bounds().width()); | |
984 EXPECT_LE(thumb_size.height(), | |
985 scrollbar_layer->internal_content_bounds().height()); | |
983 | 986 |
984 testing::Mock::VerifyAndClearExpectations(layer_tree_host_.get()); | 987 testing::Mock::VerifyAndClearExpectations(layer_tree_host_.get()); |
985 | 988 |
986 scrollbar_layer->ClearRenderSurface(); | 989 scrollbar_layer->ClearRenderSurface(); |
987 } | 990 } |
988 | |
989 protected: | |
990 FakeLayerTreeHostClient fake_client_; | |
991 LayerTreeSettings layer_tree_settings_; | |
992 scoped_ptr<FakeLayerTreeHost> layer_tree_host_; | |
993 }; | 991 }; |
994 | 992 |
995 TEST_F(ScaledScrollbarLayerTestResourceCreation, ScaledResourceUpload) { | 993 TEST_F(ScaledScrollbarLayerTestResourceCreation, ScaledResourceUpload) { |
996 // Pick a test scale that moves the scrollbar's (non-zero) position to | 994 // Pick a test scale that moves the scrollbar's (non-zero) position to |
997 // a non-pixel-aligned location. | 995 // a non-pixel-aligned location. |
998 TestResourceUpload(.041f); | 996 TestResourceUpload(.041f); |
999 TestResourceUpload(1.41f); | 997 TestResourceUpload(1.41f); |
1000 TestResourceUpload(4.1f); | 998 TestResourceUpload(4.1f); |
1001 } | 999 } |
1002 | 1000 |
1003 class ScaledScrollbarLayerTestScaledRasterization : public testing::Test { | 1001 class ScaledScrollbarLayerTestScaledRasterization |
1002 : public ScrollbarLayerResourceTest { | |
1004 public: | 1003 public: |
1005 ScaledScrollbarLayerTestScaledRasterization() | |
1006 : fake_client_(FakeLayerTreeHostClient::DIRECT_3D) {} | |
1007 | |
1008 void TestScale(const gfx::Rect scrollbar_rect, const float test_scale) { | 1004 void TestScale(const gfx::Rect scrollbar_rect, const float test_scale) { |
1009 layer_tree_host_.reset( | |
1010 new FakeLayerTreeHost(&fake_client_, layer_tree_settings_)); | |
1011 | |
1012 bool paint_during_update = true; | 1005 bool paint_during_update = true; |
1013 bool has_thumb = false; | 1006 bool has_thumb = false; |
1014 scoped_refptr<Layer> layer_tree_root = Layer::Create(); | 1007 scoped_refptr<Layer> layer_tree_root = Layer::Create(); |
1015 scoped_refptr<FakePaintedScrollbarLayer> scrollbar_layer = | 1008 scoped_refptr<FakePaintedScrollbarLayer> scrollbar_layer = |
1016 FakePaintedScrollbarLayer::Create(paint_during_update, | 1009 FakePaintedScrollbarLayer::Create(paint_during_update, |
1017 has_thumb, | 1010 has_thumb, |
1018 layer_tree_root->id()); | 1011 layer_tree_root->id()); |
1019 | 1012 |
1020 layer_tree_root->AddChild(scrollbar_layer); | 1013 layer_tree_root->AddChild(scrollbar_layer); |
1021 | 1014 |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1075 } | 1068 } |
1076 | 1069 |
1077 protected: | 1070 protected: |
1078 // On Android, Skia uses ABGR | 1071 // On Android, Skia uses ABGR |
1079 static SkColor argb_to_skia(SkColor c) { | 1072 static SkColor argb_to_skia(SkColor c) { |
1080 return (SkColorGetA(c) << SK_A32_SHIFT) | | 1073 return (SkColorGetA(c) << SK_A32_SHIFT) | |
1081 (SkColorGetR(c) << SK_R32_SHIFT) | | 1074 (SkColorGetR(c) << SK_R32_SHIFT) | |
1082 (SkColorGetG(c) << SK_G32_SHIFT) | | 1075 (SkColorGetG(c) << SK_G32_SHIFT) | |
1083 (SkColorGetB(c) << SK_B32_SHIFT); | 1076 (SkColorGetB(c) << SK_B32_SHIFT); |
1084 } | 1077 } |
1085 | |
1086 FakeLayerTreeHostClient fake_client_; | |
1087 LayerTreeSettings layer_tree_settings_; | |
1088 scoped_ptr<FakeLayerTreeHost> layer_tree_host_; | |
1089 }; | 1078 }; |
1090 | 1079 |
1091 TEST_F(ScaledScrollbarLayerTestScaledRasterization, TestLostPrecisionInClip) { | 1080 TEST_F(ScaledScrollbarLayerTestScaledRasterization, TestLostPrecisionInClip) { |
1092 // Try rasterization at coordinates and scale that caused problematic | 1081 // Try rasterization at coordinates and scale that caused problematic |
1093 // rounding and clipping errors. | 1082 // rounding and clipping errors. |
1094 // Vertical Scrollbars. | 1083 // Vertical Scrollbars. |
1095 TestScale(gfx::Rect(1240, 0, 15, 1333), 2.7754839f); | 1084 TestScale(gfx::Rect(1240, 0, 15, 1333), 2.7754839f); |
1096 TestScale(gfx::Rect(1240, 0, 15, 677), 2.46677136f); | 1085 TestScale(gfx::Rect(1240, 0, 15, 677), 2.46677136f); |
1097 | 1086 |
1098 // Horizontal Scrollbars. | 1087 // Horizontal Scrollbars. |
1099 TestScale(gfx::Rect(0, 1240, 1333, 15), 2.7754839f); | 1088 TestScale(gfx::Rect(0, 1240, 1333, 15), 2.7754839f); |
1100 TestScale(gfx::Rect(0, 1240, 677, 15), 2.46677136f); | 1089 TestScale(gfx::Rect(0, 1240, 677, 15), 2.46677136f); |
1101 } | 1090 } |
1102 | 1091 |
1103 } // namespace | 1092 } // namespace |
1104 } // namespace cc | 1093 } // namespace cc |
OLD | NEW |