Index: net/quic/chromium/quic_chromium_client_session.cc |
diff --git a/net/quic/chromium/quic_chromium_client_session.cc b/net/quic/chromium/quic_chromium_client_session.cc |
index e2759c459a9413fa5c352c19277d39ffa5276102..76ccfc90243f5aecb43930e54c7b265379b2313c 100644 |
--- a/net/quic/chromium/quic_chromium_client_session.cc |
+++ b/net/quic/chromium/quic_chromium_client_session.cc |
@@ -213,6 +213,7 @@ QuicChromiumClientSession::QuicChromiumClientSession( |
const QuicConfig& config, |
QuicCryptoClientConfig* crypto_config, |
const char* const connection_description, |
+ base::TimeTicks dns_resolution_start_time, |
base::TimeTicks dns_resolution_end_time, |
QuicClientPushPromiseIndex* push_promise_index, |
base::TaskRunner* task_runner, |
@@ -228,7 +229,6 @@ QuicChromiumClientSession::QuicChromiumClientSession( |
num_total_streams_(0), |
task_runner_(task_runner), |
net_log_(BoundNetLog::Make(net_log, NetLogSourceType::QUIC_SESSION)), |
- dns_resolution_end_time_(dns_resolution_end_time), |
logger_(new QuicConnectionLogger(this, |
connection_description, |
std::move(socket_performance_watcher), |
@@ -262,6 +262,8 @@ QuicChromiumClientSession::QuicChromiumClientSession( |
connection->SetMaxPacketLength(connection->max_packet_length() - |
kAdditionalOverheadForIPv6); |
} |
+ connect_timing_.dns_start = dns_resolution_start_time; |
+ connect_timing_.dns_end = dns_resolution_end_time; |
} |
QuicChromiumClientSession::~QuicChromiumClientSession() { |
@@ -603,17 +605,22 @@ int QuicChromiumClientSession::CryptoConnect( |
const CompletionCallback& callback) { |
require_confirmation_ = require_confirmation; |
handshake_start_ = base::TimeTicks::Now(); |
+ connect_timing_.connect_start = handshake_start_; |
RecordHandshakeState(STATE_STARTED); |
DCHECK(flow_controller()); |
crypto_stream_->CryptoConnect(); |
- if (IsCryptoHandshakeConfirmed()) |
+ if (IsCryptoHandshakeConfirmed()) { |
+ connect_timing_.connect_end = base::TimeTicks::Now(); |
return OK; |
+ } |
// Unless we require handshake confirmation, activate the session if |
// we have established initial encryption. |
- if (!require_confirmation_ && IsEncryptionEstablished()) |
+ if (!require_confirmation_ && IsEncryptionEstablished()) { |
+ connect_timing_.connect_end = base::TimeTicks::Now(); |
Ryan Hamilton
2016/09/09 20:02:49
Do you know what the semantics of connect_end shou
xunjieli
2016/09/09 21:26:59
Done. That's a really good point! I didn't think o
Ryan Hamilton
2016/09/09 22:05:39
This seems reasonable to me. But it's worth keepin
|
return OK; |
+ } |
callback_ = callback; |
return ERR_IO_PENDING; |
@@ -621,8 +628,10 @@ int QuicChromiumClientSession::CryptoConnect( |
int QuicChromiumClientSession::ResumeCryptoConnect( |
const CompletionCallback& callback) { |
- if (IsCryptoHandshakeConfirmed()) |
+ if (IsCryptoHandshakeConfirmed()) { |
+ connect_timing_.connect_end = base::TimeTicks::Now(); |
return OK; |
+ } |
if (!connection()->connected()) |
return ERR_QUIC_HANDSHAKE_FAILED; |
@@ -766,6 +775,9 @@ void QuicChromiumClientSession::OnCryptoHandshakeEvent( |
if (!callback_.is_null() && |
(!require_confirmation_ || event == HANDSHAKE_CONFIRMED || |
event == ENCRYPTION_REESTABLISHED)) { |
+ // Update |connect_end_| if CryptoConnect() returned ERR_IO_PENDING. |
+ connect_timing_.connect_end = base::TimeTicks::Now(); |
+ |
// TODO(rtenneti): Currently for all CryptoHandshakeEvent events, callback_ |
// could be called because there are no error events in CryptoHandshakeEvent |
// enum. If error events are added to CryptoHandshakeEvent, then the |
@@ -791,10 +803,10 @@ void QuicChromiumClientSession::OnCryptoHandshakeEvent( |
} |
// Track how long it has taken to finish handshake after we have finished |
// DNS host resolution. |
- if (!dns_resolution_end_time_.is_null()) { |
+ if (!connect_timing_.dns_end.is_null()) { |
UMA_HISTOGRAM_TIMES( |
"Net.QuicSession.HostResolution.HandshakeConfirmedTime", |
- base::TimeTicks::Now() - dns_resolution_end_time_); |
+ base::TimeTicks::Now() - connect_timing_.dns_end); |
} |
ObserverSet::iterator it = observers_.begin(); |
@@ -1235,4 +1247,11 @@ void QuicChromiumClientSession::DeletePromised( |
QuicClientSessionBase::DeletePromised(promised); |
} |
+const LoadTimingInfo::ConnectTiming& |
+QuicChromiumClientSession::GetConnectTiming() { |
+ connect_timing_.ssl_start = connect_timing_.connect_start; |
+ connect_timing_.ssl_end = connect_timing_.connect_end; |
+ return connect_timing_; |
+} |
+ |
} // namespace net |