diff options
author | rtenneti@chromium.org <rtenneti@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-18 07:59:28 +0000 |
---|---|---|
committer | rtenneti@chromium.org <rtenneti@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-18 07:59:28 +0000 |
commit | b78ec0ccc7127e7e83c5103ad34283973d8e3fdc (patch) | |
tree | ea2273fc13a345c86cba2818e98863d054d05d08 | |
parent | 4278522e0ac3ebc35802391b32f7bec36610a12a (diff) | |
download | chromium_src-b78ec0ccc7127e7e83c5103ad34283973d8e3fdc.zip chromium_src-b78ec0ccc7127e7e83c5103ad34283973d8e3fdc.tar.gz chromium_src-b78ec0ccc7127e7e83c5103ad34283973d8e3fdc.tar.bz2 |
Added three histograms to track the following TCP connection latency
intervals.
a) t <= 10ms
b) 10ms < t <= 20ms
c) 20ms < t (or no previous time)
R=jar@chromium.org
Review URL: https://codereview.chromium.org/68793007
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@235652 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | net/socket/transport_client_socket_pool.cc | 57 | ||||
-rw-r--r-- | net/socket/transport_client_socket_pool.h | 11 | ||||
-rw-r--r-- | tools/metrics/histograms/histograms.xml | 13 |
3 files changed, 59 insertions, 22 deletions
diff --git a/net/socket/transport_client_socket_pool.cc b/net/socket/transport_client_socket_pool.cc index 6da3b45..ec56dcb 100644 --- a/net/socket/transport_client_socket_pool.cc +++ b/net/socket/transport_client_socket_pool.cc @@ -96,7 +96,7 @@ TransportConnectJob::TransportConnectJob( client_socket_factory_(client_socket_factory), resolver_(host_resolver), next_state_(STATE_NONE), - less_than_20ms_since_connect_(true) { + interval_between_connects_(CONNECT_INTERVAL_GT_20MS) { } TransportConnectJob::~TransportConnectJob() { @@ -204,11 +204,16 @@ int TransportConnectJob::DoTransportConnect() { last_connect_time = g_last_connect_time.Get(); *g_last_connect_time.Pointer() = now; } - if (last_connect_time.is_null() || - (now - last_connect_time).InMilliseconds() < 20) { - less_than_20ms_since_connect_ = true; + if (last_connect_time.is_null()) { + interval_between_connects_ = CONNECT_INTERVAL_GT_20MS; } else { - less_than_20ms_since_connect_ = false; + int64 interval = (now - last_connect_time).InMilliseconds(); + if (interval <= 10) + interval_between_connects_ = CONNECT_INTERVAL_LE_10MS; + else if (interval <= 20) + interval_between_connects_ = CONNECT_INTERVAL_LE_20MS; + else + interval_between_connects_ = CONNECT_INTERVAL_GT_20MS; } next_state_ = STATE_TRANSPORT_CONNECT_COMPLETE; @@ -247,20 +252,34 @@ int TransportConnectJob::DoTransportConnectComplete(int result) { base::TimeDelta::FromMinutes(10), 100); - if (less_than_20ms_since_connect_) { - UMA_HISTOGRAM_CUSTOM_TIMES( - "Net.TCP_Connection_Latency_Interval_20ms_Minus", - connect_duration, - base::TimeDelta::FromMilliseconds(1), - base::TimeDelta::FromMinutes(10), - 100); - } else { - UMA_HISTOGRAM_CUSTOM_TIMES( - "Net.TCP_Connection_Latency_Interval_20ms_Plus", - connect_duration, - base::TimeDelta::FromMilliseconds(1), - base::TimeDelta::FromMinutes(10), - 100); + switch (interval_between_connects_) { + case CONNECT_INTERVAL_LE_10MS: + UMA_HISTOGRAM_CUSTOM_TIMES( + "Net.TCP_Connection_Latency_Interval_LessThanOrEqual_10ms", + connect_duration, + base::TimeDelta::FromMilliseconds(1), + base::TimeDelta::FromMinutes(10), + 100); + break; + case CONNECT_INTERVAL_LE_20MS: + UMA_HISTOGRAM_CUSTOM_TIMES( + "Net.TCP_Connection_Latency_Interval_LessThanOrEqual_20ms", + connect_duration, + base::TimeDelta::FromMilliseconds(1), + base::TimeDelta::FromMinutes(10), + 100); + break; + case CONNECT_INTERVAL_GT_20MS: + UMA_HISTOGRAM_CUSTOM_TIMES( + "Net.TCP_Connection_Latency_Interval_GreaterThan_20ms", + connect_duration, + base::TimeDelta::FromMilliseconds(1), + base::TimeDelta::FromMinutes(10), + 100); + break; + default: + NOTREACHED(); + break; } if (is_ipv4) { diff --git a/net/socket/transport_client_socket_pool.h b/net/socket/transport_client_socket_pool.h index 95b51c3..1c22bf2 100644 --- a/net/socket/transport_client_socket_pool.h +++ b/net/socket/transport_client_socket_pool.h @@ -93,6 +93,12 @@ class NET_EXPORT_PRIVATE TransportConnectJob : public ConnectJob { STATE_NONE, }; + enum ConnectInterval { + CONNECT_INTERVAL_LE_10MS, + CONNECT_INTERVAL_LE_20MS, + CONNECT_INTERVAL_GT_20MS, + }; + void OnIOComplete(int result); // Runs the state transition loop. @@ -125,9 +131,8 @@ class NET_EXPORT_PRIVATE TransportConnectJob : public ConnectJob { base::TimeTicks fallback_connect_start_time_; base::OneShotTimer<TransportConnectJob> fallback_timer_; - // If the interval between this connect and previous connect is less than - // 20ms, then |less_than_20ms_since_connect_| is set to true. - bool less_than_20ms_since_connect_; + // Track the interval between this connect and previous connect. + ConnectInterval interval_between_connects_; DISALLOW_COPY_AND_ASSIGN(TransportConnectJob); }; diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index 603e5ad..c572e7d 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml @@ -30280,6 +30280,11 @@ other types of suffix sets. <affected-histogram name="Instant.SessionsStorageNamespace"/> </fieldtrial> +<fieldtrial name="Interval" separator="_"> + <group name="Interval" label="Interval between two consecutive connects is"/> + <affected-histogram name="Net.TCP_Connection_Latency"/> +</fieldtrial> + <fieldtrial name="Interval_20ms_plus_and_minus" separator="_"> <group name="Interval_20ms_Minus" label="Interval between two consecutive connects is less than 20ms."/> @@ -30289,6 +30294,14 @@ other types of suffix sets. <affected-histogram name="Net.TCP_Connection_Latency"/> </fieldtrial> +<fieldtrial name="Interval_lt_gt_20ms" separator="_"> + <group name="LessThanOrEqual_10ms" label="less than or equal to 10ms."/> + <group name="LessThanOrEqual_20ms" + label="more than 10ms, and less than or equal to 20ms."/> + <group name="GreaterThan_20ms" label="greater than 20ms."/> + <affected-histogram name="Net.TCP_Connection_Latency_Interval"/> +</fieldtrial> + <fieldtrial name="IPv6_Probe"> <group name="IPv6_probe_skipped" label="with IPv6 not probed, and default OS settings used"/> |