Home | History | Annotate | Download | only in socket_stream
      1 // Copyright (c) 2011 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_stream/socket_stream_metrics.h"
      6 
      7 #include <string.h>
      8 
      9 #include "base/metrics/histogram.h"
     10 #include "base/time/time.h"
     11 #include "url/gurl.h"
     12 
     13 namespace net {
     14 
     15 SocketStreamMetrics::SocketStreamMetrics(const GURL& url)
     16     : received_bytes_(0),
     17       received_counts_(0),
     18       sent_bytes_(0),
     19       sent_counts_(0) {
     20   ProtocolType protocol_type = PROTOCOL_UNKNOWN;
     21   if (url.SchemeIs("ws"))
     22     protocol_type = PROTOCOL_WEBSOCKET;
     23   else if (url.SchemeIs("wss"))
     24     protocol_type = PROTOCOL_WEBSOCKET_SECURE;
     25 
     26   UMA_HISTOGRAM_ENUMERATION("Net.SocketStream.ProtocolType",
     27                             protocol_type, NUM_PROTOCOL_TYPES);
     28 }
     29 
     30 SocketStreamMetrics::~SocketStreamMetrics() {}
     31 
     32 void SocketStreamMetrics::OnWaitConnection() {
     33   wait_start_time_ = base::TimeTicks::Now();
     34 }
     35 
     36 void SocketStreamMetrics::OnStartConnection() {
     37   connect_start_time_ = base::TimeTicks::Now();
     38   if (!wait_start_time_.is_null())
     39     UMA_HISTOGRAM_TIMES("Net.SocketStream.ConnectionLatency",
     40                         connect_start_time_ - wait_start_time_);
     41   OnCountConnectionType(ALL_CONNECTIONS);
     42 }
     43 
     44 void SocketStreamMetrics::OnConnected() {
     45   connect_establish_time_ = base::TimeTicks::Now();
     46   UMA_HISTOGRAM_TIMES("Net.SocketStream.ConnectionEstablish",
     47                       connect_establish_time_ - connect_start_time_);
     48 }
     49 
     50 void SocketStreamMetrics::OnRead(int len) {
     51   received_bytes_ += len;
     52   ++received_counts_;
     53 }
     54 
     55 void SocketStreamMetrics::OnWrite(int len) {
     56   sent_bytes_ += len;
     57   ++sent_counts_;
     58 }
     59 
     60 void SocketStreamMetrics::OnClose() {
     61   base::TimeTicks closed_time = base::TimeTicks::Now();
     62   if (!connect_establish_time_.is_null()) {
     63     UMA_HISTOGRAM_LONG_TIMES("Net.SocketStream.Duration",
     64                              closed_time - connect_establish_time_);
     65     UMA_HISTOGRAM_COUNTS("Net.SocketStream.ReceivedBytes",
     66                          received_bytes_);
     67     UMA_HISTOGRAM_COUNTS("Net.SocketStream.ReceivedCounts",
     68                          received_counts_);
     69     UMA_HISTOGRAM_COUNTS("Net.SocketStream.SentBytes",
     70                          sent_bytes_);
     71     UMA_HISTOGRAM_COUNTS("Net.SocketStream.SentCounts",
     72                          sent_counts_);
     73   }
     74 }
     75 
     76 void SocketStreamMetrics::OnCountConnectionType(ConnectionType type) {
     77   UMA_HISTOGRAM_ENUMERATION("Net.SocketStream.ConnectionType", type,
     78                             NUM_CONNECTION_TYPES);
     79 }
     80 
     81 void SocketStreamMetrics::OnCountWireProtocolType(WireProtocolType type) {
     82   UMA_HISTOGRAM_ENUMERATION("Net.SocketStream.WireProtocolType", type,
     83                             NUM_WIRE_PROTOCOL_TYPES);
     84 }
     85 
     86 }  // namespace net
     87