- add sources.
[platform/framework/web/crosswalk.git] / src / net / socket_stream / socket_stream_metrics.cc
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