OLD | NEW |
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/load_timing_observer.h" | 5 #include "chrome/browser/net/load_timing_observer.h" |
6 | 6 |
7 #include "base/time.h" | 7 #include "base/time.h" |
8 #include "chrome/browser/net/chrome_net_log.h" | 8 #include "chrome/browser/net/chrome_net_log.h" |
9 #include "content/public/common/resource_response.h" | 9 #include "content/public/common/resource_response.h" |
10 #include "content/public/browser/browser_thread.h" | 10 #include "content/public/browser/browser_thread.h" |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
110 if (chrome_net_log == NULL) | 110 if (chrome_net_log == NULL) |
111 return; | 111 return; |
112 | 112 |
113 uint32 source_id = request->net_log().source().id; | 113 uint32 source_id = request->net_log().source().id; |
114 LoadTimingObserver* observer = chrome_net_log->load_timing_observer(); | 114 LoadTimingObserver* observer = chrome_net_log->load_timing_observer(); |
115 LoadTimingObserver::URLRequestRecord* record = | 115 LoadTimingObserver::URLRequestRecord* record = |
116 observer->GetURLRequestRecord(source_id); | 116 observer->GetURLRequestRecord(source_id); |
117 if (record) { | 117 if (record) { |
118 response->head.connection_id = record->socket_log_id; | 118 response->head.connection_id = record->socket_log_id; |
119 response->head.connection_reused = record->socket_reused; | 119 response->head.connection_reused = record->socket_reused; |
| 120 #if !defined(OS_IOS) |
120 response->head.load_timing = record->timing; | 121 response->head.load_timing = record->timing; |
| 122 #endif |
121 } | 123 } |
122 } | 124 } |
123 | 125 |
124 void LoadTimingObserver::OnAddURLRequestEntry(const net::NetLog::Entry& entry) { | 126 void LoadTimingObserver::OnAddURLRequestEntry(const net::NetLog::Entry& entry) { |
125 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 127 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
126 | 128 |
127 bool is_begin = entry.phase() == net::NetLog::PHASE_BEGIN; | 129 bool is_begin = entry.phase() == net::NetLog::PHASE_BEGIN; |
128 bool is_end = entry.phase() == net::NetLog::PHASE_END; | 130 bool is_end = entry.phase() == net::NetLog::PHASE_END; |
129 | 131 |
130 if (entry.type() == net::NetLog::TYPE_URL_REQUEST_START_JOB) { | 132 if (entry.type() == net::NetLog::TYPE_URL_REQUEST_START_JOB) { |
(...skipping 14 matching lines...) Expand all Loading... |
145 // something went wrong. Should not happen. | 147 // something went wrong. Should not happen. |
146 if (url_request_to_record_.size() > kMaxNumEntries) { | 148 if (url_request_to_record_.size() > kMaxNumEntries) { |
147 LOG(WARNING) << "The load timing observer url request count has grown " | 149 LOG(WARNING) << "The load timing observer url request count has grown " |
148 "larger than expected, resetting"; | 150 "larger than expected, resetting"; |
149 url_request_to_record_.clear(); | 151 url_request_to_record_.clear(); |
150 } | 152 } |
151 | 153 |
152 URLRequestRecord& record = url_request_to_record_[entry.source().id]; | 154 URLRequestRecord& record = url_request_to_record_[entry.source().id]; |
153 base::TimeTicks now = GetCurrentTime(); | 155 base::TimeTicks now = GetCurrentTime(); |
154 record.base_ticks = now; | 156 record.base_ticks = now; |
| 157 #if !defined(OS_IOS) |
155 record.timing = ResourceLoadTimingInfo(); | 158 record.timing = ResourceLoadTimingInfo(); |
156 record.timing.base_ticks = now; | 159 record.timing.base_ticks = now; |
157 record.timing.base_time = TimeTicksToTime(now); | 160 record.timing.base_time = TimeTicksToTime(now); |
| 161 #endif |
158 } | 162 } |
159 return; | 163 return; |
160 } else if (entry.type() == net::NetLog::TYPE_REQUEST_ALIVE) { | 164 } else if (entry.type() == net::NetLog::TYPE_REQUEST_ALIVE) { |
161 // Cleanup records based on the TYPE_REQUEST_ALIVE entry. | 165 // Cleanup records based on the TYPE_REQUEST_ALIVE entry. |
162 if (is_end) | 166 if (is_end) |
163 url_request_to_record_.erase(entry.source().id); | 167 url_request_to_record_.erase(entry.source().id); |
164 return; | 168 return; |
165 } | 169 } |
166 | 170 |
167 URLRequestRecord* record = GetURLRequestRecord(entry.source().id); | 171 URLRequestRecord* record = GetURLRequestRecord(entry.source().id); |
168 if (!record) | 172 if (!record) |
169 return; | 173 return; |
170 | 174 |
| 175 #if !defined(OS_IOS) |
171 ResourceLoadTimingInfo& timing = record->timing; | 176 ResourceLoadTimingInfo& timing = record->timing; |
172 | 177 |
173 switch (entry.type()) { | 178 switch (entry.type()) { |
174 case net::NetLog::TYPE_PROXY_SERVICE: | 179 case net::NetLog::TYPE_PROXY_SERVICE: |
175 if (is_begin) | 180 if (is_begin) |
176 timing.proxy_start = TimeTicksToOffset(GetCurrentTime(), record); | 181 timing.proxy_start = TimeTicksToOffset(GetCurrentTime(), record); |
177 else if (is_end) | 182 else if (is_end) |
178 timing.proxy_end = TimeTicksToOffset(GetCurrentTime(), record); | 183 timing.proxy_end = TimeTicksToOffset(GetCurrentTime(), record); |
179 break; | 184 break; |
180 case net::NetLog::TYPE_HTTP_STREAM_REQUEST_BOUND_TO_JOB: { | 185 case net::NetLog::TYPE_HTTP_STREAM_REQUEST_BOUND_TO_JOB: { |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
222 timing.receive_headers_start = | 227 timing.receive_headers_start = |
223 TimeTicksToOffset(GetCurrentTime(), record); | 228 TimeTicksToOffset(GetCurrentTime(), record); |
224 } else if (is_end) { | 229 } else if (is_end) { |
225 timing.receive_headers_end = | 230 timing.receive_headers_end = |
226 TimeTicksToOffset(GetCurrentTime(), record); | 231 TimeTicksToOffset(GetCurrentTime(), record); |
227 } | 232 } |
228 break; | 233 break; |
229 default: | 234 default: |
230 break; | 235 break; |
231 } | 236 } |
| 237 #endif // !defined(OS_IOS) |
232 } | 238 } |
233 | 239 |
234 void LoadTimingObserver::OnAddHTTPStreamJobEntry( | 240 void LoadTimingObserver::OnAddHTTPStreamJobEntry( |
235 const net::NetLog::Entry& entry) { | 241 const net::NetLog::Entry& entry) { |
236 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 242 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
237 | 243 |
238 bool is_begin = entry.phase() == net::NetLog::PHASE_BEGIN; | 244 bool is_begin = entry.phase() == net::NetLog::PHASE_BEGIN; |
239 bool is_end = entry.phase() == net::NetLog::PHASE_END; | 245 bool is_end = entry.phase() == net::NetLog::PHASE_END; |
240 | 246 |
241 if (entry.type() == net::NetLog::TYPE_HTTP_STREAM_JOB) { | 247 if (entry.type() == net::NetLog::TYPE_HTTP_STREAM_JOB) { |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
386 if (is_begin) | 392 if (is_begin) |
387 it->second.ssl_start = GetCurrentTime(); | 393 it->second.ssl_start = GetCurrentTime(); |
388 else if (is_end) | 394 else if (is_end) |
389 it->second.ssl_end = GetCurrentTime(); | 395 it->second.ssl_end = GetCurrentTime(); |
390 } | 396 } |
391 } | 397 } |
392 | 398 |
393 base::TimeTicks LoadTimingObserver::GetCurrentTime() const { | 399 base::TimeTicks LoadTimingObserver::GetCurrentTime() const { |
394 return base::TimeTicks::Now(); | 400 return base::TimeTicks::Now(); |
395 } | 401 } |
OLD | NEW |