/* * 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 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(); } } }