|  | /* | 
|  | *  Copyright 2020 The WebRTC project authors. All Rights Reserved. | 
|  | * | 
|  | *  Use of this source code is governed by a BSD-style license | 
|  | *  that can be found in the LICENSE file in the root of the source | 
|  | *  tree. An additional intellectual property rights grant can be found | 
|  | *  in the file PATENTS.  All contributing project authors may | 
|  | *  be found in the AUTHORS file in the root of the source tree. | 
|  | */ | 
|  |  | 
|  | #ifndef PC_USAGE_PATTERN_H_ | 
|  | #define PC_USAGE_PATTERN_H_ | 
|  |  | 
|  | #include "api/peer_connection_interface.h" | 
|  |  | 
|  | namespace webrtc { | 
|  |  | 
|  | class PeerConnectionObserver; | 
|  |  | 
|  | // A bit in the usage pattern is registered when its defining event occurs | 
|  | // at least once. | 
|  | enum class UsageEvent : int { | 
|  | TURN_SERVER_ADDED = 0x01, | 
|  | STUN_SERVER_ADDED = 0x02, | 
|  | DATA_ADDED = 0x04, | 
|  | AUDIO_ADDED = 0x08, | 
|  | VIDEO_ADDED = 0x10, | 
|  | // `SetLocalDescription` returns successfully. | 
|  | SET_LOCAL_DESCRIPTION_SUCCEEDED = 0x20, | 
|  | // `SetRemoteDescription` returns successfully. | 
|  | SET_REMOTE_DESCRIPTION_SUCCEEDED = 0x40, | 
|  | // A local candidate (with type host, server-reflexive, or relay) is | 
|  | // collected. | 
|  | CANDIDATE_COLLECTED = 0x80, | 
|  | // A remote candidate is successfully added via `AddIceCandidate`. | 
|  | ADD_ICE_CANDIDATE_SUCCEEDED = 0x100, | 
|  | ICE_STATE_CONNECTED = 0x200, | 
|  | CLOSE_CALLED = 0x400, | 
|  | // A local candidate with private IP is collected. | 
|  | PRIVATE_CANDIDATE_COLLECTED = 0x800, | 
|  | // A remote candidate with private IP is added, either via AddiceCandidate | 
|  | // or from the remote description. | 
|  | REMOTE_PRIVATE_CANDIDATE_ADDED = 0x1000, | 
|  | // A local mDNS candidate is collected. | 
|  | MDNS_CANDIDATE_COLLECTED = 0x2000, | 
|  | // A remote mDNS candidate is added, either via AddIceCandidate or from the | 
|  | // remote description. | 
|  | REMOTE_MDNS_CANDIDATE_ADDED = 0x4000, | 
|  | // A local candidate with IPv6 address is collected. | 
|  | IPV6_CANDIDATE_COLLECTED = 0x8000, | 
|  | // A remote candidate with IPv6 address is added, either via AddIceCandidate | 
|  | // or from the remote description. | 
|  | REMOTE_IPV6_CANDIDATE_ADDED = 0x10000, | 
|  | // A remote candidate (with type host, server-reflexive, or relay) is | 
|  | // successfully added, either via AddIceCandidate or from the remote | 
|  | // description. | 
|  | REMOTE_CANDIDATE_ADDED = 0x20000, | 
|  | // An explicit host-host candidate pair is selected, i.e. both the local and | 
|  | // the remote candidates have the host type. This does not include candidate | 
|  | // pairs formed with equivalent prflx remote candidates, e.g. a host-prflx | 
|  | // pair where the prflx candidate has the same base as a host candidate of | 
|  | // the remote peer. | 
|  | DIRECT_CONNECTION_SELECTED = 0x40000, | 
|  | MAX_VALUE = 0x80000, | 
|  | }; | 
|  |  | 
|  | class UsagePattern { | 
|  | public: | 
|  | void NoteUsageEvent(UsageEvent event); | 
|  | void ReportUsagePattern(PeerConnectionObserver* observer) const; | 
|  |  | 
|  | private: | 
|  | int usage_event_accumulator_ = 0; | 
|  | }; | 
|  |  | 
|  | }  // namespace webrtc | 
|  | #endif  // PC_USAGE_PATTERN_H_ |