summaryrefslogtreecommitdiffstats
path: root/net/socket/transport_client_socket_pool.cc
diff options
context:
space:
mode:
Diffstat (limited to 'net/socket/transport_client_socket_pool.cc')
-rw-r--r--net/socket/transport_client_socket_pool.cc42
1 files changed, 41 insertions, 1 deletions
diff --git a/net/socket/transport_client_socket_pool.cc b/net/socket/transport_client_socket_pool.cc
index d03e3e6..87bfc6a 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,13 @@ 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::TimeTicks g_last_connect_time;
+
TransportSocketParams::TransportSocketParams(
const HostPortPair& host_port_pair,
bool disable_resolver_cache,
@@ -85,7 +94,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 +196,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;
+ g_last_connect_time = 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 +246,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,