Home | History | Annotate | Download | only in socket
      1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "net/socket/client_socket_pool_histograms.h"
      6 
      7 #include <string>
      8 
      9 #include "base/metrics/field_trial.h"
     10 #include "base/metrics/histogram.h"
     11 #include "net/socket/client_socket_handle.h"
     12 
     13 namespace net {
     14 
     15 using base::Histogram;
     16 using base::LinearHistogram;
     17 
     18 ClientSocketPoolHistograms::ClientSocketPoolHistograms(
     19     const std::string& pool_name)
     20     : is_http_proxy_connection_(false),
     21       is_socks_connection_(false) {
     22   // UMA_HISTOGRAM_ENUMERATION
     23   socket_type_ = LinearHistogram::FactoryGet("Net.SocketType_" + pool_name, 1,
     24       ClientSocketHandle::NUM_TYPES, ClientSocketHandle::NUM_TYPES + 1,
     25       Histogram::kUmaTargetedHistogramFlag);
     26   // UMA_HISTOGRAM_CUSTOM_TIMES
     27   request_time_ = Histogram::FactoryTimeGet(
     28       "Net.SocketRequestTime_" + pool_name,
     29       base::TimeDelta::FromMilliseconds(1),
     30       base::TimeDelta::FromMinutes(10),
     31       100, Histogram::kUmaTargetedHistogramFlag);
     32   // UMA_HISTOGRAM_CUSTOM_TIMES
     33   unused_idle_time_ = Histogram::FactoryTimeGet(
     34       "Net.SocketIdleTimeBeforeNextUse_UnusedSocket_" + pool_name,
     35       base::TimeDelta::FromMilliseconds(1),
     36       base::TimeDelta::FromMinutes(6),
     37       100, Histogram::kUmaTargetedHistogramFlag);
     38   // UMA_HISTOGRAM_CUSTOM_TIMES
     39   reused_idle_time_ = Histogram::FactoryTimeGet(
     40       "Net.SocketIdleTimeBeforeNextUse_ReusedSocket_" + pool_name,
     41       base::TimeDelta::FromMilliseconds(1),
     42       base::TimeDelta::FromMinutes(6),
     43       100, Histogram::kUmaTargetedHistogramFlag);
     44 
     45   if (pool_name == "HTTPProxy")
     46     is_http_proxy_connection_ = true;
     47   else if (pool_name == "SOCK")
     48     is_socks_connection_ = true;
     49 }
     50 
     51 ClientSocketPoolHistograms::~ClientSocketPoolHistograms() {
     52 }
     53 
     54 void ClientSocketPoolHistograms::AddSocketType(int type) const {
     55   socket_type_->Add(type);
     56 }
     57 
     58 void ClientSocketPoolHistograms::AddRequestTime(base::TimeDelta time) const {
     59   request_time_->AddTime(time);
     60 
     61   static bool proxy_connection_impact_trial_exists(
     62       base::FieldTrialList::Find("ProxyConnectionImpact") &&
     63       !base::FieldTrialList::Find("ProxyConnectionImpact")->
     64           group_name().empty());
     65   if (proxy_connection_impact_trial_exists && is_http_proxy_connection_) {
     66     UMA_HISTOGRAM_CUSTOM_TIMES(
     67         base::FieldTrial::MakeName("Net.HttpProxySocketRequestTime",
     68                              "ProxyConnectionImpact"),
     69         time,
     70         base::TimeDelta::FromMilliseconds(1), base::TimeDelta::FromMinutes(10),
     71         100);
     72   }
     73   if (proxy_connection_impact_trial_exists && is_socks_connection_) {
     74     UMA_HISTOGRAM_CUSTOM_TIMES(
     75         base::FieldTrial::MakeName("Net.SocksSocketRequestTime",
     76                              "ProxyConnectionImpact"),
     77         time,
     78         base::TimeDelta::FromMilliseconds(1), base::TimeDelta::FromMinutes(10),
     79         100);
     80   }
     81 }
     82 
     83 void ClientSocketPoolHistograms::AddUnusedIdleTime(base::TimeDelta time) const {
     84   unused_idle_time_->AddTime(time);
     85 }
     86 
     87 void ClientSocketPoolHistograms::AddReusedIdleTime(base::TimeDelta time) const {
     88   reused_idle_time_->AddTime(time);
     89 }
     90 
     91 }  // namespace net
     92