OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <memory> | 5 #include <memory> |
6 #include <set> | 6 #include <set> |
7 #include <utility> | 7 #include <utility> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
309 RedirectData microsoft = CreateRedirectData("microsoft.com", 21); | 309 RedirectData microsoft = CreateRedirectData("microsoft.com", 21); |
310 InitializeRedirectStat(microsoft.add_redirect_endpoints(), "m.microsoft.com", | 310 InitializeRedirectStat(microsoft.add_redirect_endpoints(), "m.microsoft.com", |
311 5, 7, 1); | 311 5, 7, 1); |
312 InitializeRedirectStat(microsoft.add_redirect_endpoints(), "microsoft.org", 7, | 312 InitializeRedirectStat(microsoft.add_redirect_endpoints(), "microsoft.org", 7, |
313 2, 0); | 313 2, 0); |
314 | 314 |
315 tables_->UpdateRedirectData(microsoft, PREFETCH_KEY_TYPE_HOST); | 315 tables_->UpdateRedirectData(microsoft, PREFETCH_KEY_TYPE_HOST); |
316 | 316 |
317 precache::PrecacheManifest theverge; | 317 precache::PrecacheManifest theverge; |
318 InitializePrecacheResource(theverge.add_resource(), | 318 InitializePrecacheResource(theverge.add_resource(), |
319 "https://www.theverge.com/main.js", 0.7); | 319 "https://www.theverge.com/main.js", 0.7, |
| 320 precache::PrecacheResource::RESOURCE_TYPE_SCRIPT); |
320 | 321 |
321 tables_->UpdateManifestData("theverge.com", theverge); | 322 tables_->UpdateManifestData("theverge.com", theverge); |
322 | 323 |
323 OriginData twitter = CreateOriginData("twitter.com"); | 324 OriginData twitter = CreateOriginData("twitter.com"); |
324 InitializeOriginStat(twitter.add_origins(), "https://dogs.twitter.com", 10, 1, | 325 InitializeOriginStat(twitter.add_origins(), "https://dogs.twitter.com", 10, 1, |
325 0, 12., false, true); | 326 0, 12., false, true); |
326 tables_->UpdateOriginData(twitter); | 327 tables_->UpdateOriginData(twitter); |
327 | 328 |
328 PrefetchDataMap actual_url_data, actual_host_data; | 329 PrefetchDataMap actual_url_data, actual_host_data; |
329 RedirectDataMap actual_url_redirect_data, actual_host_redirect_data; | 330 RedirectDataMap actual_url_redirect_data, actual_host_redirect_data; |
(...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
718 test_host_redirect_data_.insert(std::make_pair(bbc.primary_key(), bbc)); | 719 test_host_redirect_data_.insert(std::make_pair(bbc.primary_key(), bbc)); |
719 test_host_redirect_data_.insert( | 720 test_host_redirect_data_.insert( |
720 std::make_pair(microsoft.primary_key(), microsoft)); | 721 std::make_pair(microsoft.primary_key(), microsoft)); |
721 | 722 |
722 tables_->UpdateRedirectData(bbc, PREFETCH_KEY_TYPE_HOST); | 723 tables_->UpdateRedirectData(bbc, PREFETCH_KEY_TYPE_HOST); |
723 tables_->UpdateRedirectData(microsoft, PREFETCH_KEY_TYPE_HOST); | 724 tables_->UpdateRedirectData(microsoft, PREFETCH_KEY_TYPE_HOST); |
724 } | 725 } |
725 | 726 |
726 { // Manifest data. | 727 { // Manifest data. |
727 precache::PrecacheManifest wikipedia; | 728 precache::PrecacheManifest wikipedia; |
| 729 InitializePrecacheResource( |
| 730 wikipedia.add_resource(), "https://en.wikipedia.org/script.js", 0.7, |
| 731 precache::PrecacheResource::RESOURCE_TYPE_SCRIPT); |
728 InitializePrecacheResource(wikipedia.add_resource(), | 732 InitializePrecacheResource(wikipedia.add_resource(), |
729 "https://en.wikipedia.org/script.js", 0.7); | 733 "https://en.wikipedia.org/image.png", 0.3, |
730 InitializePrecacheResource(wikipedia.add_resource(), | 734 precache::PrecacheResource::RESOURCE_TYPE_IMAGE); |
731 "https://en.wikipedia.org/image.png", 0.3); | |
732 | 735 |
733 precache::PrecacheManifest youtube; | 736 precache::PrecacheManifest youtube; |
734 InitializePrecacheResource(youtube.add_resource(), | 737 InitializePrecacheResource(youtube.add_resource(), |
735 "https://youtube.com/photo.jpg", 0.5); | 738 "https://youtube.com/photo.jpg", 0.5, |
736 InitializePrecacheResource(youtube.add_resource(), | 739 precache::PrecacheResource::RESOURCE_TYPE_IMAGE); |
737 "https://youtube.com/base.js", 0.2); | 740 InitializePrecacheResource( |
| 741 youtube.add_resource(), "https://youtube.com/base.js", 0.2, |
| 742 precache::PrecacheResource::RESOURCE_TYPE_SCRIPT); |
738 | 743 |
739 test_manifest_data_.clear(); | 744 test_manifest_data_.clear(); |
740 test_manifest_data_.insert(std::make_pair("en.wikipedia.org", wikipedia)); | 745 test_manifest_data_.insert(std::make_pair("en.wikipedia.org", wikipedia)); |
741 test_manifest_data_.insert(std::make_pair("youtube.com", youtube)); | 746 test_manifest_data_.insert(std::make_pair("youtube.com", youtube)); |
742 tables_->UpdateManifestData("en.wikipedia.org", wikipedia); | 747 tables_->UpdateManifestData("en.wikipedia.org", wikipedia); |
743 tables_->UpdateManifestData("youtube.com", youtube); | 748 tables_->UpdateManifestData("youtube.com", youtube); |
744 } | 749 } |
745 | 750 |
746 { // Origin data. | 751 { // Origin data. |
747 OriginData twitter; | 752 OriginData twitter; |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
790 | 795 |
791 EXPECT_GT(compute_score(net::HIGHEST, content::RESOURCE_TYPE_IMAGE, 42.), | 796 EXPECT_GT(compute_score(net::HIGHEST, content::RESOURCE_TYPE_IMAGE, 42.), |
792 compute_score(net::MEDIUM, content::RESOURCE_TYPE_SCRIPT, 1.)); | 797 compute_score(net::MEDIUM, content::RESOURCE_TYPE_SCRIPT, 1.)); |
793 EXPECT_GT(compute_score(net::HIGHEST, content::RESOURCE_TYPE_IMAGE, 42.), | 798 EXPECT_GT(compute_score(net::HIGHEST, content::RESOURCE_TYPE_IMAGE, 42.), |
794 compute_score(net::LOW, content::RESOURCE_TYPE_SCRIPT, 1.)); | 799 compute_score(net::LOW, content::RESOURCE_TYPE_SCRIPT, 1.)); |
795 EXPECT_GT(compute_score(net::HIGHEST, content::RESOURCE_TYPE_IMAGE, 42.), | 800 EXPECT_GT(compute_score(net::HIGHEST, content::RESOURCE_TYPE_IMAGE, 42.), |
796 compute_score(net::LOWEST, content::RESOURCE_TYPE_SCRIPT, 1.)); | 801 compute_score(net::LOWEST, content::RESOURCE_TYPE_SCRIPT, 1.)); |
797 EXPECT_GT(compute_score(net::HIGHEST, content::RESOURCE_TYPE_IMAGE, 42.), | 802 EXPECT_GT(compute_score(net::HIGHEST, content::RESOURCE_TYPE_IMAGE, 42.), |
798 compute_score(net::IDLE, content::RESOURCE_TYPE_SCRIPT, 1.)); | 803 compute_score(net::IDLE, content::RESOURCE_TYPE_SCRIPT, 1.)); |
799 | 804 |
800 // Scripts and stylesheets are equivalent. | 805 // Stylesheets are are more important than scripts, fonts and images, and the |
801 EXPECT_NEAR( | 806 // rest. |
802 compute_score(net::HIGHEST, content::RESOURCE_TYPE_SCRIPT, 42.), | 807 EXPECT_GT(compute_score(net::HIGHEST, content::RESOURCE_TYPE_STYLESHEET, 42.), |
803 compute_score(net::HIGHEST, content::RESOURCE_TYPE_STYLESHEET, 42.), | 808 compute_score(net::HIGHEST, content::RESOURCE_TYPE_SCRIPT, 42.)); |
804 1e-4); | |
805 | |
806 // Scripts are more important than fonts and images, and the rest. | |
807 EXPECT_GT( | 809 EXPECT_GT( |
808 compute_score(net::HIGHEST, content::RESOURCE_TYPE_SCRIPT, 42.), | 810 compute_score(net::HIGHEST, content::RESOURCE_TYPE_SCRIPT, 42.), |
809 compute_score(net::HIGHEST, content::RESOURCE_TYPE_FONT_RESOURCE, 42.)); | 811 compute_score(net::HIGHEST, content::RESOURCE_TYPE_FONT_RESOURCE, 42.)); |
810 EXPECT_GT( | 812 EXPECT_GT( |
811 compute_score(net::HIGHEST, content::RESOURCE_TYPE_FONT_RESOURCE, 42.), | 813 compute_score(net::HIGHEST, content::RESOURCE_TYPE_FONT_RESOURCE, 42.), |
812 compute_score(net::HIGHEST, content::RESOURCE_TYPE_IMAGE, 42.)); | 814 compute_score(net::HIGHEST, content::RESOURCE_TYPE_IMAGE, 42.)); |
813 EXPECT_GT( | 815 EXPECT_GT( |
814 compute_score(net::HIGHEST, content::RESOURCE_TYPE_FONT_RESOURCE, 42.), | 816 compute_score(net::HIGHEST, content::RESOURCE_TYPE_FONT_RESOURCE, 42.), |
815 compute_score(net::HIGHEST, content::RESOURCE_TYPE_FAVICON, 42.)); | 817 compute_score(net::HIGHEST, content::RESOURCE_TYPE_FAVICON, 42.)); |
816 | 818 |
817 // All else being equal, position matters. | 819 // All else being equal, position matters. |
818 EXPECT_GT(compute_score(net::HIGHEST, content::RESOURCE_TYPE_SCRIPT, 12.), | 820 EXPECT_GT(compute_score(net::HIGHEST, content::RESOURCE_TYPE_SCRIPT, 12.), |
819 compute_score(net::HIGHEST, content::RESOURCE_TYPE_SCRIPT, 42.)); | 821 compute_score(net::HIGHEST, content::RESOURCE_TYPE_SCRIPT, 42.)); |
820 } | 822 } |
821 | 823 |
| 824 TEST_F(ResourcePrefetchPredictorTablesTest, ComputePrecacheResourceScore) { |
| 825 auto compute_score = [](precache::PrecacheResource::Type resource_type, |
| 826 float weight_ratio) { |
| 827 precache::PrecacheResource resource; |
| 828 InitializePrecacheResource(&resource, "", weight_ratio, resource_type); |
| 829 return ResourcePrefetchPredictorTables::ComputePrecacheResourceScore( |
| 830 resource); |
| 831 }; |
| 832 |
| 833 // Stylesheets are the most impotant followed by scripts, fonts and images in |
| 834 // this order. |
| 835 EXPECT_GT( |
| 836 compute_score(precache::PrecacheResource::RESOURCE_TYPE_STYLESHEET, 0.1), |
| 837 compute_score(precache::PrecacheResource::RESOURCE_TYPE_SCRIPT, 0.9)); |
| 838 EXPECT_GT( |
| 839 compute_score(precache::PrecacheResource::RESOURCE_TYPE_SCRIPT, 0.1), |
| 840 compute_score(precache::PrecacheResource::RESOURCE_TYPE_FONT, 0.9)); |
| 841 EXPECT_GT( |
| 842 compute_score(precache::PrecacheResource::RESOURCE_TYPE_FONT, 0.1), |
| 843 compute_score(precache::PrecacheResource::RESOURCE_TYPE_IMAGE, 0.9)); |
| 844 |
| 845 // If resource types are equal, weight ratio matters. |
| 846 EXPECT_GT( |
| 847 compute_score(precache::PrecacheResource::RESOURCE_TYPE_SCRIPT, 0.7), |
| 848 compute_score(precache::PrecacheResource::RESOURCE_TYPE_SCRIPT, 0.6)); |
| 849 } |
| 850 |
822 TEST_F(ResourcePrefetchPredictorTablesTest, ComputeOriginScore) { | 851 TEST_F(ResourcePrefetchPredictorTablesTest, ComputeOriginScore) { |
823 auto compute_score = [](int hits, int misses, double average_position, | 852 auto compute_score = [](int hits, int misses, double average_position, |
824 bool always_access_network, bool accessed_network) { | 853 bool always_access_network, bool accessed_network) { |
825 OriginStat origin; | 854 OriginStat origin; |
826 InitializeOriginStat(&origin, "", hits, misses, 0, average_position, | 855 InitializeOriginStat(&origin, "", hits, misses, 0, average_position, |
827 always_access_network, accessed_network); | 856 always_access_network, accessed_network); |
828 return ResourcePrefetchPredictorTables::ComputeOriginScore(origin); | 857 return ResourcePrefetchPredictorTables::ComputeOriginScore(origin); |
829 }; | 858 }; |
830 | 859 |
831 // High-confidence is more important than the rest. | 860 // High-confidence is more important than the rest. |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
926 | 955 |
927 TEST_F(ResourcePrefetchPredictorTablesReopenTest, DeleteSingleDataPoint) { | 956 TEST_F(ResourcePrefetchPredictorTablesReopenTest, DeleteSingleDataPoint) { |
928 TestDeleteSingleDataPoint(); | 957 TestDeleteSingleDataPoint(); |
929 } | 958 } |
930 | 959 |
931 TEST_F(ResourcePrefetchPredictorTablesReopenTest, DeleteAllData) { | 960 TEST_F(ResourcePrefetchPredictorTablesReopenTest, DeleteAllData) { |
932 TestDeleteAllData(); | 961 TestDeleteAllData(); |
933 } | 962 } |
934 | 963 |
935 } // namespace predictors | 964 } // namespace predictors |
OLD | NEW |