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

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

Issue 118239: Fix purify freeze. Revert "Use a priority queue to assure that subresources are resolved asap" (Closed)
Patch Set: Created 11 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
« no previous file with comments | « chrome/browser/net/dns_host_info.h ('k') | chrome/browser/net/dns_host_info_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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 // See header file for description of class 5 // See header file for description of class
6 6
7 #include "chrome/browser/net/dns_host_info.h" 7 #include "chrome/browser/net/dns_host_info.h"
8 8
9 #include <math.h> 9 #include <math.h>
10 10
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 const TimeDelta DnsHostInfo::kMaxNonNetworkDnsLookupDuration( 70 const TimeDelta DnsHostInfo::kMaxNonNetworkDnsLookupDuration(
71 TimeDelta::FromMilliseconds(15)); 71 TimeDelta::FromMilliseconds(15));
72 72
73 // Used by test ONLY. The value is otherwise constant. 73 // Used by test ONLY. The value is otherwise constant.
74 void DnsHostInfo::set_cache_expiration(TimeDelta time) { 74 void DnsHostInfo::set_cache_expiration(TimeDelta time) {
75 kCacheExpirationDuration = time; 75 kCacheExpirationDuration = time;
76 } 76 }
77 77
78 void DnsHostInfo::SetQueuedState(ResolutionMotivation motivation) { 78 void DnsHostInfo::SetQueuedState(ResolutionMotivation motivation) {
79 DCHECK(PENDING == state_ || FOUND == state_ || NO_SUCH_NAME == state_); 79 DCHECK(PENDING == state_ || FOUND == state_ || NO_SUCH_NAME == state_);
80 old_prequeue_state_ = state_;
81 state_ = QUEUED; 80 state_ = QUEUED;
82 queue_duration_ = resolve_duration_ = kNullDuration; 81 queue_duration_ = resolve_duration_ = kNullDuration;
83 SetMotivation(motivation); 82 SetMotivation(motivation);
84 GetDuration(); // Set time_ 83 GetDuration(); // Set time_
85 DLogResultsStats("DNS Prefetch in queue"); 84 DLogResultsStats("DNS Prefetch in queue");
86 } 85 }
87 86
88 void DnsHostInfo::SetAssignedState() { 87 void DnsHostInfo::SetAssignedState() {
89 DCHECK(QUEUED == state_); 88 DCHECK(QUEUED == state_);
90 state_ = ASSIGNED; 89 state_ = ASSIGNED;
91 queue_duration_ = GetDuration(); 90 queue_duration_ = GetDuration();
92 DLogResultsStats("DNS Prefetch assigned"); 91 DLogResultsStats("DNS Prefetch assigned");
93 UMA_HISTOGRAM_TIMES("DNS.PrefetchQueue", queue_duration_); 92 UMA_HISTOGRAM_TIMES("DNS.PrefetchQueue", queue_duration_);
94 } 93 }
95 94
96 void DnsHostInfo::RemoveFromQueue() {
97 DCHECK(ASSIGNED == state_);
98 state_ = old_prequeue_state_;
99 DLogResultsStats("DNS Prefetch reset to prequeue");
100 static const TimeDelta kBoundary = TimeDelta::FromSeconds(2);
101 if (queue_duration_ > kBoundary) {
102 UMA_HISTOGRAM_MEDIUM_TIMES("DNS.QueueRecycledDeltaOver2",
103 queue_duration_ - kBoundary);
104 return;
105 }
106 // Make a custom linear histogram for the region from 0 to boundary.
107 const size_t kBucketCount = 52;
108 static LinearHistogram histogram("DNS.QueueRecycledUnder2", TimeDelta(),
109 kBoundary, kBucketCount);
110 histogram.SetFlags(kUmaTargetedHistogramFlag);
111 histogram.AddTime(queue_duration_);
112 }
113
114 void DnsHostInfo::SetPendingDeleteState() { 95 void DnsHostInfo::SetPendingDeleteState() {
115 DCHECK(ASSIGNED == state_ || ASSIGNED_BUT_MARKED == state_); 96 DCHECK(ASSIGNED == state_ || ASSIGNED_BUT_MARKED == state_);
116 state_ = ASSIGNED_BUT_MARKED; 97 state_ = ASSIGNED_BUT_MARKED;
117 } 98 }
118 99
119 void DnsHostInfo::SetFoundState() { 100 void DnsHostInfo::SetFoundState() {
120 DCHECK(ASSIGNED == state_); 101 DCHECK(ASSIGNED == state_);
121 state_ = FOUND; 102 state_ = FOUND;
122 resolve_duration_ = GetDuration(); 103 resolve_duration_ = GetDuration();
123 if (kMaxNonNetworkDnsLookupDuration <= resolve_duration_) { 104 if (kMaxNonNetworkDnsLookupDuration <= resolve_duration_) {
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 void DnsHostInfo::SetFinishedState(bool was_resolved) { 136 void DnsHostInfo::SetFinishedState(bool was_resolved) {
156 DCHECK(STARTED == state_); 137 DCHECK(STARTED == state_);
157 state_ = was_resolved ? FINISHED : FINISHED_UNRESOLVED; 138 state_ = was_resolved ? FINISHED : FINISHED_UNRESOLVED;
158 resolve_duration_ = GetDuration(); 139 resolve_duration_ = GetDuration();
159 // TODO(jar): Sequence number should be incremented in prefetched HostInfo. 140 // TODO(jar): Sequence number should be incremented in prefetched HostInfo.
160 DLogResultsStats("DNS HTTP Finished"); 141 DLogResultsStats("DNS HTTP Finished");
161 } 142 }
162 143
163 void DnsHostInfo::SetHostname(const std::string& hostname) { 144 void DnsHostInfo::SetHostname(const std::string& hostname) {
164 if (hostname != hostname_) { 145 if (hostname != hostname_) {
165 DCHECK_EQ(hostname_.size(), 0u); // Not yet initialized. 146 DCHECK(hostname_.size() == 0); // Not yet initialized.
166 hostname_ = hostname; 147 hostname_ = hostname;
167 } 148 }
168 } 149 }
169 150
170 // IsStillCached() guesses if the DNS cache still has IP data, 151 // IsStillCached() guesses if the DNS cache still has IP data,
171 // or at least remembers results about "not finding host." 152 // or at least remembers results about "not finding host."
172 bool DnsHostInfo::IsStillCached() const { 153 bool DnsHostInfo::IsStillCached() const {
173 DCHECK(FOUND == state_ || NO_SUCH_NAME == state_); 154 DCHECK(FOUND == state_ || NO_SUCH_NAME == state_);
174 155
175 // Default MS OS does not cache failures. Hence we could return false almost 156 // Default MS OS does not cache failures. Hence we could return false almost
176 // all the time for that case. However, we'd never try again to prefetch 157 // all the time for that case. However, we'd never try again to prefetch
177 // the value if we returned false that way. Hence we'll just let the lookup 158 // the value if we returned false that way. Hence we'll just let the lookup
178 // time out the same way as FOUND case. 159 // time out the same way as FOUND case.
179 160
180 if (sequence_counter - sequence_number_ > kMaxGuaranteedCacheSize) 161 if (sequence_counter - sequence_number_ > kMaxGuaranteedCacheSize)
181 return false; 162 return false;
182 163
183 TimeDelta time_since_resolution = TimeTicks::Now() - time_; 164 TimeDelta time_since_resolution = TimeTicks::Now() - time_;
184 165
185 return time_since_resolution < kCacheExpirationDuration; 166 return time_since_resolution < kCacheExpirationDuration;
186 } 167 }
187 168
188 // Compare the actual navigation DNS latency found in navigation_info, to the 169 // Compare the actual navigation DNS latency found in navigation_info, to the
189 // previously prefetched info. 170 // previously prefetched info.
190 DnsBenefit DnsHostInfo::AccruePrefetchBenefits(DnsHostInfo* navigation_info) { 171 DnsBenefit DnsHostInfo::AccruePrefetchBenefits(DnsHostInfo* navigation_info) {
191 DCHECK(FINISHED == navigation_info->state_ || 172 DCHECK(FINISHED == navigation_info->state_ ||
192 FINISHED_UNRESOLVED == navigation_info->state_); 173 FINISHED_UNRESOLVED == navigation_info->state_);
193 DCHECK_EQ(navigation_info->hostname_, hostname_.data()); 174 DCHECK(0 == navigation_info->hostname_.compare(hostname_.data()));
194 175
195 if ((0 == benefits_remaining_.InMilliseconds()) || 176 if ((0 == benefits_remaining_.InMilliseconds()) ||
196 (FOUND != state_ && NO_SUCH_NAME != state_)) { 177 (FOUND != state_ && NO_SUCH_NAME != state_)) {
197 if (FINISHED == navigation_info->state_) 178 if (FINISHED == navigation_info->state_)
198 UMA_HISTOGRAM_LONG_TIMES("DNS.IndependentNavigation", 179 UMA_HISTOGRAM_LONG_TIMES("DNS.IndependentNavigation",
199 navigation_info->resolve_duration_); 180 navigation_info->resolve_duration_);
200 else 181 else
201 UMA_HISTOGRAM_LONG_TIMES("DNS.IndependentFailedNavigation", 182 UMA_HISTOGRAM_LONG_TIMES("DNS.IndependentFailedNavigation",
202 navigation_info->resolve_duration_); 183 navigation_info->resolve_duration_);
203 return PREFETCH_NO_BENEFIT; 184 return PREFETCH_NO_BENEFIT;
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 401
421 case LEARNED_REFERAL_MOTIVATED: 402 case LEARNED_REFERAL_MOTIVATED:
422 return RemoveJs(referring_hostname_); 403 return RemoveJs(referring_hostname_);
423 404
424 default: 405 default:
425 return ""; 406 return "";
426 } 407 }
427 } 408 }
428 409
429 } // namespace chrome_browser_net 410 } // namespace chrome_browser_net
OLDNEW
« no previous file with comments | « chrome/browser/net/dns_host_info.h ('k') | chrome/browser/net/dns_host_info_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698