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

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

Issue 3028026: Fix bug which caused DNS time not to be reported by LoadTimingObserver. (Closed)
Patch Set: Indentation fix Created 10 years, 4 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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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/load_timing_observer.h" 5 #include "chrome/browser/net/load_timing_observer.h"
6 6
7 #include "base/compiler_specific.h" 7 #include "base/compiler_specific.h"
8 #include "base/time.h" 8 #include "base/time.h"
9 #include "net/base/load_flags.h" 9 #include "net/base/load_flags.h"
10 #include "net/url_request/url_request_netlog_params.h" 10 #include "net/url_request/url_request_netlog_params.h"
(...skipping 30 matching lines...) Expand all
41 } 41 }
42 42
43 } 43 }
44 44
45 LoadTimingObserver::URLRequestRecord::URLRequestRecord() 45 LoadTimingObserver::URLRequestRecord::URLRequestRecord()
46 : connect_job_id(net::NetLog::Source::kInvalidId), 46 : connect_job_id(net::NetLog::Source::kInvalidId),
47 socket_log_id(net::NetLog::Source::kInvalidId), 47 socket_log_id(net::NetLog::Source::kInvalidId),
48 socket_reused(false) { 48 socket_reused(false) {
49 } 49 }
50 50
51 LoadTimingObserver::LoadTimingObserver() { 51 LoadTimingObserver::LoadTimingObserver()
52 : last_connect_job_id_(net::NetLog::Source::kInvalidId) {
52 } 53 }
53 54
54 LoadTimingObserver::~LoadTimingObserver() { 55 LoadTimingObserver::~LoadTimingObserver() {
55 } 56 }
56 57
57 LoadTimingObserver::URLRequestRecord* 58 LoadTimingObserver::URLRequestRecord*
58 LoadTimingObserver::GetURLRequestRecord(uint32 source_id) { 59 LoadTimingObserver::GetURLRequestRecord(uint32 source_id) {
59 URLRequestToRecordMap::iterator it = url_request_to_record_.find(source_id); 60 URLRequestToRecordMap::iterator it = url_request_to_record_.find(source_id);
60 if (it != url_request_to_record_.end()) 61 if (it != url_request_to_record_.end())
61 return &it->second; 62 return &it->second;
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 url_request_to_record_.erase(source.id); 112 url_request_to_record_.erase(source.id);
112 return; 113 return;
113 } 114 }
114 115
115 URLRequestRecord* record = GetURLRequestRecord(source.id); 116 URLRequestRecord* record = GetURLRequestRecord(source.id);
116 if (!record) 117 if (!record)
117 return; 118 return;
118 119
119 ResourceLoaderBridge::LoadTimingInfo& timing = record->timing; 120 ResourceLoaderBridge::LoadTimingInfo& timing = record->timing;
120 121
121 switch(type) { 122 switch (type) {
122 case net::NetLog::TYPE_PROXY_SERVICE: 123 case net::NetLog::TYPE_PROXY_SERVICE:
123 if (is_begin) 124 if (is_begin)
124 timing.proxy_start = TimeTicksToOffset(time, record); 125 timing.proxy_start = TimeTicksToOffset(time, record);
125 else if (is_end) 126 else if (is_end)
126 timing.proxy_end = TimeTicksToOffset(time, record); 127 timing.proxy_end = TimeTicksToOffset(time, record);
127 break; 128 break;
128 case net::NetLog::TYPE_SOCKET_POOL: 129 case net::NetLog::TYPE_SOCKET_POOL:
129 if (is_begin) 130 if (is_begin)
130 timing.connect_start = TimeTicksToOffset(time, record); 131 timing.connect_start = TimeTicksToOffset(time, record);
131 else if (is_end) 132 else if (is_end)
132 timing.connect_end = TimeTicksToOffset(time, record); 133 timing.connect_end = TimeTicksToOffset(time, record);
133 break; 134 break;
134 case net::NetLog::TYPE_SOCKET_POOL_BOUND_TO_CONNECT_JOB: 135 case net::NetLog::TYPE_SOCKET_POOL_BOUND_TO_CONNECT_JOB:
135 { 136 {
136 uint32 connect_job_id = static_cast<net::NetLogSourceParameter*>( 137 uint32 connect_job_id = static_cast<net::NetLogSourceParameter*>(
137 params)->value().id; 138 params)->value().id;
138 ConnectJobToRecordMap::iterator it = 139 if (last_connect_job_id_ == connect_job_id &&
139 connect_job_to_record_.find(connect_job_id); 140 !last_connect_job_record_.dns_start.is_null()) {
140 if (it != connect_job_to_record_.end() && 141 timing.dns_start =
141 !it->second.dns_start.is_null()) { 142 TimeTicksToOffset(last_connect_job_record_.dns_start, record);
142 timing.dns_start = TimeTicksToOffset(it->second.dns_start, record); 143 timing.dns_end =
143 timing.dns_end = TimeTicksToOffset(it->second.dns_end, record); 144 TimeTicksToOffset(last_connect_job_record_.dns_end, record);
144 } 145 }
145 } 146 }
146 break; 147 break;
147 case net::NetLog::TYPE_SOCKET_POOL_REUSED_AN_EXISTING_SOCKET: 148 case net::NetLog::TYPE_SOCKET_POOL_REUSED_AN_EXISTING_SOCKET:
148 record->socket_reused = true; 149 record->socket_reused = true;
149 break; 150 break;
150 case net::NetLog::TYPE_SOCKET_POOL_BOUND_TO_SOCKET: 151 case net::NetLog::TYPE_SOCKET_POOL_BOUND_TO_SOCKET:
151 record->socket_log_id = static_cast<net::NetLogSourceParameter*>( 152 record->socket_log_id = static_cast<net::NetLogSourceParameter*>(
152 params)->value().id; 153 params)->value().id;
153 if (!record->socket_reused) { 154 if (!record->socket_reused) {
154 SocketToRecordMap::iterator it = 155 SocketToRecordMap::iterator it =
155 socket_to_record_.find(record->socket_log_id); 156 socket_to_record_.find(record->socket_log_id);
156 if (it != socket_to_record_.end() && !it->second.ssl_start.is_null()) { 157 if (it != socket_to_record_.end() && !it->second.ssl_start.is_null()) {
157 timing.ssl_start = TimeTicksToOffset(it->second.ssl_start, record); 158 timing.ssl_start = TimeTicksToOffset(it->second.ssl_start, record);
158 timing.ssl_end = TimeTicksToOffset(it->second.ssl_end, record); 159 timing.ssl_end = TimeTicksToOffset(it->second.ssl_end, record);
159 } 160 }
160 } 161 }
161 break; 162 break;
162 case net::NetLog::TYPE_HTTP_TRANSACTION_SEND_REQUEST: 163 case net::NetLog::TYPE_HTTP_TRANSACTION_SEND_REQUEST:
163 case net::NetLog::TYPE_SPDY_TRANSACTION_SEND_REQUEST: 164 case net::NetLog::TYPE_SPDY_TRANSACTION_SEND_REQUEST:
164 if (is_begin) 165 if (is_begin)
165 timing.send_start = TimeTicksToOffset(time, record); 166 timing.send_start = TimeTicksToOffset(time, record);
166 else if (is_end) 167 else if (is_end)
167 timing.send_end = TimeTicksToOffset(time, record); 168 timing.send_end = TimeTicksToOffset(time, record);
168 break; 169 break;
(...skipping 25 matching lines...) Expand all
194 // something went wrong. Should not happen. 195 // something went wrong. Should not happen.
195 if (connect_job_to_record_.size() > kMaxNumEntries) { 196 if (connect_job_to_record_.size() > kMaxNumEntries) {
196 LOG(WARNING) << "The load timing observer connect job count has grown " 197 LOG(WARNING) << "The load timing observer connect job count has grown "
197 "larger than expected, resetting"; 198 "larger than expected, resetting";
198 connect_job_to_record_.clear(); 199 connect_job_to_record_.clear();
199 } 200 }
200 201
201 connect_job_to_record_.insert( 202 connect_job_to_record_.insert(
202 std::make_pair(source.id, ConnectJobRecord())); 203 std::make_pair(source.id, ConnectJobRecord()));
203 } else if (is_end) { 204 } else if (is_end) {
204 connect_job_to_record_.erase(source.id); 205 ConnectJobToRecordMap::iterator it =
206 connect_job_to_record_.find(source.id);
207 if (it != connect_job_to_record_.end()) {
208 last_connect_job_id_ = it->first;
209 last_connect_job_record_ = it->second;
210 connect_job_to_record_.erase(it);
211 }
205 } 212 }
206 } else if (type == net::NetLog::TYPE_HOST_RESOLVER_IMPL) { 213 } else if (type == net::NetLog::TYPE_HOST_RESOLVER_IMPL) {
207 ConnectJobToRecordMap::iterator it = 214 ConnectJobToRecordMap::iterator it =
208 connect_job_to_record_.find(source.id); 215 connect_job_to_record_.find(source.id);
209 if (it != connect_job_to_record_.end()) { 216 if (it != connect_job_to_record_.end()) {
210 if (is_begin) 217 if (is_begin)
211 it->second.dns_start = time; 218 it->second.dns_start = time;
212 else if (is_end) 219 else if (is_end)
213 it->second.dns_end = time; 220 it->second.dns_end = time;
214 } 221 }
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
246 if (it == socket_to_record_.end()) 253 if (it == socket_to_record_.end())
247 return; 254 return;
248 255
249 if (type == net::NetLog::TYPE_SSL_CONNECT) { 256 if (type == net::NetLog::TYPE_SSL_CONNECT) {
250 if (is_begin) 257 if (is_begin)
251 it->second.ssl_start = time; 258 it->second.ssl_start = time;
252 else if (is_end) 259 else if (is_end)
253 it->second.ssl_end = time; 260 it->second.ssl_end = time;
254 } 261 }
255 } 262 }
OLDNEW
« no previous file with comments | « chrome/browser/net/load_timing_observer.h ('k') | chrome/browser/net/load_timing_observer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698