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

Side by Side Diff: chrome/browser/net/predictor.cc

Issue 1062413002: Remove unnecessary instrumentation for several jank bugs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Compile fixes Created 5 years, 8 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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 "chrome/browser/net/predictor.h" 5 #include "chrome/browser/net/predictor.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 #include <set> 9 #include <set>
10 #include <sstream> 10 #include <sstream>
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 return resolver_.Resolve( 118 return resolver_.Resolve(
119 resolve_info, 119 resolve_info,
120 net::DEFAULT_PRIORITY, 120 net::DEFAULT_PRIORITY,
121 &addresses_, 121 &addresses_,
122 base::Bind(&LookupRequest::OnLookupFinished, base::Unretained(this)), 122 base::Bind(&LookupRequest::OnLookupFinished, base::Unretained(this)),
123 net::BoundNetLog()); 123 net::BoundNetLog());
124 } 124 }
125 125
126 private: 126 private:
127 void OnLookupFinished(int result) { 127 void OnLookupFinished(int result) {
128 // TODO(vadimt): Remove ScopedTracker below once crbug.com/436634 is fixed.
129 tracked_objects::ScopedTracker tracking_profile(
130 FROM_HERE_WITH_EXPLICIT_FUNCTION(
131 "436634 Predictor::LookupRequest::OnLookupFinished"));
132
133 predictor_->OnLookupFinished(this, url_, result == net::OK); 128 predictor_->OnLookupFinished(this, url_, result == net::OK);
134 } 129 }
135 130
136 Predictor* predictor_; // The predictor which started us. 131 Predictor* predictor_; // The predictor which started us.
137 132
138 const GURL url_; // Hostname to resolve. 133 const GURL url_; // Hostname to resolve.
139 net::SingleRequestHostResolver resolver_; 134 net::SingleRequestHostResolver resolver_;
140 net::AddressList addresses_; 135 net::AddressList addresses_;
141 136
142 DISALLOW_COPY_AND_ASSIGN(LookupRequest); 137 DISALLOW_COPY_AND_ASSIGN(LookupRequest);
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after
436 // Put back in the names being worked on. 431 // Put back in the names being worked on.
437 for (Results::iterator it = assignees.begin(); assignees.end() != it; ++it) { 432 for (Results::iterator it = assignees.begin(); assignees.end() != it; ++it) {
438 DCHECK(it->second.is_marked_to_delete()); 433 DCHECK(it->second.is_marked_to_delete());
439 results_[it->first] = it->second; 434 results_[it->first] = it->second;
440 } 435 }
441 } 436 }
442 437
443 // Overloaded Resolve() to take a vector of names. 438 // Overloaded Resolve() to take a vector of names.
444 void Predictor::ResolveList(const UrlList& urls, 439 void Predictor::ResolveList(const UrlList& urls,
445 UrlInfo::ResolutionMotivation motivation) { 440 UrlInfo::ResolutionMotivation motivation) {
446 // TODO(vadimt): Remove ScopedTracker below once crbug.com/436671 is fixed.
447 tracked_objects::ScopedTracker tracking_profile(
448 FROM_HERE_WITH_EXPLICIT_FUNCTION("436671 Predictor::ResolveList"));
449
450 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 441 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
451 442
452 for (UrlList::const_iterator it = urls.begin(); it < urls.end(); ++it) { 443 for (UrlList::const_iterator it = urls.begin(); it < urls.end(); ++it) {
453 AppendToResolutionQueue(*it, motivation); 444 AppendToResolutionQueue(*it, motivation);
454 } 445 }
455 } 446 }
456 447
457 // Basic Resolve() takes an invidual name, and adds it 448 // Basic Resolve() takes an invidual name, and adds it
458 // to the queue. 449 // to the queue.
459 void Predictor::Resolve(const GURL& url, 450 void Predictor::Resolve(const GURL& url,
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
682 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 673 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
683 if (initial_observer_.get()) 674 if (initial_observer_.get())
684 initial_observer_->DiscardInitialNavigationHistory(); 675 initial_observer_->DiscardInitialNavigationHistory();
685 } 676 }
686 677
687 void Predictor::FinalizeInitializationOnIOThread( 678 void Predictor::FinalizeInitializationOnIOThread(
688 const UrlList& startup_urls, 679 const UrlList& startup_urls,
689 base::ListValue* referral_list, 680 base::ListValue* referral_list,
690 IOThread* io_thread, 681 IOThread* io_thread,
691 ProfileIOData* profile_io_data) { 682 ProfileIOData* profile_io_data) {
692 // TODO(vadimt): Remove ScopedTracker below once crbug.com/436671 is fixed.
693 tracked_objects::ScopedTracker tracking_profile1(
694 FROM_HERE_WITH_EXPLICIT_FUNCTION(
695 "436671 Predictor::FinalizeInitializationOnIOThread1"));
696
697 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 683 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
698 684
699 profile_io_data_ = profile_io_data; 685 profile_io_data_ = profile_io_data;
700 initial_observer_.reset(new InitialObserver()); 686 initial_observer_.reset(new InitialObserver());
701 host_resolver_ = io_thread->globals()->host_resolver.get(); 687 host_resolver_ = io_thread->globals()->host_resolver.get();
702 688
703 // TODO(vadimt): Remove ScopedTracker below once crbug.com/436671 is fixed.
704 tracked_objects::ScopedTracker tracking_profile2(
705 FROM_HERE_WITH_EXPLICIT_FUNCTION(
706 "436671 Predictor::FinalizeInitializationOnIOThread2"));
707
708 net::URLRequestContext* context = 689 net::URLRequestContext* context =
709 url_request_context_getter_->GetURLRequestContext(); 690 url_request_context_getter_->GetURLRequestContext();
710 transport_security_state_ = context->transport_security_state(); 691 transport_security_state_ = context->transport_security_state();
711 ssl_config_service_ = context->ssl_config_service(); 692 ssl_config_service_ = context->ssl_config_service();
712 proxy_service_ = context->proxy_service(); 693 proxy_service_ = context->proxy_service();
713 694
714 // TODO(vadimt): Remove ScopedTracker below once crbug.com/436671 is fixed.
715 tracked_objects::ScopedTracker tracking_profile3(
716 FROM_HERE_WITH_EXPLICIT_FUNCTION(
717 "436671 Predictor::FinalizeInitializationOnIOThread3"));
718
719 // base::WeakPtrFactory instances need to be created and destroyed 695 // base::WeakPtrFactory instances need to be created and destroyed
720 // on the same thread. The predictor lives on the IO thread and will die 696 // on the same thread. The predictor lives on the IO thread and will die
721 // from there so now that we're on the IO thread we need to properly 697 // from there so now that we're on the IO thread we need to properly
722 // initialize the base::WeakPtrFactory. 698 // initialize the base::WeakPtrFactory.
723 // TODO(groby): Check if WeakPtrFactory has the same constraint. 699 // TODO(groby): Check if WeakPtrFactory has the same constraint.
724 weak_factory_.reset(new base::WeakPtrFactory<Predictor>(this)); 700 weak_factory_.reset(new base::WeakPtrFactory<Predictor>(this));
725 701
726 // TODO(vadimt): Remove ScopedTracker below once crbug.com/436671 is fixed.
727 tracked_objects::ScopedTracker tracking_profile4(
728 FROM_HERE_WITH_EXPLICIT_FUNCTION(
729 "436671 Predictor::FinalizeInitializationOnIOThread4"));
730
731 // Prefetch these hostnames on startup. 702 // Prefetch these hostnames on startup.
732 DnsPrefetchMotivatedList(startup_urls, UrlInfo::STARTUP_LIST_MOTIVATED); 703 DnsPrefetchMotivatedList(startup_urls, UrlInfo::STARTUP_LIST_MOTIVATED);
733 704
734 // TODO(vadimt): Remove ScopedTracker below once crbug.com/436671 is fixed.
735 tracked_objects::ScopedTracker tracking_profile5(
736 FROM_HERE_WITH_EXPLICIT_FUNCTION(
737 "436671 Predictor::FinalizeInitializationOnIOThread5"));
738
739 DeserializeReferrersThenDelete(referral_list); 705 DeserializeReferrersThenDelete(referral_list);
740 } 706 }
741 707
742 //----------------------------------------------------------------------------- 708 //-----------------------------------------------------------------------------
743 // This section intermingles prefetch results with actual browser HTTP 709 // This section intermingles prefetch results with actual browser HTTP
744 // network activity. It supports calculating of the benefit of a prefetch, as 710 // network activity. It supports calculating of the benefit of a prefetch, as
745 // well as recording what prefetched hostname resolutions might be potentially 711 // well as recording what prefetched hostname resolutions might be potentially
746 // helpful during the next chrome-startup. 712 // helpful during the next chrome-startup.
747 //----------------------------------------------------------------------------- 713 //-----------------------------------------------------------------------------
748 714
(...skipping 20 matching lines...) Expand all
769 urls.push_back(GURL("http://" + *it + ":80")); 735 urls.push_back(GURL("http://" + *it + ":80"));
770 } 736 }
771 737
772 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 738 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
773 DnsPrefetchMotivatedList(urls, UrlInfo::PAGE_SCAN_MOTIVATED); 739 DnsPrefetchMotivatedList(urls, UrlInfo::PAGE_SCAN_MOTIVATED);
774 } 740 }
775 741
776 void Predictor::DnsPrefetchMotivatedList( 742 void Predictor::DnsPrefetchMotivatedList(
777 const UrlList& urls, 743 const UrlList& urls,
778 UrlInfo::ResolutionMotivation motivation) { 744 UrlInfo::ResolutionMotivation motivation) {
779 // TODO(vadimt): Remove ScopedTracker below once crbug.com/436671 is fixed.
780 tracked_objects::ScopedTracker tracking_profile(
781 FROM_HERE_WITH_EXPLICIT_FUNCTION(
782 "436671 Predictor::DnsPrefetchMotivatedList"));
783
784 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI) || 745 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI) ||
785 BrowserThread::CurrentlyOn(BrowserThread::IO)); 746 BrowserThread::CurrentlyOn(BrowserThread::IO));
786 if (!predictor_enabled_) 747 if (!predictor_enabled_)
787 return; 748 return;
788 if (!CanPreresolveAndPreconnect()) 749 if (!CanPreresolveAndPreconnect())
789 return; 750 return;
790 751
791 if (BrowserThread::CurrentlyOn(BrowserThread::IO)) { 752 if (BrowserThread::CurrentlyOn(BrowserThread::IO)) {
792 ResolveList(urls, motivation); 753 ResolveList(urls, motivation);
793 } else { 754 } else {
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
1052 net::ProxyInfo info; 1013 net::ProxyInfo info;
1053 bool synchronous_success = proxy_service_->TryResolveProxySynchronously( 1014 bool synchronous_success = proxy_service_->TryResolveProxySynchronously(
1054 url, net::LOAD_NORMAL, &info, NULL, net::BoundNetLog()); 1015 url, net::LOAD_NORMAL, &info, NULL, net::BoundNetLog());
1055 1016
1056 return synchronous_success && !info.is_direct(); 1017 return synchronous_success && !info.is_direct();
1057 } 1018 }
1058 1019
1059 UrlInfo* Predictor::AppendToResolutionQueue( 1020 UrlInfo* Predictor::AppendToResolutionQueue(
1060 const GURL& url, 1021 const GURL& url,
1061 UrlInfo::ResolutionMotivation motivation) { 1022 UrlInfo::ResolutionMotivation motivation) {
1062 // TODO(vadimt): Remove ScopedTracker below once crbug.com/436671 is fixed.
1063 tracked_objects::ScopedTracker tracking_profile1(
1064 FROM_HERE_WITH_EXPLICIT_FUNCTION(
1065 "436671 Predictor::AppendToResolutionQueue1"));
1066
1067 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 1023 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
1068 DCHECK(url.has_host()); 1024 DCHECK(url.has_host());
1069 1025
1070 if (shutdown_) 1026 if (shutdown_)
1071 return NULL; 1027 return NULL;
1072 1028
1073 UrlInfo* info = &results_[url]; 1029 UrlInfo* info = &results_[url];
1074 info->SetUrl(url); // Initialize or DCHECK. 1030 info->SetUrl(url); // Initialize or DCHECK.
1075 // TODO(jar): I need to discard names that have long since expired. 1031 // TODO(jar): I need to discard names that have long since expired.
1076 // Currently we only add to the domain map :-/ 1032 // Currently we only add to the domain map :-/
1077 1033
1078 DCHECK(info->HasUrl(url)); 1034 DCHECK(info->HasUrl(url));
1079 1035
1080 if (!info->NeedsDnsUpdate()) { 1036 if (!info->NeedsDnsUpdate()) {
1081 info->DLogResultsStats("DNS PrefetchNotUpdated"); 1037 info->DLogResultsStats("DNS PrefetchNotUpdated");
1082 return NULL; 1038 return NULL;
1083 } 1039 }
1084 1040
1085 // TODO(vadimt): Remove ScopedTracker below once crbug.com/436671 is fixed. 1041 bool would_likely_proxy;
1086 tracked_objects::ScopedTracker tracking_profile2( 1042 {
1087 FROM_HERE_WITH_EXPLICIT_FUNCTION( 1043 // TODO(ttuttle): Remove ScopedTracker below once crbug.com/436671 is fixed.
1088 "436671 Predictor::AppendToResolutionQueue2")); 1044 tracked_objects::ScopedTracker tracking_profile(
1045 FROM_HERE_WITH_EXPLICIT_FUNCTION("436671 WouldLikelyProxyURL()"));
1046 would_likely_proxy = WouldLikelyProxyURL(url);
1047 }
1089 1048
1090 if (WouldLikelyProxyURL(url)) { 1049 if (would_likely_proxy) {
1091 info->DLogResultsStats("DNS PrefetchForProxiedRequest"); 1050 info->DLogResultsStats("DNS PrefetchForProxiedRequest");
1092 return NULL; 1051 return NULL;
1093 } 1052 }
1094 1053
1095 // TODO(vadimt): Remove ScopedTracker below once crbug.com/436671 is fixed.
1096 tracked_objects::ScopedTracker tracking_profile3(
1097 FROM_HERE_WITH_EXPLICIT_FUNCTION(
1098 "436671 Predictor::AppendToResolutionQueue3"));
1099
1100 info->SetQueuedState(motivation); 1054 info->SetQueuedState(motivation);
1101 work_queue_.Push(url, motivation); 1055 work_queue_.Push(url, motivation);
1102 1056
1103 // TODO(vadimt): Remove ScopedTracker below once crbug.com/436671 is fixed.
1104 tracked_objects::ScopedTracker tracking_profile4(
1105 FROM_HERE_WITH_EXPLICIT_FUNCTION(
1106 "436671 Predictor::AppendToResolutionQueue4"));
1107
1108 StartSomeQueuedResolutions(); 1057 StartSomeQueuedResolutions();
1109 return info; 1058 return info;
1110 } 1059 }
1111 1060
1112 bool Predictor::CongestionControlPerformed(UrlInfo* info) { 1061 bool Predictor::CongestionControlPerformed(UrlInfo* info) {
1113 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 1062 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
1114 // Note: queue_duration is ONLY valid after we go to assigned state. 1063 // Note: queue_duration is ONLY valid after we go to assigned state.
1115 if (info->queue_duration() < max_dns_queue_delay_) 1064 if (info->queue_duration() < max_dns_queue_delay_)
1116 return false; 1065 return false;
1117 // We need to discard all entries in our queue, as we're keeping them waiting 1066 // We need to discard all entries in our queue, as we're keeping them waiting
1118 // too long. By doing this, we'll have a chance to quickly service urgent 1067 // too long. By doing this, we'll have a chance to quickly service urgent
1119 // resolutions, and not have a bogged down system. 1068 // resolutions, and not have a bogged down system.
1120 while (true) { 1069 while (true) {
1121 info->RemoveFromQueue(); 1070 info->RemoveFromQueue();
1122 if (work_queue_.IsEmpty()) 1071 if (work_queue_.IsEmpty())
1123 break; 1072 break;
1124 info = &results_[work_queue_.Pop()]; 1073 info = &results_[work_queue_.Pop()];
1125 info->SetAssignedState(); 1074 info->SetAssignedState();
1126 } 1075 }
1127 return true; 1076 return true;
1128 } 1077 }
1129 1078
1130 void Predictor::StartSomeQueuedResolutions() { 1079 void Predictor::StartSomeQueuedResolutions() {
1131 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 1080 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
1132 1081
1133 while (!work_queue_.IsEmpty() && 1082 while (!work_queue_.IsEmpty() &&
1134 pending_lookups_.size() < max_concurrent_dns_lookups_) { 1083 pending_lookups_.size() < max_concurrent_dns_lookups_) {
1135 // TODO(vadimt): Remove ScopedTracker below once crbug.com/436671 is fixed.
1136 tracked_objects::ScopedTracker tracking_profile1(
1137 FROM_HERE_WITH_EXPLICIT_FUNCTION(
1138 "436671 Predictor::StartSomeQueuedResolutions1"));
1139
1140 const GURL url(work_queue_.Pop()); 1084 const GURL url(work_queue_.Pop());
1141 UrlInfo* info = &results_[url]; 1085 UrlInfo* info = &results_[url];
1142 DCHECK(info->HasUrl(url)); 1086 DCHECK(info->HasUrl(url));
1143 info->SetAssignedState(); 1087 info->SetAssignedState();
1144 1088
1145 if (CongestionControlPerformed(info)) { 1089 if (CongestionControlPerformed(info)) {
1146 DCHECK(work_queue_.IsEmpty()); 1090 DCHECK(work_queue_.IsEmpty());
1147 return; 1091 return;
1148 } 1092 }
1149 1093
1150 LookupRequest* request = new LookupRequest(this, host_resolver_, url); 1094 LookupRequest* request = new LookupRequest(this, host_resolver_, url);
1151 1095
1152 // TODO(vadimt): Remove ScopedTracker below once crbug.com/436671 is fixed. 1096 int status;
1153 tracked_objects::ScopedTracker tracking_profile2( 1097 {
1154 FROM_HERE_WITH_EXPLICIT_FUNCTION( 1098 // TODO(ttuttle): Remove ScopedTracker below once crbug.com/436671 is
1155 "436671 Predictor::StartSomeQueuedResolutions2")); 1099 // fixed.
1156 1100 tracked_objects::ScopedTracker tracking_profile(
1157 int status = request->Start(); 1101 FROM_HERE_WITH_EXPLICIT_FUNCTION("436671 LookupRequest::Start()"));
1158 1102 status = request->Start();
1159 // TODO(vadimt): Remove ScopedTracker below once crbug.com/436671 is fixed. 1103 }
1160 tracked_objects::ScopedTracker tracking_profile3(
1161 FROM_HERE_WITH_EXPLICIT_FUNCTION(
1162 "436671 Predictor::StartSomeQueuedResolutions3"));
1163 1104
1164 if (status == net::ERR_IO_PENDING) { 1105 if (status == net::ERR_IO_PENDING) {
1165 // Will complete asynchronously. 1106 // Will complete asynchronously.
1166 pending_lookups_.insert(request); 1107 pending_lookups_.insert(request);
1167 peak_pending_lookups_ = std::max(peak_pending_lookups_, 1108 peak_pending_lookups_ = std::max(peak_pending_lookups_,
1168 pending_lookups_.size()); 1109 pending_lookups_.size());
1169 } else { 1110 } else {
1170 // Completed synchronously (was already cached by HostResolver), or else 1111 // Completed synchronously (was already cached by HostResolver), or else
1171 // there was (equivalently) some network error that prevents us from 1112 // there was (equivalently) some network error that prevents us from
1172 // finding the name. Status net::OK means it was "found." 1113 // finding the name. Status net::OK means it was "found."
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
1378 } 1319 }
1379 1320
1380 void SimplePredictor::ShutdownOnUIThread() { 1321 void SimplePredictor::ShutdownOnUIThread() {
1381 SetShutdown(true); 1322 SetShutdown(true);
1382 } 1323 }
1383 1324
1384 bool SimplePredictor::CanPrefetchAndPrerender() const { return true; } 1325 bool SimplePredictor::CanPrefetchAndPrerender() const { return true; }
1385 bool SimplePredictor::CanPreresolveAndPreconnect() const { return true; } 1326 bool SimplePredictor::CanPreresolveAndPreconnect() const { return true; }
1386 1327
1387 } // namespace chrome_browser_net 1328 } // namespace chrome_browser_net
OLDNEW
« no previous file with comments | « chrome/browser/net/chrome_url_request_context_getter.cc ('k') | chrome/browser/profiles/off_the_record_profile_io_data.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698