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

Unified Diff: net/quic/chromium/quic_chromium_client_session.cc

Issue 2324183002: Implement QuicHttpStream::GetLoadTimingInfo (Closed)
Patch Set: add test Created 4 years, 3 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 side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698