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

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

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 | « no previous file | chrome/browser/net/dns_host_info.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 // A DnsHostInfo object is used to store status of a Dns lookup of a specific 5 // A DnsHostInfo object is used to store status of a Dns lookup of a specific
6 // hostname. 6 // hostname.
7 // It includes progress, from placement in the DnsMaster's queue, to resolution 7 // It includes progress, from placement in the DnsMaster's queue, to resolution
8 // by the DNS service as either FOUND or NO_SUCH_NAME. 8 // by the DNS service as either FOUND or NO_SUCH_NAME.
9 9
10 #ifndef CHROME_BROWSER_NET_DNS_HOST_INFO_H_ 10 #ifndef CHROME_BROWSER_NET_DNS_HOST_INFO_H_
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 // The following involve predictive prefetching, triggered by a navigation. 45 // The following involve predictive prefetching, triggered by a navigation.
46 // The referring_hostname_ is also set when these are used. 46 // The referring_hostname_ is also set when these are used.
47 // TODO(jar): Support STATIC_REFERAL_MOTIVATED API and integration. 47 // TODO(jar): Support STATIC_REFERAL_MOTIVATED API and integration.
48 STATIC_REFERAL_MOTIVATED, // External database suggested this resolution. 48 STATIC_REFERAL_MOTIVATED, // External database suggested this resolution.
49 LEARNED_REFERAL_MOTIVATED, // Prior navigation taught us this resolution. 49 LEARNED_REFERAL_MOTIVATED, // Prior navigation taught us this resolution.
50 }; 50 };
51 51
52 enum DnsProcessingState { 52 enum DnsProcessingState {
53 // When processed by our prefetching system, the states are: 53 // When processed by our prefetching system, the states are:
54 PENDING, // Constructor has completed. 54 PENDING, // Constructor has completed.
55 QUEUED, // In name queue but not yet being resolved. 55 QUEUED, // In prefetch queue but not yet being resolved.
56 ASSIGNED, // Being resolved (or being reset to earlier state) 56 ASSIGNED, // Currently being processed.
57 ASSIGNED_BUT_MARKED, // Needs to be deleted as soon as it's resolved. 57 ASSIGNED_BUT_MARKED, // Needs to be deleted as soon as it's resolved.
58 FOUND, // DNS resolution completed. 58 FOUND, // DNS prefetch search completed.
59 NO_SUCH_NAME, // DNS resolution completed. 59 NO_SUCH_NAME, // DNS prefetch search completed.
60 // When processed by the network stack during navigation, the states are: 60 // When processed by the network stack during navigation, the states are:
61 STARTED, // Resolution has begun for a navigation. 61 STARTED, // Resolution has begun for a navigation.
62 FINISHED, // Resolution has completed for a navigation. 62 FINISHED, // Resolution has completed for a navigation.
63 FINISHED_UNRESOLVED}; // No resolution found, so navigation will fail. 63 FINISHED_UNRESOLVED}; // No resolution found, so navigation will fail.
64 static const base::TimeDelta kMaxNonNetworkDnsLookupDuration; 64 static const base::TimeDelta kMaxNonNetworkDnsLookupDuration;
65 // The number of OS cache entries we can guarantee(?) before cache eviction 65 // The number of OS cache entries we can guarantee(?) before cache eviction
66 // might likely take place. 66 // might likely take place.
67 static const int kMaxGuaranteedCacheSize = 50; 67 static const int kMaxGuaranteedCacheSize = 50;
68 68
69 typedef std::vector<DnsHostInfo> DnsInfoTable; 69 typedef std::vector<DnsHostInfo> DnsInfoTable;
70 70
71 static const base::TimeDelta kNullDuration; 71 static const base::TimeDelta kNullDuration;
72 72
73 // DnsHostInfo are usually made by the default constructor during 73 // DnsHostInfo are usually made by the default constructor during
74 // initializing of the DnsMaster's map (of info for Hostnames). 74 // initializing of the DnsMaster's map (of info for Hostnames).
75 DnsHostInfo() 75 DnsHostInfo()
76 : state_(PENDING), 76 : state_(PENDING),
77 old_prequeue_state_(state_),
78 resolve_duration_(kNullDuration), 77 resolve_duration_(kNullDuration),
79 queue_duration_(kNullDuration), 78 queue_duration_(kNullDuration),
80 benefits_remaining_(), 79 benefits_remaining_(),
81 sequence_number_(0), 80 sequence_number_(0),
82 motivation_(NO_PREFETCH_MOTIVATION), 81 motivation_(NO_PREFETCH_MOTIVATION),
83 was_linked_(false) { 82 was_linked_(false) {
84 } 83 }
85 84
86 ~DnsHostInfo() {} 85 ~DnsHostInfo() {}
87 86
88 // NeedDnsUpdate decides, based on our internal info, 87 // NeedDnsUpdate decides, based on our internal info,
89 // if it would be valuable to attempt to update (prefectch) 88 // if it would be valuable to attempt to update (prefectch)
90 // DNS data for hostname. This decision is based 89 // DNS data for hostname. This decision is based
91 // on how recently we've done DNS prefetching for hostname. 90 // on how recently we've done DNS prefetching for hostname.
92 bool NeedsDnsUpdate(const std::string& hostname); 91 bool NeedsDnsUpdate(const std::string& hostname);
93 92
94 static void set_cache_expiration(base::TimeDelta time); 93 static void set_cache_expiration(base::TimeDelta time);
95 94
96 // The prefetching lifecycle. 95 // The prefetching lifecycle.
97 void SetQueuedState(ResolutionMotivation motivation); 96 void SetQueuedState(ResolutionMotivation motivation);
98 void SetAssignedState(); 97 void SetAssignedState();
99 void RemoveFromQueue();
100 void SetPendingDeleteState(); 98 void SetPendingDeleteState();
101 void SetFoundState(); 99 void SetFoundState();
102 void SetNoSuchNameState(); 100 void SetNoSuchNameState();
103 // The actual browsing resolution lifecycle. 101 // The actual browsing resolution lifecycle.
104 void SetStartedState(); 102 void SetStartedState();
105 void SetFinishedState(bool was_resolved); 103 void SetFinishedState(bool was_resolved);
106 104
107 // Finish initialization. Must only be called once. 105 // Finish initialization. Must only be called once.
108 void SetHostname(const std::string& hostname); 106 void SetHostname(const std::string& hostname);
109 107
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 // Record why we created, or have updated (reqested pre-resolution) of this 150 // Record why we created, or have updated (reqested pre-resolution) of this
153 // instance. 151 // instance.
154 void SetMotivation(ResolutionMotivation motivation); 152 void SetMotivation(ResolutionMotivation motivation);
155 153
156 // Helper function for about:dns printing. 154 // Helper function for about:dns printing.
157 std::string GetAsciiMotivation() const; 155 std::string GetAsciiMotivation() const;
158 156
159 // The next declaration is non-const to facilitate testing. 157 // The next declaration is non-const to facilitate testing.
160 static base::TimeDelta kCacheExpirationDuration; 158 static base::TimeDelta kCacheExpirationDuration;
161 159
162 // The current state of this instance.
163 DnsProcessingState state_; 160 DnsProcessingState state_;
164
165 // Record the state prior to going to a queued state, in case we have to back
166 // out of the queue.
167 DnsProcessingState old_prequeue_state_;
168
169 std::string hostname_; // Hostname for this info. 161 std::string hostname_; // Hostname for this info.
170 162
171 // When was last state changed (usually lookup completed). 163 // When was last state changed (usually lookup completed).
172 base::TimeTicks time_; 164 base::TimeTicks time_;
173 // Time needed for DNS to resolve. 165 // Time needed for DNS to resolve.
174 base::TimeDelta resolve_duration_; 166 base::TimeDelta resolve_duration_;
175 // Time spent in queue. 167 // Time spent in queue.
176 base::TimeDelta queue_duration_; 168 base::TimeDelta queue_duration_;
177 // Unused potential benefits of a prefetch. 169 // Unused potential benefits of a prefetch.
178 base::TimeDelta benefits_remaining_; 170 base::TimeDelta benefits_remaining_;
(...skipping 13 matching lines...) Expand all
192 std::string referring_hostname_; 184 std::string referring_hostname_;
193 185
194 // We put these objects into a std::map, and hence we 186 // We put these objects into a std::map, and hence we
195 // need some "evil" constructors. 187 // need some "evil" constructors.
196 // DISALLOW_COPY_AND_ASSIGN(DnsHostInfo); 188 // DISALLOW_COPY_AND_ASSIGN(DnsHostInfo);
197 }; 189 };
198 190
199 } // namespace chrome_browser_net 191 } // namespace chrome_browser_net
200 192
201 #endif // CHROME_BROWSER_NET_DNS_HOST_INFO_H_ 193 #endif // CHROME_BROWSER_NET_DNS_HOST_INFO_H_
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/net/dns_host_info.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698