summaryrefslogtreecommitdiff
path: root/system/main/shim/metrics_api.cc
blob: 99832be02348f57fd6f5f6bfe5e8c423ebf3a812 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
/*
 * Copyright 2021 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "main/shim/metrics_api.h"
#include "gd/hci/address.h"
#include "gd/metrics/counter_metrics.h"
#include "gd/os/metrics.h"
#include "main/shim/entry.h"
#include "main/shim/helpers.h"
#include "types/raw_address.h"

using bluetooth::hci::Address;

namespace bluetooth {
namespace shim {
void LogMetricLinkLayerConnectionEvent(
    const RawAddress* raw_address, uint32_t connection_handle,
    android::bluetooth::DirectionEnum direction, uint16_t link_type,
    uint32_t hci_cmd, uint16_t hci_event, uint16_t hci_ble_event,
    uint16_t cmd_status, uint16_t reason_code) {
  Address address = Address::kEmpty;
  if (raw_address != nullptr) {
    address = bluetooth::ToGdAddress(*raw_address);
  }
  bluetooth::os::LogMetricLinkLayerConnectionEvent(
      raw_address == nullptr ? nullptr : &address, connection_handle, direction,
      link_type, hci_cmd, hci_event, hci_ble_event, cmd_status, reason_code);
}

void LogMetricA2dpAudioUnderrunEvent(const RawAddress& raw_address,
                                     uint64_t encoding_interval_millis,
                                     int num_missing_pcm_bytes) {
  Address address = bluetooth::ToGdAddress(raw_address);
  bluetooth::os::LogMetricA2dpAudioUnderrunEvent(
      address, encoding_interval_millis, num_missing_pcm_bytes);
}

void LogMetricA2dpAudioOverrunEvent(const RawAddress& raw_address,
                                    uint64_t encoding_interval_millis,
                                    int num_dropped_buffers,
                                    int num_dropped_encoded_frames,
                                    int num_dropped_encoded_bytes) {
  Address address = bluetooth::ToGdAddress(raw_address);
  bluetooth::os::LogMetricA2dpAudioOverrunEvent(
      address, encoding_interval_millis, num_dropped_buffers,
      num_dropped_encoded_frames, num_dropped_encoded_bytes);
}

void LogMetricA2dpPlaybackEvent(const RawAddress& raw_address,
                                int playback_state, int audio_coding_mode) {
  Address address = bluetooth::ToGdAddress(raw_address);
  bluetooth::os::LogMetricA2dpPlaybackEvent(address, playback_state,
                                            audio_coding_mode);
}

void LogMetricReadRssiResult(const RawAddress& raw_address, uint16_t handle,
                             uint32_t cmd_status, int8_t rssi) {
  Address address = bluetooth::ToGdAddress(raw_address);
  bluetooth::os::LogMetricReadRssiResult(address, handle, cmd_status, rssi);
}

void LogMetricReadFailedContactCounterResult(const RawAddress& raw_address,
                                             uint16_t handle,
                                             uint32_t cmd_status,
                                             int32_t failed_contact_counter) {
  Address address = bluetooth::ToGdAddress(raw_address);
  bluetooth::os::LogMetricReadFailedContactCounterResult(
      address, handle, cmd_status, failed_contact_counter);
}

void LogMetricReadTxPowerLevelResult(const RawAddress& raw_address,
                                     uint16_t handle, uint32_t cmd_status,
                                     int32_t transmit_power_level) {
  Address address = bluetooth::ToGdAddress(raw_address);
  bluetooth::os::LogMetricReadTxPowerLevelResult(address, handle, cmd_status,
                                                 transmit_power_level);
}

void LogMetricSmpPairingEvent(const RawAddress& raw_address, uint8_t smp_cmd,
                              android::bluetooth::DirectionEnum direction,
                              uint8_t smp_fail_reason) {
  Address address = bluetooth::ToGdAddress(raw_address);
  bluetooth::os::LogMetricSmpPairingEvent(address, smp_cmd, direction,
                                          smp_fail_reason);
}

void LogMetricClassicPairingEvent(const RawAddress& raw_address,
                                  uint16_t handle, uint32_t hci_cmd,
                                  uint16_t hci_event, uint16_t cmd_status,
                                  uint16_t reason_code, int64_t event_value) {
  Address address = bluetooth::ToGdAddress(raw_address);
  bluetooth::os::LogMetricClassicPairingEvent(address, handle, hci_cmd,
                                              hci_event, cmd_status,
                                              reason_code, event_value);
}

void LogMetricSdpAttribute(const RawAddress& raw_address,
                           uint16_t protocol_uuid, uint16_t attribute_id,
                           size_t attribute_size, const char* attribute_value) {
  Address address = bluetooth::ToGdAddress(raw_address);
  bluetooth::os::LogMetricSdpAttribute(address, protocol_uuid, attribute_id,
                                       attribute_size, attribute_value);
}

void LogMetricSocketConnectionState(
    const RawAddress& raw_address, int port, int type,
    android::bluetooth::SocketConnectionstateEnum connection_state,
    int64_t tx_bytes, int64_t rx_bytes, int uid, int server_port,
    android::bluetooth::SocketRoleEnum socket_role) {
  Address address = bluetooth::ToGdAddress(raw_address);
  bluetooth::os::LogMetricSocketConnectionState(
      address, port, type, connection_state, tx_bytes, rx_bytes, uid,
      server_port, socket_role);
}

void LogMetricManufacturerInfo(
    const RawAddress& raw_address,
    android::bluetooth::AddressTypeEnum address_type,
    android::bluetooth::DeviceInfoSrcEnum source_type,
    const std::string& source_name, const std::string& manufacturer,
    const std::string& model, const std::string& hardware_version,
    const std::string& software_version) {
  Address address = bluetooth::ToGdAddress(raw_address);
  bluetooth::os::LogMetricManufacturerInfo(address, address_type, source_type,
                                           source_name, manufacturer, model,
                                           hardware_version, software_version);
}

bool CountCounterMetrics(int32_t key, int64_t count) {
  auto counter_metrics = GetCounterMetrics();
  if (counter_metrics == nullptr) {
    return false;
  }
  return counter_metrics->Count(key, count);
}
}  // namespace shim
}  // namespace bluetooth