xref: /aosp_15_r20/external/webrtc/pc/usage_pattern.cc (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 #include "pc/usage_pattern.h"
12*d9f75844SAndroid Build Coastguard Worker 
13*d9f75844SAndroid Build Coastguard Worker #include "api/peer_connection_interface.h"
14*d9f75844SAndroid Build Coastguard Worker #include "rtc_base/logging.h"
15*d9f75844SAndroid Build Coastguard Worker #include "system_wrappers/include/metrics.h"
16*d9f75844SAndroid Build Coastguard Worker 
17*d9f75844SAndroid Build Coastguard Worker namespace webrtc {
18*d9f75844SAndroid Build Coastguard Worker 
NoteUsageEvent(UsageEvent event)19*d9f75844SAndroid Build Coastguard Worker void UsagePattern::NoteUsageEvent(UsageEvent event) {
20*d9f75844SAndroid Build Coastguard Worker   usage_event_accumulator_ |= static_cast<int>(event);
21*d9f75844SAndroid Build Coastguard Worker }
22*d9f75844SAndroid Build Coastguard Worker 
ReportUsagePattern(PeerConnectionObserver * observer) const23*d9f75844SAndroid Build Coastguard Worker void UsagePattern::ReportUsagePattern(PeerConnectionObserver* observer) const {
24*d9f75844SAndroid Build Coastguard Worker   RTC_DLOG(LS_INFO) << "Usage signature is " << usage_event_accumulator_;
25*d9f75844SAndroid Build Coastguard Worker   RTC_HISTOGRAM_ENUMERATION_SPARSE("WebRTC.PeerConnection.UsagePattern",
26*d9f75844SAndroid Build Coastguard Worker                                    usage_event_accumulator_,
27*d9f75844SAndroid Build Coastguard Worker                                    static_cast<int>(UsageEvent::MAX_VALUE));
28*d9f75844SAndroid Build Coastguard Worker   const int bad_bits =
29*d9f75844SAndroid Build Coastguard Worker       static_cast<int>(UsageEvent::SET_LOCAL_DESCRIPTION_SUCCEEDED) |
30*d9f75844SAndroid Build Coastguard Worker       static_cast<int>(UsageEvent::CANDIDATE_COLLECTED);
31*d9f75844SAndroid Build Coastguard Worker   const int good_bits =
32*d9f75844SAndroid Build Coastguard Worker       static_cast<int>(UsageEvent::SET_REMOTE_DESCRIPTION_SUCCEEDED) |
33*d9f75844SAndroid Build Coastguard Worker       static_cast<int>(UsageEvent::REMOTE_CANDIDATE_ADDED) |
34*d9f75844SAndroid Build Coastguard Worker       static_cast<int>(UsageEvent::ICE_STATE_CONNECTED);
35*d9f75844SAndroid Build Coastguard Worker   if ((usage_event_accumulator_ & bad_bits) == bad_bits &&
36*d9f75844SAndroid Build Coastguard Worker       (usage_event_accumulator_ & good_bits) == 0) {
37*d9f75844SAndroid Build Coastguard Worker     // If called after close(), we can't report, because observer may have
38*d9f75844SAndroid Build Coastguard Worker     // been deallocated, and therefore pointer is null. Write to log instead.
39*d9f75844SAndroid Build Coastguard Worker     if (observer) {
40*d9f75844SAndroid Build Coastguard Worker       observer->OnInterestingUsage(usage_event_accumulator_);
41*d9f75844SAndroid Build Coastguard Worker     } else {
42*d9f75844SAndroid Build Coastguard Worker       RTC_LOG(LS_INFO) << "Interesting usage signature "
43*d9f75844SAndroid Build Coastguard Worker                        << usage_event_accumulator_
44*d9f75844SAndroid Build Coastguard Worker                        << " observed after observer shutdown";
45*d9f75844SAndroid Build Coastguard Worker     }
46*d9f75844SAndroid Build Coastguard Worker   }
47*d9f75844SAndroid Build Coastguard Worker }
48*d9f75844SAndroid Build Coastguard Worker 
49*d9f75844SAndroid Build Coastguard Worker }  // namespace webrtc
50