Chromium Code Reviews| 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 |