1f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He/****************************************************************************** 2f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 3f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * Copyright (C) 2016 Google, Inc. 4f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 5f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * Licensed under the Apache License, Version 2.0 (the "License"); 6f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * you may not use this file except in compliance with the License. 7f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * You may obtain a copy of the License at: 8f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 9f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * http://www.apache.org/licenses/LICENSE-2.0 10f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 11f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * Unless required by applicable law or agreed to in writing, software 12f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * distributed under the License is distributed on an "AS IS" BASIS, 13f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * See the License for the specific language governing permissions and 15f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * limitations under the License. 16f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 17f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He ******************************************************************************/ 18f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He#include <chrono> 19f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He#include <cstdint> 20f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He#include <string> 21f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He#include <thread> 22f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He#include <vector> 23f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 24f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He#include <gmock/gmock.h> 25f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He#include <gtest/gtest.h> 26f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 27f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He#include <base/logging.h> 28f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 29f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He#include "osi/include/metrics.h" 30f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He#include "osi/include/time.h" 31e2eeff4f7f149c59ea8cb67392f287317f40f9bdJack He#include "src/protos/bluetooth.pb.h" 32f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 33f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He#define BTM_COD_MAJOR_AUDIO_TEST 0x04 34f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 35f3175629208a64b190dde4dcf5f92cacef70d3e9Jack Henamespace testing { 36f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 37f3175629208a64b190dde4dcf5f92cacef70d3e9Jack Heusing clearcut::connectivity::A2DPSession; 38f3175629208a64b190dde4dcf5f92cacef70d3e9Jack Heusing clearcut::connectivity::BluetoothLog; 39f3175629208a64b190dde4dcf5f92cacef70d3e9Jack Heusing clearcut::connectivity::BluetoothSession; 40f3175629208a64b190dde4dcf5f92cacef70d3e9Jack Heusing clearcut::connectivity::BluetoothSession_ConnectionTechnologyType; 41a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack Heusing clearcut::connectivity::BluetoothSession_DisconnectReasonType; 42f3175629208a64b190dde4dcf5f92cacef70d3e9Jack Heusing clearcut::connectivity::DeviceInfo; 43f3175629208a64b190dde4dcf5f92cacef70d3e9Jack Heusing clearcut::connectivity::DeviceInfo_DeviceType; 44f3175629208a64b190dde4dcf5f92cacef70d3e9Jack Heusing clearcut::connectivity::PairEvent; 45f3175629208a64b190dde4dcf5f92cacef70d3e9Jack Heusing clearcut::connectivity::RFCommSession; 46f3175629208a64b190dde4dcf5f92cacef70d3e9Jack Heusing clearcut::connectivity::ScanEvent; 47f3175629208a64b190dde4dcf5f92cacef70d3e9Jack Heusing clearcut::connectivity::ScanEvent_ScanTechnologyType; 48f3175629208a64b190dde4dcf5f92cacef70d3e9Jack Heusing clearcut::connectivity::ScanEvent_ScanEventType; 49f3175629208a64b190dde4dcf5f92cacef70d3e9Jack Heusing clearcut::connectivity::WakeEvent; 50f3175629208a64b190dde4dcf5f92cacef70d3e9Jack Heusing clearcut::connectivity::WakeEvent_WakeEventType; 51f3175629208a64b190dde4dcf5f92cacef70d3e9Jack Heusing system_bt_osi::BluetoothMetricsLogger; 52f3175629208a64b190dde4dcf5f92cacef70d3e9Jack Heusing system_bt_osi::A2dpSessionMetrics; 53f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 54a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack Henamespace { 55a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack Heconst size_t kMaxEventGenerationLimit = 5000; 56a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He} 57a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He 58f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He/* 59f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * Get current OS boot time in ms 60f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He */ 61f3175629208a64b190dde4dcf5f92cacef70d3e9Jack Hestatic int64_t time_get_os_boottime_ms(void) { 62f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He return time_get_os_boottime_us() / 1000; 63f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He} 64f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 65f3175629208a64b190dde4dcf5f92cacef70d3e9Jack Hestatic void sleep_ms(int64_t t) { 66f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He std::this_thread::sleep_for(std::chrono::milliseconds(t)); 67f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He} 68f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 69f3175629208a64b190dde4dcf5f92cacef70d3e9Jack HeDeviceInfo* MakeDeviceInfo(int32_t device_class, 70f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He DeviceInfo_DeviceType device_type) { 71f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He DeviceInfo* info = new DeviceInfo(); 72f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He info->set_device_class(device_class); 73f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He info->set_device_type(device_type); 74f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He return info; 75f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He} 76f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 77f3175629208a64b190dde4dcf5f92cacef70d3e9Jack HePairEvent* MakePairEvent(int32_t disconnect_reason, int64_t timestamp_ms, 78f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He DeviceInfo* device_info) { 79f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He PairEvent* event = new PairEvent(); 80f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He event->set_disconnect_reason(disconnect_reason); 81f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He event->set_event_time_millis(timestamp_ms); 82f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He if (device_info) event->set_allocated_device_paired_with(device_info); 83f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He return event; 84f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He} 85f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 86f3175629208a64b190dde4dcf5f92cacef70d3e9Jack HeWakeEvent* MakeWakeEvent(WakeEvent_WakeEventType event_type, 87f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He const std::string& requestor, const std::string& name, 88f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He int64_t timestamp_ms) { 89f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He WakeEvent* event = new WakeEvent(); 90f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He event->set_wake_event_type(event_type); 91f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He event->set_requestor(requestor); 92f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He event->set_name(name); 93f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He event->set_event_time_millis(timestamp_ms); 94f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He return event; 95f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He} 96f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 97f3175629208a64b190dde4dcf5f92cacef70d3e9Jack HeScanEvent* MakeScanEvent(ScanEvent_ScanEventType event_type, 98f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He const std::string& initiator, 99f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He ScanEvent_ScanTechnologyType tech_type, 100f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He int32_t num_results, int64_t timestamp_ms) { 101f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He ScanEvent* event = new ScanEvent(); 102f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He event->set_scan_event_type(event_type); 103f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He event->set_initiator(initiator); 104f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He event->set_scan_technology_type(tech_type); 105f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He event->set_number_results(num_results); 106f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He event->set_event_time_millis(timestamp_ms); 107f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He return event; 108f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He} 109f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 110f3175629208a64b190dde4dcf5f92cacef70d3e9Jack HeA2DPSession* MakeA2DPSession(const A2dpSessionMetrics& metrics) { 111f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He A2DPSession* session = new A2DPSession(); 112f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He session->set_media_timer_min_millis(metrics.media_timer_min_ms); 113f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He session->set_media_timer_max_millis(metrics.media_timer_max_ms); 114f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He session->set_media_timer_avg_millis(metrics.media_timer_avg_ms); 115f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He session->set_buffer_overruns_max_count(metrics.buffer_overruns_max_count); 116f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He session->set_buffer_overruns_total(metrics.buffer_overruns_total); 117f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He session->set_buffer_underruns_average(metrics.buffer_underruns_average); 118f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He session->set_buffer_underruns_count(metrics.buffer_underruns_count); 119f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He session->set_audio_duration_millis(metrics.audio_duration_ms); 120f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He return session; 121f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He} 122f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 123f3175629208a64b190dde4dcf5f92cacef70d3e9Jack HeBluetoothSession* MakeBluetoothSession( 124f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He int64_t session_duration_sec, 125f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothSession_ConnectionTechnologyType conn_type, 126a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He BluetoothSession_DisconnectReasonType disconnect_reason, 127a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He DeviceInfo* device_info, RFCommSession* rfcomm_session, 128a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He A2DPSession* a2dp_session) { 129f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothSession* session = new BluetoothSession(); 130f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He if (a2dp_session) session->set_allocated_a2dp_session(a2dp_session); 131f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He if (rfcomm_session) session->set_allocated_rfcomm_session(rfcomm_session); 132f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He if (device_info) session->set_allocated_device_connected_to(device_info); 133f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He session->set_session_duration_sec(session_duration_sec); 134f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He session->set_connection_technology_type(conn_type); 135a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He session->set_disconnect_reason_type(disconnect_reason); 136f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He return session; 137f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He} 138f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 139f3175629208a64b190dde4dcf5f92cacef70d3e9Jack HeBluetoothLog* MakeBluetoothLog(std::vector<BluetoothSession*> bt_sessions, 140f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He std::vector<PairEvent*> pair_events, 141f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He std::vector<WakeEvent*> wake_events, 142f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He std::vector<ScanEvent*> scan_events) { 143f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothLog* bt_log = new BluetoothLog(); 144f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He for (BluetoothSession* session : bt_sessions) { 145f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He bt_log->mutable_session()->AddAllocated(session); 146f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He } 147f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He bt_sessions.clear(); 148f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He for (PairEvent* event : pair_events) { 149f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He bt_log->mutable_pair_event()->AddAllocated(event); 150f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He } 151f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He pair_events.clear(); 152f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He for (WakeEvent* event : wake_events) { 153f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He bt_log->mutable_wake_event()->AddAllocated(event); 154f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He } 155f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He wake_events.clear(); 156f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He for (ScanEvent* event : scan_events) { 157f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He bt_log->mutable_scan_event()->AddAllocated(event); 158f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He } 159f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He scan_events.clear(); 160f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He return bt_log; 161f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He} 162f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 163a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack Hevoid GenerateWakeEvents(size_t start, size_t end, 164f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He std::vector<WakeEvent*>* wake_events) { 165a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He for (size_t i = start; i < end; ++i) { 166f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He wake_events->push_back(MakeWakeEvent( 167f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He i % 2 == 0 ? WakeEvent_WakeEventType::WakeEvent_WakeEventType_ACQUIRED 168f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He : WakeEvent_WakeEventType::WakeEvent_WakeEventType_RELEASED, 169f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He "TEST_REQ", "TEST_NAME", i)); 170f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He } 171f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He} 172f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 173f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He#define COMPARE_A2DP_METRICS(a, b) \ 174f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He do { \ 175f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He EXPECT_EQ(a.audio_duration_ms, b.audio_duration_ms); \ 176f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He EXPECT_EQ(a.media_timer_min_ms, b.media_timer_min_ms); \ 177f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He EXPECT_EQ(a.media_timer_max_ms, b.media_timer_max_ms); \ 178f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He EXPECT_EQ(a.media_timer_avg_ms, b.media_timer_avg_ms); \ 179f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He EXPECT_EQ(a.total_scheduling_count, b.total_scheduling_count); \ 180f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He EXPECT_EQ(a.buffer_overruns_max_count, b.buffer_overruns_max_count); \ 181f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He EXPECT_EQ(a.buffer_overruns_total, b.buffer_overruns_total); \ 182f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He EXPECT_THAT(a.buffer_underruns_average, \ 183f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He FloatNear(b.buffer_underruns_average, 0.01)); \ 184f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He a.buffer_underruns_average = b.buffer_underruns_average; \ 185f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He EXPECT_EQ(a.buffer_underruns_count, b.buffer_underruns_count); \ 186f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He } while (0) 187f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 188f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He/* 189f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * metrics_sum = metrics1 + metrics2 190f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He */ 191f3175629208a64b190dde4dcf5f92cacef70d3e9Jack HeTEST(BluetoothA2DPSessionMetricsTest, TestUpdateNormal) { 192f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He A2dpSessionMetrics metrics1; 193f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He A2dpSessionMetrics metrics2; 194f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He A2dpSessionMetrics metrics_sum; 195f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.audio_duration_ms = 10; 196f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.audio_duration_ms = 25; 197f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.audio_duration_ms = 35; 198f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.media_timer_min_ms = 10; 199f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.media_timer_min_ms = 25; 200f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.media_timer_min_ms = 10; 201f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.media_timer_max_ms = 100; 202f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.media_timer_max_ms = 200; 203f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.media_timer_max_ms = 200; 204f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.media_timer_avg_ms = 50; 205f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.total_scheduling_count = 50; 206f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.media_timer_avg_ms = 100; 207f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.total_scheduling_count = 50; 208f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.media_timer_avg_ms = 75; 209f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.total_scheduling_count = 100; 210f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.buffer_overruns_max_count = 70; 211f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.buffer_overruns_max_count = 80; 212f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.buffer_overruns_max_count = 80; 213f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.buffer_underruns_average = 80; 214f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.buffer_underruns_count = 1200; 215f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.buffer_underruns_average = 130; 216f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.buffer_underruns_count = 2400; 217f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.buffer_underruns_average = 113.33333333; 218f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.buffer_underruns_count = 3600; 219f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.Update(metrics2); 220f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He COMPARE_A2DP_METRICS(metrics1, metrics_sum); 221f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He EXPECT_TRUE(metrics1 == metrics_sum); 222f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He EXPECT_EQ(metrics1, metrics_sum); 223f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He} 224f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 225f3175629208a64b190dde4dcf5f92cacef70d3e9Jack HeTEST(BluetoothA2DPSessionMetricsTest, TestUpdateNew) { 226f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He A2dpSessionMetrics metrics1; 227f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He A2dpSessionMetrics metrics2; 228f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He A2dpSessionMetrics metrics_sum; 229f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.audio_duration_ms = 25; 230f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.audio_duration_ms = 25; 231f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.media_timer_min_ms = 25; 232f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.media_timer_min_ms = 25; 233f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.media_timer_max_ms = 200; 234f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.media_timer_max_ms = 200; 235f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.media_timer_avg_ms = 100; 236f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.total_scheduling_count = 50; 237f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.media_timer_avg_ms = 100; 238f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.total_scheduling_count = 50; 239f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.buffer_overruns_max_count = 80; 240f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.buffer_overruns_max_count = 80; 241f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.buffer_underruns_average = 130; 242f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.buffer_underruns_count = 2400; 243f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.buffer_underruns_average = 130; 244f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.buffer_underruns_count = 2400; 245f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.Update(metrics2); 246f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He COMPARE_A2DP_METRICS(metrics1, metrics_sum); 247f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He EXPECT_TRUE(metrics1 == metrics_sum); 248f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He EXPECT_EQ(metrics1, metrics_sum); 249f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He} 250f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 251f3175629208a64b190dde4dcf5f92cacef70d3e9Jack HeTEST(BluetoothA2DPSessionMetricsTest, TestNullUpdate) { 252f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He A2dpSessionMetrics metrics1; 253f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He A2dpSessionMetrics metrics2; 254f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He A2dpSessionMetrics metrics_sum; 255f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.audio_duration_ms = 25; 256f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.audio_duration_ms = 25; 257f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.media_timer_min_ms = 25; 258f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.media_timer_min_ms = 25; 259f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.media_timer_max_ms = 200; 260f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.media_timer_max_ms = 200; 261f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.media_timer_avg_ms = 100; 262f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.total_scheduling_count = 50; 263f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.media_timer_avg_ms = 100; 264f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.total_scheduling_count = 50; 265f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.buffer_overruns_max_count = 80; 266f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.buffer_overruns_max_count = 80; 267f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.buffer_underruns_average = 130; 268f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.buffer_underruns_count = 2400; 269f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.buffer_underruns_average = 130; 270f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.buffer_underruns_count = 2400; 271f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.Update(metrics1); 272f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He COMPARE_A2DP_METRICS(metrics2, metrics_sum); 273f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He EXPECT_TRUE(metrics2 == metrics_sum); 274f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He EXPECT_EQ(metrics2, metrics_sum); 275f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He} 276f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 277f3175629208a64b190dde4dcf5f92cacef70d3e9Jack HeTEST(BluetoothA2DPSessionMetricsTest, TestPartialUpdate) { 278f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He A2dpSessionMetrics metrics1; 279f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He A2dpSessionMetrics metrics2; 280f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He A2dpSessionMetrics metrics_sum; 281f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.audio_duration_ms = 10; 282f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.audio_duration_ms = 25; 283f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.audio_duration_ms = 35; 284f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.media_timer_min_ms = 10; 285f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.media_timer_min_ms = 10; 286f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.media_timer_max_ms = 100; 287f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.media_timer_max_ms = 100; 288f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.media_timer_avg_ms = 50; 289f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.total_scheduling_count = 50; 290f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.media_timer_avg_ms = 100; 291f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.media_timer_avg_ms = 50; 292f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.total_scheduling_count = 50; 293f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.buffer_overruns_max_count = 70; 294f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.buffer_overruns_max_count = 70; 295f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.buffer_underruns_average = 80; 296f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.buffer_underruns_count = 1200; 297f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.buffer_underruns_count = 2400; 298f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.buffer_underruns_average = 80; 299f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.buffer_underruns_count = 1200; 300f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.Update(metrics2); 301f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He COMPARE_A2DP_METRICS(metrics1, metrics_sum); 302f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He EXPECT_TRUE(metrics1 == metrics_sum); 303f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He EXPECT_EQ(metrics1, metrics_sum); 304f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He} 305f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 306f3175629208a64b190dde4dcf5f92cacef70d3e9Jack Heclass BluetoothMetricsLoggerTest : public Test { 307f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He protected: 308f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He // Use to hold test protos 309f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He std::vector<PairEvent*> pair_events_; 310f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He std::vector<WakeEvent*> wake_events_; 311f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He std::vector<ScanEvent*> scan_events_; 312f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He std::vector<BluetoothSession*> bt_sessions_; 313a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He int64_t num_pair_event_ = 0; 314a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He int64_t num_wake_event_ = 0; 315a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He int64_t num_scan_event_ = 0; 316a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He int64_t num_bt_session_ = 0; 317f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothLog* bt_log_; 318f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He std::string bt_log_str_; 319f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He std::string bt_log_ascii_str_; 320f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 321f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He void UpdateLog() { 322f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He for (BluetoothSession* session : bt_sessions_) { 323f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He bt_log_->mutable_session()->AddAllocated(session); 324f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He } 325a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He if (num_bt_session_ > 0) { 326a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He bt_log_->set_num_bluetooth_session(num_bt_session_); 327a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He } else if (bt_sessions_.size() > 0) { 328a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He bt_log_->set_num_bluetooth_session(bt_sessions_.size()); 329a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He } 330f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He bt_sessions_.clear(); 331f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He for (PairEvent* event : pair_events_) { 332f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He bt_log_->mutable_pair_event()->AddAllocated(event); 333f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He } 334a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He if (num_pair_event_ > 0) { 335a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He bt_log_->set_num_pair_event(num_pair_event_); 336a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He } else if (pair_events_.size() > 0) { 337a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He bt_log_->set_num_pair_event(pair_events_.size()); 338a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He } 339f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He pair_events_.clear(); 340f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He for (WakeEvent* event : wake_events_) { 341f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He bt_log_->mutable_wake_event()->AddAllocated(event); 342f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He } 343a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He if (num_wake_event_ > 0) { 344a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He bt_log_->set_num_wake_event(num_wake_event_); 345a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He } else if (wake_events_.size() > 0) { 346a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He bt_log_->set_num_wake_event(wake_events_.size()); 347a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He } 348f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He wake_events_.clear(); 349f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He for (ScanEvent* event : scan_events_) { 350f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He bt_log_->mutable_scan_event()->AddAllocated(event); 351f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He } 352a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He if (num_scan_event_ > 0) { 353a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He bt_log_->set_num_scan_event(num_scan_event_); 354a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He } else if (scan_events_.size() > 0) { 355a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He bt_log_->set_num_scan_event(scan_events_.size()); 356a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He } 357f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He scan_events_.clear(); 358f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He bt_log_->SerializeToString(&bt_log_str_); 359f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He } 360f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 361f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He void ClearLog() { 362f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He for (BluetoothSession* session : bt_sessions_) { 363f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He session->Clear(); 364f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He delete session; 365f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He } 366f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He bt_sessions_.clear(); 367f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He for (PairEvent* event : pair_events_) { 368f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He event->Clear(); 369f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He delete event; 370f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He } 371f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He pair_events_.clear(); 372f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He for (WakeEvent* event : wake_events_) { 373f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He event->Clear(); 374f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He delete event; 375f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He } 376f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He wake_events_.clear(); 377f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He for (ScanEvent* event : scan_events_) { 378f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He event->Clear(); 379f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He delete event; 380f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He } 381f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He scan_events_.clear(); 382f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He bt_log_->Clear(); 383f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He } 384f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 385f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He void SetUp() { 386f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He bt_log_ = new BluetoothLog(); 387f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He // Clear existing metrics entries, if any 388f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->Reset(); 389f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He } 390f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He void TearDown() { 391f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He // Clear remaining metrics entries, if any 392f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->Reset(); 393f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He ClearLog(); 394f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He delete bt_log_; 395f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He } 396f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 397f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He public: 398f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He}; 399f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 400f3175629208a64b190dde4dcf5f92cacef70d3e9Jack HeTEST_F(BluetoothMetricsLoggerTest, PairEventTest) { 401f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He pair_events_.push_back(MakePairEvent( 402f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 35, 12345, 403f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He MakeDeviceInfo( 404f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 42, DeviceInfo_DeviceType::DeviceInfo_DeviceType_DEVICE_TYPE_BREDR))); 405f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He UpdateLog(); 406f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->LogPairEvent( 407f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 35, 12345, 42, system_bt_osi::DEVICE_TYPE_BREDR); 408f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He std::string msg_str; 409f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->WriteString(&msg_str, true); 410f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He EXPECT_THAT(msg_str, StrEq(bt_log_str_)); 411f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He} 412f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 413f3175629208a64b190dde4dcf5f92cacef70d3e9Jack HeTEST_F(BluetoothMetricsLoggerTest, WakeEventTest) { 414f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He wake_events_.push_back( 415f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He MakeWakeEvent(WakeEvent_WakeEventType::WakeEvent_WakeEventType_ACQUIRED, 416f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He "TEST_REQ", "TEST_NAME", 12345)); 417f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He UpdateLog(); 418f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->LogWakeEvent( 419f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He system_bt_osi::WAKE_EVENT_ACQUIRED, "TEST_REQ", "TEST_NAME", 12345); 420f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He std::string msg_str; 421f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->WriteString(&msg_str, true); 422f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He EXPECT_THAT(msg_str, StrEq(bt_log_str_)); 423f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He} 424f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 425a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack HeTEST_F(BluetoothMetricsLoggerTest, WakeEventOverrunTest) { 426a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He GenerateWakeEvents( 427a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He kMaxEventGenerationLimit - BluetoothMetricsLogger::kMaxNumWakeEvent, 428a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He kMaxEventGenerationLimit, &wake_events_); 429a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He num_wake_event_ = kMaxEventGenerationLimit; 430f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He UpdateLog(); 431a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He for (size_t i = 0; i < kMaxEventGenerationLimit; ++i) { 432f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->LogWakeEvent( 433f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He i % 2 == 0 ? system_bt_osi::WAKE_EVENT_ACQUIRED 434f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He : system_bt_osi::WAKE_EVENT_RELEASED, 435f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He "TEST_REQ", "TEST_NAME", i); 436f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He } 437f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He std::string msg_str; 438f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->WriteString(&msg_str, true); 439f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He EXPECT_THAT(msg_str, StrEq(bt_log_str_)); 440f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He} 441f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 442f3175629208a64b190dde4dcf5f92cacef70d3e9Jack HeTEST_F(BluetoothMetricsLoggerTest, ScanEventTest) { 443f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He scan_events_.push_back(MakeScanEvent( 444f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He ScanEvent_ScanEventType::ScanEvent_ScanEventType_SCAN_EVENT_STOP, 445f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He "TEST_INITIATOR", ScanEvent_ScanTechnologyType:: 446f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He ScanEvent_ScanTechnologyType_SCAN_TECH_TYPE_BREDR, 447f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 42, 123456)); 448f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He UpdateLog(); 449f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->LogScanEvent( 450f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He false, "TEST_INITIATOR", system_bt_osi::SCAN_TECH_TYPE_BREDR, 42, 123456); 451f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He std::string msg_str; 452f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->WriteString(&msg_str, true); 453f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He EXPECT_THAT(msg_str, StrEq(bt_log_str_)); 454f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He} 455f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 456f3175629208a64b190dde4dcf5f92cacef70d3e9Jack HeTEST_F(BluetoothMetricsLoggerTest, BluetoothSessionTest) { 457f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He bt_sessions_.push_back(MakeBluetoothSession( 458f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 10, 459f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothSession_ConnectionTechnologyType:: 460f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothSession_ConnectionTechnologyType_CONNECTION_TECHNOLOGY_TYPE_LE, 461a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He BluetoothSession_DisconnectReasonType:: 462a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He BluetoothSession_DisconnectReasonType_UNKNOWN, 463a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He nullptr, nullptr, nullptr)); 464f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He UpdateLog(); 465f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->LogBluetoothSessionStart( 466f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He system_bt_osi::CONNECTION_TECHNOLOGY_TYPE_LE, 123456); 467f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->LogBluetoothSessionEnd( 468a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He system_bt_osi::DISCONNECT_REASON_UNKNOWN, 133456); 469f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He std::string msg_str; 470f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->WriteString(&msg_str, true); 471f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He EXPECT_THAT(msg_str, StrEq(bt_log_str_)); 472f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He} 473f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 474f3175629208a64b190dde4dcf5f92cacef70d3e9Jack HeTEST_F(BluetoothMetricsLoggerTest, BluetoothSessionDumpBeforeEndTest) { 475f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He bt_sessions_.push_back(MakeBluetoothSession( 476f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 1, 477f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothSession_ConnectionTechnologyType:: 478f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothSession_ConnectionTechnologyType_CONNECTION_TECHNOLOGY_TYPE_LE, 479a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He BluetoothSession_DisconnectReasonType:: 480a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He BluetoothSession_DisconnectReasonType_METRICS_DUMP, 481a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He nullptr, nullptr, nullptr)); 482f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He UpdateLog(); 483f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->LogBluetoothSessionStart( 484f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He system_bt_osi::CONNECTION_TECHNOLOGY_TYPE_LE, time_get_os_boottime_ms()); 485f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He sleep_ms(1000); 486f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He std::string msg_str; 487f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->WriteString(&msg_str, true); 488f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He EXPECT_THAT(msg_str, StrEq(bt_log_str_)); 489f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He} 490f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 491f3175629208a64b190dde4dcf5f92cacef70d3e9Jack HeTEST_F(BluetoothMetricsLoggerTest, BluetoothSessionStartBeforeEndTest) { 492f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He bt_sessions_.push_back(MakeBluetoothSession( 493f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 1, 494f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothSession_ConnectionTechnologyType:: 495f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothSession_ConnectionTechnologyType_CONNECTION_TECHNOLOGY_TYPE_UNKNOWN, 496a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He BluetoothSession_DisconnectReasonType:: 497a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He BluetoothSession_DisconnectReasonType_NEXT_START_WITHOUT_END_PREVIOUS, 498a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He nullptr, nullptr, nullptr)); 499f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He bt_sessions_.push_back(MakeBluetoothSession( 500f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 2, 501f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothSession_ConnectionTechnologyType:: 502f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothSession_ConnectionTechnologyType_CONNECTION_TECHNOLOGY_TYPE_LE, 503a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He BluetoothSession_DisconnectReasonType:: 504a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He BluetoothSession_DisconnectReasonType_METRICS_DUMP, 505a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He nullptr, nullptr, nullptr)); 506f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He UpdateLog(); 507f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->LogBluetoothSessionStart( 508f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He system_bt_osi::CONNECTION_TECHNOLOGY_TYPE_UNKNOWN, 0); 509f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He sleep_ms(1000); 510f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->LogBluetoothSessionStart( 511f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He system_bt_osi::CONNECTION_TECHNOLOGY_TYPE_LE, 0); 512f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He sleep_ms(2000); 513f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He std::string msg_str; 514f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->WriteString(&msg_str, true); 515f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He EXPECT_THAT(msg_str, StrEq(bt_log_str_)); 516f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He} 517f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 518f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He/* 519f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * Test Case: A2DPSessionTwoUpdatesTest 520f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 521f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 1. Create Instance 522f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 2. LogBluetoothSessionStart 523f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 3. LogBluetoothSessionDeviceInfo 524f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 4. LogA2dpSession 525f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 5. LogA2dpSession 526f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 6. LogBluetoothSessionEnd 527f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 7. WriteString 528f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 529f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He */ 530f3175629208a64b190dde4dcf5f92cacef70d3e9Jack HeTEST_F(BluetoothMetricsLoggerTest, A2DPSessionTwoUpdatesTest) { 531f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He /* Same metrics from BluetoothA2DPSessionMetricsTest.TestUpdateNormal */ 532f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He A2dpSessionMetrics metrics1; 533f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He A2dpSessionMetrics metrics2; 534f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He A2dpSessionMetrics metrics_sum; 535f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.audio_duration_ms = 10; 536f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.audio_duration_ms = 25; 537f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.audio_duration_ms = 35; 538f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.media_timer_min_ms = 10; 539f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.media_timer_min_ms = 25; 540f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.media_timer_min_ms = 10; 541f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.media_timer_max_ms = 100; 542f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.media_timer_max_ms = 200; 543f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.media_timer_max_ms = 200; 544f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.media_timer_avg_ms = 50; 545f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.total_scheduling_count = 50; 546f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.media_timer_avg_ms = 100; 547f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.total_scheduling_count = 50; 548f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.media_timer_avg_ms = 75; 549f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.total_scheduling_count = 100; 550f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.buffer_overruns_max_count = 70; 551f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.buffer_overruns_max_count = 80; 552f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.buffer_overruns_max_count = 80; 553f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.buffer_underruns_average = 80; 554f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.buffer_underruns_count = 1200; 555f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.buffer_underruns_average = 130; 556f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.buffer_underruns_count = 2400; 557f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.buffer_underruns_average = 113.33333333; 558f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.buffer_underruns_count = 3600; 559f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He DeviceInfo* info = MakeDeviceInfo( 560f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BTM_COD_MAJOR_AUDIO_TEST, 561f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He DeviceInfo_DeviceType::DeviceInfo_DeviceType_DEVICE_TYPE_BREDR); 562f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He A2DPSession* session = MakeA2DPSession(metrics_sum); 563f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He bt_sessions_.push_back(MakeBluetoothSession( 564f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 10, 565f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothSession_ConnectionTechnologyType:: 566f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothSession_ConnectionTechnologyType_CONNECTION_TECHNOLOGY_TYPE_BREDR, 567a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He BluetoothSession_DisconnectReasonType:: 568a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He BluetoothSession_DisconnectReasonType_UNKNOWN, 569a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He info, nullptr, session)); 570f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He UpdateLog(); 571f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->LogBluetoothSessionStart( 572f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He system_bt_osi::CONNECTION_TECHNOLOGY_TYPE_BREDR, 123456); 573f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->LogBluetoothSessionDeviceInfo( 574f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BTM_COD_MAJOR_AUDIO_TEST, system_bt_osi::DEVICE_TYPE_BREDR); 575f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->LogA2dpSession(metrics1); 576f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->LogA2dpSession(metrics2); 577f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->LogBluetoothSessionEnd( 578a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He system_bt_osi::DISCONNECT_REASON_UNKNOWN, 133456); 579f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He std::string msg_str; 580f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->WriteString(&msg_str, true); 581f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He EXPECT_THAT(msg_str, StrEq(bt_log_str_)); 582f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He} 583f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 584f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He/* 585f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * Test Case: A2DPSessionTwoUpdatesSeparatedbyDumpTest 586f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 587f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 1. Create Instance 588f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 2. LogBluetoothSessionStart 589f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 3. LogBluetoothSessionDeviceInfo 590f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 4. LogA2dpSession 591f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 5. WriteString 592f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 6. LogA2dpSession 593f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 7. LogBluetoothSessionEnd 594f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 8. WriteString 595f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 596f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He */ 597f3175629208a64b190dde4dcf5f92cacef70d3e9Jack HeTEST_F(BluetoothMetricsLoggerTest, A2DPSessionTwoUpdatesSeparatedbyDumpTest) { 598f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He /* Same metrics from BluetoothA2DPSessionMetricsTest.TestUpdateNormal */ 599f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He A2dpSessionMetrics metrics1; 600f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He A2dpSessionMetrics metrics2; 601f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.audio_duration_ms = 10; 602f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.audio_duration_ms = 25; 603f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.media_timer_min_ms = 10; 604f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.media_timer_min_ms = 25; 605f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.media_timer_max_ms = 100; 606f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.media_timer_max_ms = 200; 607f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.media_timer_avg_ms = 50; 608f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.total_scheduling_count = 50; 609f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.media_timer_avg_ms = 100; 610f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.total_scheduling_count = 50; 611f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.buffer_overruns_max_count = 70; 612f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.buffer_overruns_max_count = 80; 613f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.buffer_underruns_average = 80; 614f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.buffer_underruns_count = 1200; 615f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.buffer_underruns_average = 130; 616f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.buffer_underruns_count = 2400; 617f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He DeviceInfo* info = MakeDeviceInfo( 618f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BTM_COD_MAJOR_AUDIO_TEST, 619f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He DeviceInfo_DeviceType::DeviceInfo_DeviceType_DEVICE_TYPE_BREDR); 620f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He A2DPSession* session = MakeA2DPSession(metrics1); 621f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He bt_sessions_.push_back(MakeBluetoothSession( 622f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 1, 623f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothSession_ConnectionTechnologyType:: 624f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothSession_ConnectionTechnologyType_CONNECTION_TECHNOLOGY_TYPE_BREDR, 625a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He BluetoothSession_DisconnectReasonType:: 626a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He BluetoothSession_DisconnectReasonType_METRICS_DUMP, 627a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He info, nullptr, session)); 628f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He UpdateLog(); 629f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->LogBluetoothSessionStart( 630f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He system_bt_osi::CONNECTION_TECHNOLOGY_TYPE_BREDR, 0); 631f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->LogBluetoothSessionDeviceInfo( 632f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BTM_COD_MAJOR_AUDIO_TEST, system_bt_osi::DEVICE_TYPE_BREDR); 633f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->LogA2dpSession(metrics1); 634f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He sleep_ms(1000); 635f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He std::string msg_str; 636f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->WriteString(&msg_str, true); 637f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He EXPECT_THAT(msg_str, StrEq(bt_log_str_)); 638f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He ClearLog(); 639f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He info = MakeDeviceInfo( 640f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BTM_COD_MAJOR_AUDIO_TEST, 641f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He DeviceInfo_DeviceType::DeviceInfo_DeviceType_DEVICE_TYPE_BREDR); 642f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He session = MakeA2DPSession(metrics2); 643f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He bt_sessions_.push_back(MakeBluetoothSession( 644f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 1, 645f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothSession_ConnectionTechnologyType:: 646f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothSession_ConnectionTechnologyType_CONNECTION_TECHNOLOGY_TYPE_BREDR, 647a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He BluetoothSession_DisconnectReasonType:: 648a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He BluetoothSession_DisconnectReasonType_UNKNOWN, 649a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He info, nullptr, session)); 650f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He UpdateLog(); 651f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He sleep_ms(1000); 652f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->LogA2dpSession(metrics2); 653f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->LogBluetoothSessionEnd( 654a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He system_bt_osi::DISCONNECT_REASON_UNKNOWN, 0); 655f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He msg_str.clear(); 656f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->WriteString(&msg_str, true); 657f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He EXPECT_THAT(msg_str, StrEq(bt_log_str_)); 658f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He} 659f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 660f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He/* 661f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * Test Case 1: A2DPSessionOnlyTest 662f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 663f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 1. Create Instance 664f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 4. LogA2dpSession 665f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 5. WriteString 666f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 6. LogA2dpSession 667f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 8. WriteString 668f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 669f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He */ 670f3175629208a64b190dde4dcf5f92cacef70d3e9Jack HeTEST_F(BluetoothMetricsLoggerTest, A2DPSessionOnlyTest) { 671f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He /* Same metrics from BluetoothA2DPSessionMetricsTest.TestUpdateNormal */ 672f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He A2dpSessionMetrics metrics1; 673f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He A2dpSessionMetrics metrics2; 674f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He A2dpSessionMetrics metrics_sum; 675f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.audio_duration_ms = 10; 676f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.audio_duration_ms = 25; 677f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.audio_duration_ms = 35; 678f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.media_timer_min_ms = 10; 679f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.media_timer_min_ms = 25; 680f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.media_timer_min_ms = 10; 681f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.media_timer_max_ms = 100; 682f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.media_timer_max_ms = 200; 683f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.media_timer_max_ms = 200; 684f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.media_timer_avg_ms = 50; 685f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.total_scheduling_count = 50; 686f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.media_timer_avg_ms = 100; 687f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.total_scheduling_count = 50; 688f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.media_timer_avg_ms = 75; 689f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.total_scheduling_count = 100; 690f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.buffer_overruns_max_count = 70; 691f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.buffer_overruns_max_count = 80; 692f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.buffer_overruns_max_count = 80; 693f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.buffer_underruns_average = 80; 694f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.buffer_underruns_count = 1200; 695f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.buffer_underruns_average = 130; 696f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.buffer_underruns_count = 2400; 697f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.buffer_underruns_average = 113.33333333; 698f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.buffer_underruns_count = 3600; 699f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He DeviceInfo* info = MakeDeviceInfo( 700f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BTM_COD_MAJOR_AUDIO_TEST, 701f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He DeviceInfo_DeviceType::DeviceInfo_DeviceType_DEVICE_TYPE_BREDR); 702f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He A2DPSession* session = MakeA2DPSession(metrics_sum); 703f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He bt_sessions_.push_back(MakeBluetoothSession( 704f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 1, 705f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothSession_ConnectionTechnologyType:: 706f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothSession_ConnectionTechnologyType_CONNECTION_TECHNOLOGY_TYPE_BREDR, 707a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He BluetoothSession_DisconnectReasonType:: 708a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He BluetoothSession_DisconnectReasonType_METRICS_DUMP, 709a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He info, nullptr, session)); 710f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He UpdateLog(); 711f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->LogA2dpSession(metrics1); 712f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->LogA2dpSession(metrics2); 713f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He sleep_ms(1000); 714f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He std::string msg_str; 715f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->WriteString(&msg_str, true); 716f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He EXPECT_THAT(msg_str, StrEq(bt_log_str_)); 717f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He} 718f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 719f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He/* 720f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * Test Case: A2DPSessionDumpBeforeTwoUpdatesTest 721f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 722f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 1. Create Instance 723f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 2. LogBluetoothSessionStart 724f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 3. LogBluetoothSessionDeviceInfo 725f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 5. WriteString 726f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 6. LogA2dpSession 727f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 7. LogA2dpSession 728f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 8. LogBluetoothSessionEnd 729f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 9. WriteString 730f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He * 731f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He */ 732f3175629208a64b190dde4dcf5f92cacef70d3e9Jack HeTEST_F(BluetoothMetricsLoggerTest, A2DPSessionDumpBeforeTwoUpdatesTest) { 733f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He /* Same metrics from BluetoothA2DPSessionMetricsTest.TestUpdateNormal */ 734f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He A2dpSessionMetrics metrics1; 735f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He A2dpSessionMetrics metrics2; 736f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He A2dpSessionMetrics metrics_sum; 737f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.audio_duration_ms = 10; 738f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.audio_duration_ms = 25; 739f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.audio_duration_ms = 35; 740f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.media_timer_min_ms = 10; 741f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.media_timer_min_ms = 25; 742f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.media_timer_min_ms = 10; 743f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.media_timer_max_ms = 100; 744f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.media_timer_max_ms = 200; 745f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.media_timer_max_ms = 200; 746f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.media_timer_avg_ms = 50; 747f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.total_scheduling_count = 50; 748f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.media_timer_avg_ms = 100; 749f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.total_scheduling_count = 50; 750f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.media_timer_avg_ms = 75; 751f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.total_scheduling_count = 100; 752f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.buffer_overruns_max_count = 70; 753f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.buffer_overruns_max_count = 80; 754f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.buffer_overruns_max_count = 80; 755f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.buffer_underruns_average = 80; 756f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics1.buffer_underruns_count = 1200; 757f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.buffer_underruns_average = 130; 758f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics2.buffer_underruns_count = 2400; 759f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.buffer_underruns_average = 113.33333333; 760f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He metrics_sum.buffer_underruns_count = 3600; 761f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He DeviceInfo* info = MakeDeviceInfo( 762f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BTM_COD_MAJOR_AUDIO_TEST, 763f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He DeviceInfo_DeviceType::DeviceInfo_DeviceType_DEVICE_TYPE_BREDR); 764f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He bt_sessions_.push_back(MakeBluetoothSession( 765f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 1, 766f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothSession_ConnectionTechnologyType:: 767f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothSession_ConnectionTechnologyType_CONNECTION_TECHNOLOGY_TYPE_BREDR, 768a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He BluetoothSession_DisconnectReasonType:: 769a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He BluetoothSession_DisconnectReasonType_METRICS_DUMP, 770a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He info, nullptr, nullptr)); 771f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He UpdateLog(); 772f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->LogBluetoothSessionStart( 773f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He system_bt_osi::CONNECTION_TECHNOLOGY_TYPE_BREDR, 0); 774f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->LogBluetoothSessionDeviceInfo( 775f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BTM_COD_MAJOR_AUDIO_TEST, system_bt_osi::DEVICE_TYPE_BREDR); 776f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He sleep_ms(1000); 777f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He std::string msg_str; 778f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->WriteString(&msg_str, true); 779f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He EXPECT_THAT(msg_str, StrEq(bt_log_str_)); 780f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He ClearLog(); 781f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He info = MakeDeviceInfo( 782f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BTM_COD_MAJOR_AUDIO_TEST, 783f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He DeviceInfo_DeviceType::DeviceInfo_DeviceType_DEVICE_TYPE_BREDR); 784f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He A2DPSession* session = MakeA2DPSession(metrics_sum); 785f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He bt_sessions_.push_back(MakeBluetoothSession( 786f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He 1, 787f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothSession_ConnectionTechnologyType:: 788f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothSession_ConnectionTechnologyType_CONNECTION_TECHNOLOGY_TYPE_BREDR, 789a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He BluetoothSession_DisconnectReasonType:: 790a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He BluetoothSession_DisconnectReasonType_UNKNOWN, 791a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He info, nullptr, session)); 792f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He UpdateLog(); 793f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->LogA2dpSession(metrics1); 794f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->LogA2dpSession(metrics2); 795f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He sleep_ms(1000); 796f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->LogBluetoothSessionEnd( 797a3f831cc746cec746c25c1b45d9528aa3fc926e7Jack He system_bt_osi::DISCONNECT_REASON_UNKNOWN, 0); 798f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He msg_str.clear(); 799f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He BluetoothMetricsLogger::GetInstance()->WriteString(&msg_str, true); 800f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He EXPECT_THAT(msg_str, StrEq(bt_log_str_)); 801f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He} 802f3175629208a64b190dde4dcf5f92cacef70d3e9Jack He} 803