| /* |
| * Copyright 2018 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. |
| */ |
| package com.android.bluetooth.btservice; |
| |
| import com.android.bluetooth.BluetoothMetricsProto.BluetoothLog; |
| import com.android.bluetooth.BluetoothMetricsProto.ProfileConnectionStats; |
| import com.android.bluetooth.BluetoothMetricsProto.ProfileId; |
| |
| import java.util.HashMap; |
| |
| /** |
| * Class with static methods for logging metrics data |
| */ |
| public class MetricsLogger { |
| private static final HashMap<ProfileId, Integer> sProfileConnectionCounts = new HashMap<>(); |
| |
| /** |
| * Log profile connection event by incrementing an internal counter for that profile. |
| * This log persists over adapter enable/disable and only get cleared when metrics are |
| * dumped or when Bluetooth process is killed. |
| * |
| * @param profileId Bluetooth profile that is connected at this event |
| */ |
| public static void logProfileConnectionEvent(ProfileId profileId) { |
| synchronized (sProfileConnectionCounts) { |
| sProfileConnectionCounts.merge(profileId, 1, Integer::sum); |
| } |
| } |
| |
| /** |
| * Dump collected metrics into proto using a builder. |
| * Clean up internal data after the dump. |
| * |
| * @param metricsBuilder proto builder for {@link BluetoothLog} |
| */ |
| public static void dumpProto(BluetoothLog.Builder metricsBuilder) { |
| synchronized (sProfileConnectionCounts) { |
| sProfileConnectionCounts.forEach( |
| (key, value) -> metricsBuilder.addProfileConnectionStats( |
| ProfileConnectionStats.newBuilder() |
| .setProfileId(key) |
| .setNumTimesConnected(value) |
| .build())); |
| sProfileConnectionCounts.clear(); |
| } |
| } |
| } |