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

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

Issue 2324183002: Implement QuicHttpStream::GetLoadTimingInfo (Closed)
Patch Set: fix flaky TestTwoRequests 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 f307e2aac70b2acfd9a784a3f7a7b220bc42b45b..f7a1c65131abda4e1533975f1128977aa73dedc2 100644
--- a/net/quic/chromium/quic_chromium_client_session.cc
+++ b/net/quic/chromium/quic_chromium_client_session.cc
@@ -219,6 +219,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,
@@ -234,7 +235,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),
@@ -266,6 +266,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() {
@@ -627,13 +629,15 @@ int QuicChromiumClientSession::CryptoConnect(
bool require_confirmation,
const CompletionCallback& callback) {
require_confirmation_ = require_confirmation;
- handshake_start_ = base::TimeTicks::Now();
+ connect_timing_.connect_start = base::TimeTicks::Now();
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.
@@ -646,8 +650,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;
@@ -797,8 +803,14 @@ void QuicChromiumClientSession::OnCryptoHandshakeEvent(
base::ResetAndReturn(&callback_).Run(OK);
}
if (event == HANDSHAKE_CONFIRMED) {
- UMA_HISTOGRAM_TIMES("Net.QuicSession.HandshakeConfirmedTime",
- base::TimeTicks::Now() - handshake_start_);
+ // Update |connect_end| only when handshake is confirmed. This should also
+ // take care of any failed 0-RTT request.
+ connect_timing_.connect_end = base::TimeTicks::Now();
+ DCHECK(connect_timing_.connect_start < connect_timing_.connect_end);
+ UMA_HISTOGRAM_TIMES(
+ "Net.QuicSession.HandshakeConfirmedTime",
+ connect_timing_.connect_end - connect_timing_.connect_start);
+
if (server_info_) {
// TODO(rtenneti): Should we delete this histogram?
// Track how long it has taken to finish handshake once we start waiting
@@ -815,10 +827,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();
@@ -1387,4 +1399,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
« no previous file with comments | « net/quic/chromium/quic_chromium_client_session.h ('k') | net/quic/chromium/quic_chromium_client_session_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698