xref: /aosp_15_r20/external/webrtc/pc/usage_pattern.h (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1*d9f75844SAndroid Build Coastguard Worker /*
2*d9f75844SAndroid Build Coastguard Worker  *  Copyright 2020 The WebRTC project authors. All Rights Reserved.
3*d9f75844SAndroid Build Coastguard Worker  *
4*d9f75844SAndroid Build Coastguard Worker  *  Use of this source code is governed by a BSD-style license
5*d9f75844SAndroid Build Coastguard Worker  *  that can be found in the LICENSE file in the root of the source
6*d9f75844SAndroid Build Coastguard Worker  *  tree. An additional intellectual property rights grant can be found
7*d9f75844SAndroid Build Coastguard Worker  *  in the file PATENTS.  All contributing project authors may
8*d9f75844SAndroid Build Coastguard Worker  *  be found in the AUTHORS file in the root of the source tree.
9*d9f75844SAndroid Build Coastguard Worker  */
10*d9f75844SAndroid Build Coastguard Worker 
11*d9f75844SAndroid Build Coastguard Worker #ifndef PC_USAGE_PATTERN_H_
12*d9f75844SAndroid Build Coastguard Worker #define PC_USAGE_PATTERN_H_
13*d9f75844SAndroid Build Coastguard Worker 
14*d9f75844SAndroid Build Coastguard Worker #include "api/peer_connection_interface.h"
15*d9f75844SAndroid Build Coastguard Worker 
16*d9f75844SAndroid Build Coastguard Worker namespace webrtc {
17*d9f75844SAndroid Build Coastguard Worker 
18*d9f75844SAndroid Build Coastguard Worker class PeerConnectionObserver;
19*d9f75844SAndroid Build Coastguard Worker 
20*d9f75844SAndroid Build Coastguard Worker // A bit in the usage pattern is registered when its defining event occurs
21*d9f75844SAndroid Build Coastguard Worker // at least once.
22*d9f75844SAndroid Build Coastguard Worker enum class UsageEvent : int {
23*d9f75844SAndroid Build Coastguard Worker   TURN_SERVER_ADDED = 0x01,
24*d9f75844SAndroid Build Coastguard Worker   STUN_SERVER_ADDED = 0x02,
25*d9f75844SAndroid Build Coastguard Worker   DATA_ADDED = 0x04,
26*d9f75844SAndroid Build Coastguard Worker   AUDIO_ADDED = 0x08,
27*d9f75844SAndroid Build Coastguard Worker   VIDEO_ADDED = 0x10,
28*d9f75844SAndroid Build Coastguard Worker   // `SetLocalDescription` returns successfully.
29*d9f75844SAndroid Build Coastguard Worker   SET_LOCAL_DESCRIPTION_SUCCEEDED = 0x20,
30*d9f75844SAndroid Build Coastguard Worker   // `SetRemoteDescription` returns successfully.
31*d9f75844SAndroid Build Coastguard Worker   SET_REMOTE_DESCRIPTION_SUCCEEDED = 0x40,
32*d9f75844SAndroid Build Coastguard Worker   // A local candidate (with type host, server-reflexive, or relay) is
33*d9f75844SAndroid Build Coastguard Worker   // collected.
34*d9f75844SAndroid Build Coastguard Worker   CANDIDATE_COLLECTED = 0x80,
35*d9f75844SAndroid Build Coastguard Worker   // A remote candidate is successfully added via `AddIceCandidate`.
36*d9f75844SAndroid Build Coastguard Worker   ADD_ICE_CANDIDATE_SUCCEEDED = 0x100,
37*d9f75844SAndroid Build Coastguard Worker   ICE_STATE_CONNECTED = 0x200,
38*d9f75844SAndroid Build Coastguard Worker   CLOSE_CALLED = 0x400,
39*d9f75844SAndroid Build Coastguard Worker   // A local candidate with private IP is collected.
40*d9f75844SAndroid Build Coastguard Worker   PRIVATE_CANDIDATE_COLLECTED = 0x800,
41*d9f75844SAndroid Build Coastguard Worker   // A remote candidate with private IP is added, either via AddiceCandidate
42*d9f75844SAndroid Build Coastguard Worker   // or from the remote description.
43*d9f75844SAndroid Build Coastguard Worker   REMOTE_PRIVATE_CANDIDATE_ADDED = 0x1000,
44*d9f75844SAndroid Build Coastguard Worker   // A local mDNS candidate is collected.
45*d9f75844SAndroid Build Coastguard Worker   MDNS_CANDIDATE_COLLECTED = 0x2000,
46*d9f75844SAndroid Build Coastguard Worker   // A remote mDNS candidate is added, either via AddIceCandidate or from the
47*d9f75844SAndroid Build Coastguard Worker   // remote description.
48*d9f75844SAndroid Build Coastguard Worker   REMOTE_MDNS_CANDIDATE_ADDED = 0x4000,
49*d9f75844SAndroid Build Coastguard Worker   // A local candidate with IPv6 address is collected.
50*d9f75844SAndroid Build Coastguard Worker   IPV6_CANDIDATE_COLLECTED = 0x8000,
51*d9f75844SAndroid Build Coastguard Worker   // A remote candidate with IPv6 address is added, either via AddIceCandidate
52*d9f75844SAndroid Build Coastguard Worker   // or from the remote description.
53*d9f75844SAndroid Build Coastguard Worker   REMOTE_IPV6_CANDIDATE_ADDED = 0x10000,
54*d9f75844SAndroid Build Coastguard Worker   // A remote candidate (with type host, server-reflexive, or relay) is
55*d9f75844SAndroid Build Coastguard Worker   // successfully added, either via AddIceCandidate or from the remote
56*d9f75844SAndroid Build Coastguard Worker   // description.
57*d9f75844SAndroid Build Coastguard Worker   REMOTE_CANDIDATE_ADDED = 0x20000,
58*d9f75844SAndroid Build Coastguard Worker   // An explicit host-host candidate pair is selected, i.e. both the local and
59*d9f75844SAndroid Build Coastguard Worker   // the remote candidates have the host type. This does not include candidate
60*d9f75844SAndroid Build Coastguard Worker   // pairs formed with equivalent prflx remote candidates, e.g. a host-prflx
61*d9f75844SAndroid Build Coastguard Worker   // pair where the prflx candidate has the same base as a host candidate of
62*d9f75844SAndroid Build Coastguard Worker   // the remote peer.
63*d9f75844SAndroid Build Coastguard Worker   DIRECT_CONNECTION_SELECTED = 0x40000,
64*d9f75844SAndroid Build Coastguard Worker   MAX_VALUE = 0x80000,
65*d9f75844SAndroid Build Coastguard Worker };
66*d9f75844SAndroid Build Coastguard Worker 
67*d9f75844SAndroid Build Coastguard Worker class UsagePattern {
68*d9f75844SAndroid Build Coastguard Worker  public:
69*d9f75844SAndroid Build Coastguard Worker   void NoteUsageEvent(UsageEvent event);
70*d9f75844SAndroid Build Coastguard Worker   void ReportUsagePattern(PeerConnectionObserver* observer) const;
71*d9f75844SAndroid Build Coastguard Worker 
72*d9f75844SAndroid Build Coastguard Worker  private:
73*d9f75844SAndroid Build Coastguard Worker   int usage_event_accumulator_ = 0;
74*d9f75844SAndroid Build Coastguard Worker };
75*d9f75844SAndroid Build Coastguard Worker 
76*d9f75844SAndroid Build Coastguard Worker }  // namespace webrtc
77*d9f75844SAndroid Build Coastguard Worker #endif  // PC_USAGE_PATTERN_H_
78