summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrtenneti@chromium.org <rtenneti@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-07 18:39:12 +0000
committerrtenneti@chromium.org <rtenneti@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-07 18:39:12 +0000
commitaad2a82c90acbb6d5b6936623a89494b6c9be646 (patch)
treeea3a4f3ac398f30ef311a5976caf3f68a575ad07
parent45d5c60f9cfbd86cf6ff89d48aa80365ae534ba2 (diff)
downloadchromium_src-aad2a82c90acbb6d5b6936623a89494b6c9be646.zip
chromium_src-aad2a82c90acbb6d5b6936623a89494b6c9be646.tar.gz
chromium_src-aad2a82c90acbb6d5b6936623a89494b6c9be646.tar.bz2
Added histograms to see if the interval between consecutive connects has
an impact on connect time. R=jar@chromium.org NOTRY=true Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=227233 Review URL: https://codereview.chromium.org/26098002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@227306 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--net/socket/transport_client_socket_pool.cc43
-rw-r--r--net/socket/transport_client_socket_pool.h4
2 files changed, 46 insertions, 1 deletions
diff --git a/net/socket/transport_client_socket_pool.cc b/net/socket/transport_client_socket_pool.cc
index d03e3e6..6da3b45 100644
--- a/net/socket/transport_client_socket_pool.cc
+++ b/net/socket/transport_client_socket_pool.cc
@@ -7,10 +7,12 @@
#include <algorithm>
#include "base/compiler_specific.h"
+#include "base/lazy_instance.h"
#include "base/logging.h"
#include "base/message_loop/message_loop.h"
#include "base/metrics/histogram.h"
#include "base/strings/string_util.h"
+#include "base/synchronization/lock.h"
#include "base/time/time.h"
#include "base/values.h"
#include "net/base/ip_endpoint.h"
@@ -46,6 +48,14 @@ bool AddressListOnlyContainsIPv6(const AddressList& list) {
} // namespace
+// This lock protects |g_last_connect_time|.
+static base::LazyInstance<base::Lock>::Leaky
+ g_last_connect_time_lock = LAZY_INSTANCE_INITIALIZER;
+
+// |g_last_connect_time| has the last time a connect() call is made.
+static base::LazyInstance<base::TimeTicks>::Leaky
+ g_last_connect_time = LAZY_INSTANCE_INITIALIZER;
+
TransportSocketParams::TransportSocketParams(
const HostPortPair& host_port_pair,
bool disable_resolver_cache,
@@ -85,7 +95,8 @@ TransportConnectJob::TransportConnectJob(
params_(params),
client_socket_factory_(client_socket_factory),
resolver_(host_resolver),
- next_state_(STATE_NONE) {
+ next_state_(STATE_NONE),
+ less_than_20ms_since_connect_(true) {
}
TransportConnectJob::~TransportConnectJob() {
@@ -186,6 +197,20 @@ int TransportConnectJob::DoResolveHostComplete(int result) {
}
int TransportConnectJob::DoTransportConnect() {
+ base::TimeTicks now = base::TimeTicks::Now();
+ base::TimeTicks last_connect_time;
+ {
+ base::AutoLock lock(g_last_connect_time_lock.Get());
+ 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;
+ } else {
+ less_than_20ms_since_connect_ = false;
+ }
+
next_state_ = STATE_TRANSPORT_CONNECT_COMPLETE;
transport_socket_ = client_socket_factory_->CreateTransportClientSocket(
addresses_, net_log().net_log(), net_log().source());
@@ -222,6 +247,22 @@ 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);
+ }
+
if (is_ipv4) {
UMA_HISTOGRAM_CUSTOM_TIMES("Net.TCP_Connection_Latency_IPv4_No_Race",
connect_duration,
diff --git a/net/socket/transport_client_socket_pool.h b/net/socket/transport_client_socket_pool.h
index 16e421a..95b51c3 100644
--- a/net/socket/transport_client_socket_pool.h
+++ b/net/socket/transport_client_socket_pool.h
@@ -125,6 +125,10 @@ 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_;
+
DISALLOW_COPY_AND_ASSIGN(TransportConnectJob);
};