Home | History | Annotate | Download | only in webrtc
      1 /*
      2  * libjingle
      3  * Copyright 2014 Google Inc.
      4  *
      5  * Redistribution and use in source and binary forms, with or without
      6  * modification, are permitted provided that the following conditions are met:
      7  *
      8  *  1. Redistributions of source code must retain the above copyright notice,
      9  *     this list of conditions and the following disclaimer.
     10  *  2. Redistributions in binary form must reproduce the above copyright notice,
     11  *     this list of conditions and the following disclaimer in the documentation
     12  *     and/or other materials provided with the distribution.
     13  *  3. The name of the author may not be used to endorse or promote products
     14  *     derived from this software without specific prior written permission.
     15  *
     16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
     17  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     18  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
     19  * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     20  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     21  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
     22  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     23  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
     24  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
     25  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     26  */
     27 
     28 // This file contains enums related to IPv4/IPv6 metrics.
     29 
     30 #ifndef TALK_APP_WEBRTC_UMAMETRICS_H_
     31 #define TALK_APP_WEBRTC_UMAMETRICS_H_
     32 
     33 namespace webrtc {
     34 
     35 // Used to specify which enum counter type we're incrementing in
     36 // MetricsObserverInterface::IncrementEnumCounter.
     37 enum PeerConnectionEnumCounterType {
     38   kEnumCounterAddressFamily,
     39   // For the next 2 counters, we track them separately based on the "first hop"
     40   // protocol used by the local candidate. "First hop" means the local candidate
     41   // type in the case of non-TURN candidates, and the protocol used to connect
     42   // to the TURN server in the case of TURN candidates.
     43   kEnumCounterIceCandidatePairTypeUdp,
     44   kEnumCounterIceCandidatePairTypeTcp,
     45 
     46   kEnumCounterAudioSrtpCipher,
     47   kEnumCounterAudioSslCipher,
     48   kEnumCounterVideoSrtpCipher,
     49   kEnumCounterVideoSslCipher,
     50   kEnumCounterDataSrtpCipher,
     51   kEnumCounterDataSslCipher,
     52   kPeerConnectionEnumCounterMax
     53 };
     54 
     55 // Currently this contains information related to WebRTC network/transport
     56 // information.
     57 
     58 // The difference between PeerConnectionEnumCounter and
     59 // PeerConnectionMetricsName is that the "EnumCounter" is only counting the
     60 // occurrences of events, while "Name" has a value associated with it which is
     61 // used to form a histogram.
     62 
     63 // This enum is backed by Chromium's histograms.xml,
     64 // chromium/src/tools/metrics/histograms/histograms.xml
     65 // Existing values cannot be re-ordered and new enums must be added
     66 // before kBoundary.
     67 enum PeerConnectionAddressFamilyCounter {
     68   kPeerConnection_IPv4,
     69   kPeerConnection_IPv6,
     70   kBestConnections_IPv4,
     71   kBestConnections_IPv6,
     72   kPeerConnectionAddressFamilyCounter_Max,
     73 };
     74 
     75 // TODO(guoweis): Keep previous name here until all references are renamed.
     76 #define kBoundary kPeerConnectionAddressFamilyCounter_Max
     77 
     78 // TODO(guoweis): Keep previous name here until all references are renamed.
     79 typedef PeerConnectionAddressFamilyCounter PeerConnectionUMAMetricsCounter;
     80 
     81 // This enum defines types for UMA samples, which will have a range.
     82 enum PeerConnectionMetricsName {
     83   kNetworkInterfaces_IPv4,  // Number of IPv4 interfaces.
     84   kNetworkInterfaces_IPv6,  // Number of IPv6 interfaces.
     85   kTimeToConnect,           // In milliseconds.
     86   kLocalCandidates_IPv4,    // Number of IPv4 local candidates.
     87   kLocalCandidates_IPv6,    // Number of IPv6 local candidates.
     88   kPeerConnectionMetricsName_Max
     89 };
     90 
     91 // TODO(guoweis): Keep previous name here until all references are renamed.
     92 typedef PeerConnectionMetricsName PeerConnectionUMAMetricsName;
     93 
     94 // The IceCandidatePairType has the format of
     95 // <local_candidate_type>_<remote_candidate_type>. It is recorded based on the
     96 // type of candidate pair used when the PeerConnection first goes to a completed
     97 // state. When BUNDLE is enabled, only the first transport gets recorded.
     98 enum IceCandidatePairType {
     99   // HostHost is deprecated. It was replaced with the set of types at the bottom
    100   // to report private or public host IP address.
    101   kIceCandidatePairHostHost,
    102   kIceCandidatePairHostSrflx,
    103   kIceCandidatePairHostRelay,
    104   kIceCandidatePairHostPrflx,
    105   kIceCandidatePairSrflxHost,
    106   kIceCandidatePairSrflxSrflx,
    107   kIceCandidatePairSrflxRelay,
    108   kIceCandidatePairSrflxPrflx,
    109   kIceCandidatePairRelayHost,
    110   kIceCandidatePairRelaySrflx,
    111   kIceCandidatePairRelayRelay,
    112   kIceCandidatePairRelayPrflx,
    113   kIceCandidatePairPrflxHost,
    114   kIceCandidatePairPrflxSrflx,
    115   kIceCandidatePairPrflxRelay,
    116 
    117   // The following 4 types tell whether local and remote hosts have private or
    118   // public IP addresses.
    119   kIceCandidatePairHostPrivateHostPrivate,
    120   kIceCandidatePairHostPrivateHostPublic,
    121   kIceCandidatePairHostPublicHostPrivate,
    122   kIceCandidatePairHostPublicHostPublic,
    123   kIceCandidatePairMax
    124 };
    125 
    126 }  // namespace webrtc
    127 
    128 #endif  // TALK_APP_WEBRTC_UMAMETRICS_H_
    129