analytics: Implement AdvertisingMetadataParams and DiscoveryMetadataParams for analytics recorder.

PiperOrigin-RevId: 704295939
This commit is contained in:
Edwin Wu
2024-12-09 08:32:58 -08:00
committed by Copybara-Service
parent 46968b9278
commit 196dda9af5
7 changed files with 303 additions and 84 deletions
@@ -20,8 +20,10 @@ cc_library(
"throughput_recorder.cc",
],
hdrs = [
"advertising_metadata_params.h",
"analytics_recorder.h",
"connection_attempt_metadata_params.h",
"discovery_metadata_params.h",
"packet_meta_data.h",
"throughput_recorder.h",
],
@@ -0,0 +1,36 @@
// Copyright 2024 Google LLC
//
// 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
//
// https://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.
#ifndef ANALYTICS_ADVERTISING_METADATA_PARAMS_H_
#define ANALYTICS_ADVERTISING_METADATA_PARAMS_H_
#include <vector>
#include "internal/proto/analytics/connections_log.pb.h"
namespace nearby {
// A struct to construct AdvertisingMetadata for the analytics recorder.
struct AdvertisingMetadataParams {
bool is_extended_advertisement_supported = false;
int connected_ap_frequency = 0;
bool is_nfc_available = false;
std::vector<location::nearby::analytics::proto::ConnectionsLog::
OperationResultWithMedium>
operation_result_with_mediums = {};
};
} // namespace nearby
#endif // ANALYTICS_ADVERTISING_METADATA_PARAMS_H_
@@ -26,7 +26,9 @@
#include "absl/container/btree_map.h"
#include "absl/strings/string_view.h"
#include "absl/time/time.h"
#include "connections/implementation/analytics/advertising_metadata_params.h"
#include "connections/implementation/analytics/connection_attempt_metadata_params.h"
#include "connections/implementation/analytics/discovery_metadata_params.h"
#include "connections/payload_type.h"
#include "connections/strategy.h"
#include "internal/analytics/event_logger.h"
@@ -206,10 +208,7 @@ void AnalyticsRecorder::ResetClientSessionLoggingResoucesLocked() {
void AnalyticsRecorder::OnStartAdvertising(
connections::Strategy strategy, const std::vector<Medium> &mediums,
const std::vector<ConnectionsLog::OperationResultWithMedium>
&operation_result_with_mediums,
bool is_extended_advertisement_supported, int connected_ap_frequency,
bool is_nfc_available) {
AdvertisingMetadataParams *advertising_metadata_params) {
MutexLock lock(&mutex_);
if (!CanRecordAnalyticsLocked("OnStartAdvertising")) {
return;
@@ -228,16 +227,24 @@ void AnalyticsRecorder::OnStartAdvertising(
std::make_unique<ConnectionsLog::AdvertisingPhase>();
absl::c_copy(mediums, RepeatedFieldBackInserter(
current_advertising_phase_->mutable_medium()));
absl::c_copy(operation_result_with_mediums,
RepeatedFieldBackInserter(
current_advertising_phase_->mutable_adv_dis_result()));
// Set a AdvertisingMetadata.
AdvertisingMetadataParams default_params = {};
if (advertising_metadata_params == nullptr) {
advertising_metadata_params = &default_params;
}
if (!advertising_metadata_params->operation_result_with_mediums.empty()) {
absl::c_copy(advertising_metadata_params->operation_result_with_mediums,
RepeatedFieldBackInserter(
current_advertising_phase_->mutable_adv_dis_result()));
}
auto *advertising_metadata =
current_advertising_phase_->mutable_advertising_metadata();
advertising_metadata->set_supports_extended_ble_advertisements(
is_extended_advertisement_supported);
advertising_metadata->set_connected_ap_frequency(connected_ap_frequency);
advertising_metadata->set_supports_nfc_technology(is_nfc_available);
advertising_metadata_params->is_extended_advertisement_supported);
advertising_metadata->set_connected_ap_frequency(
advertising_metadata_params->connected_ap_frequency);
advertising_metadata->set_supports_nfc_technology(
advertising_metadata_params->is_nfc_available);
}
void AnalyticsRecorder::OnStopAdvertising() {
@@ -250,10 +257,7 @@ void AnalyticsRecorder::OnStopAdvertising() {
void AnalyticsRecorder::OnStartDiscovery(
connections::Strategy strategy, const std::vector<Medium> &mediums,
const std::vector<ConnectionsLog::OperationResultWithMedium>
&operation_result_with_mediums,
bool is_extended_advertisement_supported, int connected_ap_frequency,
bool is_nfc_available) {
DiscoveryMetadataParams *discovery_metadata_params) {
MutexLock lock(&mutex_);
if (!CanRecordAnalyticsLocked("OnStartDiscovery")) {
return;
@@ -272,16 +276,24 @@ void AnalyticsRecorder::OnStartDiscovery(
current_discovery_phase_ = std::make_unique<ConnectionsLog::DiscoveryPhase>();
absl::c_copy(mediums, RepeatedFieldBackInserter(
current_discovery_phase_->mutable_medium()));
absl::c_copy(operation_result_with_mediums,
RepeatedFieldBackInserter(
current_discovery_phase_->mutable_adv_dis_result()));
// Set a DiscoveryMetadata.
DiscoveryMetadataParams default_params = {};
if (discovery_metadata_params == nullptr) {
discovery_metadata_params = &default_params;
}
if (!discovery_metadata_params->operation_result_with_mediums.empty()) {
absl::c_copy(discovery_metadata_params->operation_result_with_mediums,
RepeatedFieldBackInserter(
current_discovery_phase_->mutable_adv_dis_result()));
}
auto *discovery_metadata =
current_discovery_phase_->mutable_discovery_metadata();
discovery_metadata->set_supports_extended_ble_advertisements(
is_extended_advertisement_supported);
discovery_metadata->set_connected_ap_frequency(connected_ap_frequency);
discovery_metadata->set_supports_nfc_technology(is_nfc_available);
discovery_metadata_params->is_extended_advertisement_supported);
discovery_metadata->set_connected_ap_frequency(
discovery_metadata_params->connected_ap_frequency);
discovery_metadata->set_supports_nfc_technology(
discovery_metadata_params->is_nfc_available);
}
void AnalyticsRecorder::OnStopDiscovery() {
@@ -902,6 +914,38 @@ void AnalyticsRecorder::LogSession() {
session_was_logged_ = true;
}
std::unique_ptr<AdvertisingMetadataParams>
AnalyticsRecorder::BuildAdvertisingMetadataParams(
bool is_extended_advertisement_supported, int connected_ap_frequency,
bool is_nfc_available,
const std::vector<ConnectionsLog::OperationResultWithMedium>
&operation_result_with_mediums) {
auto params = std::make_unique<AdvertisingMetadataParams>();
params->is_extended_advertisement_supported =
is_extended_advertisement_supported;
params->connected_ap_frequency = connected_ap_frequency;
params->is_nfc_available = is_nfc_available;
params->operation_result_with_mediums =
std::move(operation_result_with_mediums);
return params;
}
std::unique_ptr<DiscoveryMetadataParams>
AnalyticsRecorder::BuildDiscoveryMetadataParams(
bool is_extended_advertisement_supported, int connected_ap_frequency,
bool is_nfc_available,
const std::vector<ConnectionsLog::OperationResultWithMedium>
&operation_result_with_mediums) {
auto params = std::make_unique<DiscoveryMetadataParams>();
params->is_extended_advertisement_supported =
is_extended_advertisement_supported;
params->connected_ap_frequency = connected_ap_frequency;
params->is_nfc_available = is_nfc_available;
params->operation_result_with_mediums =
std::move(operation_result_with_mediums);
return params;
}
std::unique_ptr<ConnectionAttemptMetadataParams>
AnalyticsRecorder::BuildConnectionAttemptMetadataParams(
ConnectionTechnology technology, ConnectionBand band, int frequency,
@@ -25,7 +25,9 @@
#include "absl/container/btree_map.h"
#include "absl/strings/string_view.h"
#include "absl/time/time.h"
#include "connections/implementation/analytics/advertising_metadata_params.h"
#include "connections/implementation/analytics/connection_attempt_metadata_params.h"
#include "connections/implementation/analytics/discovery_metadata_params.h"
#include "connections/payload_type.h"
#include "connections/strategy.h"
#include "internal/analytics/event_logger.h"
@@ -47,19 +49,11 @@ class AnalyticsRecorder {
bool no_record_time_millis);
virtual ~AnalyticsRecorder();
// TODO(edwinwu): Implement to pass real values for AdvertisingMetadata and
// DiscoveryMetaData: is_extended_advertisement_supported,
// connected_ap_frequency, and is_nfc_available. Set as default values for
// analytics recorder.
// Advertising phase
void OnStartAdvertising(
connections::Strategy strategy,
const std::vector<location::nearby::proto::connections::Medium> &mediums,
const std::vector<location::nearby::analytics::proto::ConnectionsLog::
OperationResultWithMedium>
&operation_result_with_medium,
bool is_extended_advertisement_supported = false,
int connected_ap_frequency = 0, bool is_nfc_available = false)
AdvertisingMetadataParams *advertising_metadata_params)
ABSL_LOCKS_EXCLUDED(mutex_);
void OnStopAdvertising() ABSL_LOCKS_EXCLUDED(mutex_);
@@ -72,11 +66,7 @@ class AnalyticsRecorder {
void OnStartDiscovery(
connections::Strategy strategy,
const std::vector<location::nearby::proto::connections::Medium> &mediums,
const std::vector<location::nearby::analytics::proto::ConnectionsLog::
OperationResultWithMedium>
&operation_result_with_medium,
bool is_extended_advertisement_supported = false,
int connected_ap_frequency = 0, bool is_nfc_available = false)
DiscoveryMetadataParams *discovery_metadata_params)
ABSL_LOCKS_EXCLUDED(mutex_);
void OnStopDiscovery() ABSL_LOCKS_EXCLUDED(mutex_);
void OnEndpointFound(location::nearby::proto::connections::Medium medium)
@@ -120,9 +110,20 @@ class AnalyticsRecorder {
absl::Duration duration, const std::string &connection_token,
ConnectionAttemptMetadataParams *connection_attempt_metadata_params)
ABSL_LOCKS_EXCLUDED(mutex_);
// TODO(edwinwu): Implement network operator, country code, tdls, wifi hotspot
//, max wifi tx/rx speed and channel width. Set as default values for
// analytics recorder.
static std::unique_ptr<AdvertisingMetadataParams>
BuildAdvertisingMetadataParams(
bool is_extended_advertisement_supported = false,
int connected_ap_frequency = 0, bool is_nfc_available = false,
const std::vector<location::nearby::analytics::proto::ConnectionsLog::
OperationResultWithMedium>
&operation_result_with_mediums = {});
static std::unique_ptr<DiscoveryMetadataParams> BuildDiscoveryMetadataParams(
bool is_extended_advertisement_supported = false,
int connected_ap_frequency = 0, bool is_nfc_available = false,
const std::vector<location::nearby::analytics::proto::ConnectionsLog::
OperationResultWithMedium>
&operation_result_with_mediums = {});
static std::unique_ptr<ConnectionAttemptMetadataParams>
BuildConnectionAttemptMetadataParams(
location::nearby::proto::connections::ConnectionTechnology technology,
@@ -173,12 +173,18 @@ TEST(AnalyticsRecorderTest, SetFieldsCorrectlyForNestedAdvertisingCalls) {
operation_result.set_result_code(OperationResultCode::DETAIL_SUCCESS);
operation_result.set_result_category(
OperationResultCategory::CATEGORY_SUCCESS);
auto advertising_metadata_params =
analytics_recorder.BuildAdvertisingMetadataParams();
advertising_metadata_params->operation_result_with_mediums = {
operation_result};
analytics_recorder.OnStartAdvertising(strategy, /*mediums=*/{BLE, BLUETOOTH},
{operation_result});
advertising_metadata_params.get());
analytics_recorder.OnStopAdvertising();
operation_result.set_medium(BLE);
advertising_metadata_params->operation_result_with_mediums = {
operation_result};
analytics_recorder.OnStartAdvertising(strategy, /*mediums=*/{BLUETOOTH},
{operation_result});
advertising_metadata_params.get());
analytics_recorder.LogSession();
ASSERT_TRUE(client_session_done_latch.Await(kDefaultTimeout).result());
@@ -241,18 +247,25 @@ TEST(AnalyticsRecorderTest, SetFieldsCorrectlyForNestedDiscoveryCalls) {
operation_result2.set_result_code(OperationResultCode::DETAIL_SUCCESS);
operation_result2.set_result_category(
OperationResultCategory::CATEGORY_SUCCESS);
analytics_recorder.OnStartDiscovery(
strategy, /*mediums=*/{BLE, BLUETOOTH},
{operation_result, operation_result2},
/*is_extended_advertisement_supported=*/true,
/*connected_ap_frequency=*/1, /*is_nfc_available=*/false);
auto discovery_metadata_params =
analytics_recorder.BuildDiscoveryMetadataParams(
/*is_extended_advertisement_supported*/ true,
/*connected_ap_frequency*/ 1, /*is_nfc_available=*/false,
{operation_result, operation_result2});
analytics_recorder.OnStartDiscovery(strategy, /*mediums=*/{BLE, BLUETOOTH},
discovery_metadata_params.get());
analytics_recorder.OnStopDiscovery();
analytics_recorder.OnEndpointFound(BLUETOOTH);
analytics_recorder.OnEndpointFound(BLE);
analytics_recorder.OnStartDiscovery(
strategy, /*mediums=*/{BLUETOOTH}, {operation_result},
/*is_extended_advertisement_supported=*/true,
/*connected_ap_frequency=*/1, /*is_nfc_available=*/false);
auto discovery_metadata_params2 =
analytics_recorder.BuildDiscoveryMetadataParams(
/*is_extended_advertisement_supported*/ true,
/*connected_ap_frequency*/ 1, /*is_nfc_available=*/false,
{operation_result});
analytics_recorder.OnStartDiscovery(strategy, /*mediums=*/{BLUETOOTH},
discovery_metadata_params2.get());
analytics_recorder.LogSession();
ASSERT_TRUE(client_session_done_latch.Await(kDefaultTimeout).result());
@@ -314,16 +327,25 @@ TEST(AnalyticsRecorderTest,
AnalyticsRecorder analytics_recorder(&event_logger,
/*no_record_time_millis=*/true);
analytics_recorder.OnStartAdvertising(strategy, mediums, {});
analytics_recorder.OnStartDiscovery(strategy, mediums, {});
auto advertising_metadata_params =
analytics_recorder.BuildAdvertisingMetadataParams();
analytics_recorder.OnStartAdvertising(strategy, mediums,
advertising_metadata_params.get());
auto discovery_metadata_params =
analytics_recorder.BuildDiscoveryMetadataParams();
analytics_recorder.OnStartDiscovery(strategy, mediums,
discovery_metadata_params.get());
analytics_recorder.OnStopAdvertising();
analytics_recorder.OnStopDiscovery();
analytics_recorder.OnStartAdvertising(strategy, mediums, {});
analytics_recorder.OnStartAdvertising(strategy, mediums,
advertising_metadata_params.get());
analytics_recorder.OnStopAdvertising();
analytics_recorder.OnStartDiscovery(strategy, mediums, {});
analytics_recorder.OnStartDiscovery(strategy, mediums,
discovery_metadata_params.get());
analytics_recorder.OnStopDiscovery();
analytics_recorder.OnStartDiscovery(strategy, mediums, {});
analytics_recorder.OnStartAdvertising(strategy, mediums, {});
analytics_recorder.OnStartAdvertising(strategy, mediums,
advertising_metadata_params.get());
analytics_recorder.OnStopDiscovery();
analytics_recorder.OnStopAdvertising();
@@ -422,9 +444,13 @@ TEST(AnalyticsRecorderTest, AdvertiserConnectionRequestsWorks) {
operation_result.set_result_code(OperationResultCode::DETAIL_SUCCESS);
operation_result.set_result_category(
OperationResultCategory::CATEGORY_SUCCESS);
auto advertising_metadata_params =
analytics_recorder.BuildAdvertisingMetadataParams();
advertising_metadata_params->operation_result_with_mediums = {
operation_result};
analytics_recorder.OnStartAdvertising(connections::Strategy::kP2pStar,
/*mediums=*/{BLE, BLUETOOTH},
{operation_result});
advertising_metadata_params.get());
analytics_recorder.OnConnectionRequestReceived(endpoint_id_0);
analytics_recorder.OnLocalEndpointAccepted(endpoint_id_0);
analytics_recorder.OnRemoteEndpointAccepted(endpoint_id_0);
@@ -502,9 +528,12 @@ TEST(AnalyticsRecorderTest, DiscoveryConnectionRequestsWorks) {
operation_result.set_result_code(OperationResultCode::DETAIL_SUCCESS);
operation_result.set_result_category(
OperationResultCategory::CATEGORY_SUCCESS);
auto discovery_metadata_params =
analytics_recorder.BuildDiscoveryMetadataParams();
discovery_metadata_params->operation_result_with_mediums = {operation_result};
analytics_recorder.OnStartDiscovery(connections::Strategy::kP2pStar,
/*mediums=*/{BLE, BLUETOOTH},
{operation_result});
discovery_metadata_params.get());
analytics_recorder.OnConnectionRequestSent(endpoint_id_0);
analytics_recorder.OnLocalEndpointAccepted(endpoint_id_0);
@@ -583,9 +612,13 @@ TEST(AnalyticsRecorderTest,
operation_result.set_result_code(OperationResultCode::DETAIL_SUCCESS);
operation_result.set_result_category(
OperationResultCategory::CATEGORY_SUCCESS);
auto advertising_metadata_params =
analytics_recorder.BuildAdvertisingMetadataParams();
advertising_metadata_params->operation_result_with_mediums = {
operation_result};
analytics_recorder.OnStartAdvertising(connections::Strategy::kP2pStar,
/*mediums=*/{BLE, BLUETOOTH},
{operation_result});
advertising_metadata_params.get());
// Ignored by local.
analytics_recorder.OnConnectionRequestReceived(endpoint_id_0);
analytics_recorder.OnRemoteEndpointAccepted(endpoint_id_0);
@@ -654,9 +687,12 @@ TEST(AnalyticsRecorderTest,
operation_result.set_result_code(OperationResultCode::DETAIL_SUCCESS);
operation_result.set_result_category(
OperationResultCategory::CATEGORY_SUCCESS);
auto discovery_metadata_params =
analytics_recorder.BuildDiscoveryMetadataParams();
discovery_metadata_params->operation_result_with_mediums = {operation_result};
analytics_recorder.OnStartDiscovery(connections::Strategy::kP2pStar,
/*mediums=*/{BLE, BLUETOOTH},
{operation_result});
discovery_metadata_params.get());
// Ignored by local.
analytics_recorder.OnConnectionRequestSent(endpoint_id_0);
@@ -721,9 +757,13 @@ TEST(AnalyticsRecorderTest, SuccessfulIncomingConnectionAttempt) {
operation_result.set_result_code(OperationResultCode::DETAIL_SUCCESS);
operation_result.set_result_category(
OperationResultCategory::CATEGORY_SUCCESS);
auto advertising_metadata_params =
analytics_recorder.BuildAdvertisingMetadataParams();
advertising_metadata_params->operation_result_with_mediums = {
operation_result};
analytics_recorder.OnStartAdvertising(connections::Strategy::kP2pStar,
/*mediums=*/{BLE, BLUETOOTH},
{operation_result});
advertising_metadata_params.get());
auto connections_attempt_metadata_params =
std::make_unique<ConnectionAttemptMetadataParams>();
@@ -807,8 +847,11 @@ TEST(AnalyticsRecorderTest,
/*wifi_hotspot_enabled*/ false, /*max_wifi_tx_speed*/ 0,
/*max_wifi_rx_speed*/ 0, /*channel_width*/ 0,
OperationResultCode::CONNECTIVITY_BT_CLIENT_SOCKET_CREATION_FAILURE);
auto discovery_metadata_params =
analytics_recorder.BuildDiscoveryMetadataParams();
analytics_recorder.OnStartDiscovery(connections::Strategy::kP2pStar,
/*mediums=*/{BLE, BLUETOOTH}, {});
/*mediums=*/{BLE, BLUETOOTH},
discovery_metadata_params.get());
analytics_recorder.OnConnectionRequestSent(endpoint_id);
analytics_recorder.OnOutgoingConnectionAttempt(
endpoint_id, INITIAL, BLUETOOTH, RESULT_ERROR, absl::Duration{},
@@ -875,8 +918,11 @@ TEST(AnalyticsRecorderTest, UnfinishedEstablishedConnectionsAddedAsUnfinished) {
AnalyticsRecorder analytics_recorder(&event_logger,
/*no_record_time_millis=*/true);
auto advertising_metadata_params =
analytics_recorder.BuildAdvertisingMetadataParams();
analytics_recorder.OnStartAdvertising(connections::Strategy::kP2pStar,
/*mediums=*/{BLE, BLUETOOTH}, {});
/*mediums=*/{BLE, BLUETOOTH},
advertising_metadata_params.get());
analytics_recorder.OnConnectionEstablished(endpoint_id, BLUETOOTH,
connection_token);
analytics_recorder.OnConnectionClosed(
@@ -939,8 +985,11 @@ TEST(AnalyticsRecorderTest, OutgoingPayloadUpgraded) {
AnalyticsRecorder analytics_recorder(&event_logger,
/*no_record_time_millis=*/true);
auto advertising_metadata_params =
analytics_recorder.BuildAdvertisingMetadataParams();
analytics_recorder.OnStartAdvertising(connections::Strategy::kP2pStar,
/*mediums=*/{BLE, BLUETOOTH}, {});
/*mediums=*/{BLE, BLUETOOTH},
advertising_metadata_params.get());
analytics_recorder.OnConnectionEstablished(endpoint_id, BLUETOOTH,
connection_token);
analytics_recorder.OnOutgoingPayloadStarted(
@@ -1038,8 +1087,11 @@ TEST(AnalyticsRecorderTest, UpgradeAttemptWorks) {
AnalyticsRecorder analytics_recorder(&event_logger,
/*no_record_time_millis=*/true);
auto advertising_metadata_params =
analytics_recorder.BuildAdvertisingMetadataParams();
analytics_recorder.OnStartAdvertising(connections::Strategy::kP2pStar,
/*mediums=*/{BLE, BLUETOOTH}, {});
/*mediums=*/{BLE, BLUETOOTH},
advertising_metadata_params.get());
analytics_recorder.OnBandwidthUpgradeStarted(endpoint_id, BLE, WIFI_LAN,
INCOMING, connection_token);
@@ -1187,8 +1239,11 @@ TEST(AnalyticsRecorderTest, SetErrorCodeFieldsCorrectly) {
AnalyticsRecorder analytics_recorder(&event_logger,
/*no_record_time_millis=*/true);
auto discovery_metadata_params =
analytics_recorder.BuildDiscoveryMetadataParams();
analytics_recorder.OnStartDiscovery(connections::Strategy::kP2pStar,
/*mediums=*/{WEB_RTC}, {});
/*mediums=*/{WEB_RTC},
discovery_metadata_params.get());
ErrorCodeParams error_code_params = ErrorCodeRecorder::BuildErrorCodeParams(
WEB_RTC, DISCONNECT, DISCONNECT_NETWORK_FAILED,
@@ -1215,8 +1270,11 @@ TEST(AnalyticsRecorderTest, SetErrorCodeFieldsCorrectlyForUnknownDescription) {
AnalyticsRecorder analytics_recorder(&event_logger,
/*no_record_time_millis=*/true);
auto discovery_metadata_params =
analytics_recorder.BuildDiscoveryMetadataParams();
analytics_recorder.OnStartDiscovery(connections::Strategy::kP2pStar,
/*mediums=*/{BLUETOOTH}, {});
/*mediums=*/{BLUETOOTH},
discovery_metadata_params.get());
ErrorCodeParams error_code_params;
// Skip setting error_code_params.description
@@ -1246,8 +1304,11 @@ TEST(AnalyticsRecorderTest, SetErrorCodeFieldsCorrectlyForCommonError) {
AnalyticsRecorder analytics_recorder(&event_logger,
/*no_record_time_millis=*/true);
auto discovery_metadata_params =
analytics_recorder.BuildDiscoveryMetadataParams();
analytics_recorder.OnStartDiscovery(connections::Strategy::kP2pStar,
/*mediums=*/{BLUETOOTH}, {});
/*mediums=*/{BLUETOOTH},
discovery_metadata_params.get());
ErrorCodeParams error_code_params = ErrorCodeRecorder::BuildErrorCodeParams(
BLUETOOTH, START_DISCOVERING, INVALID_PARAMETER,
@@ -1376,8 +1437,11 @@ TEST(AnalyticsRecorderTest,
AnalyticsRecorder analytics_recorder(&event_logger,
/*no_record_time_millis=*/true);
auto advertising_metadata_params =
analytics_recorder.BuildAdvertisingMetadataParams();
analytics_recorder.OnStartAdvertising(connections::Strategy::kP2pStar,
/*mediums=*/{BLE, BLUETOOTH}, {});
/*mediums=*/{BLE, BLUETOOTH},
advertising_metadata_params.get());
analytics_recorder.OnConnectionRequestReceived(endpoint_id_0);
analytics_recorder.OnLocalEndpointAccepted(endpoint_id_0);
analytics_recorder.OnRemoteEndpointAccepted(endpoint_id_0);
@@ -1481,8 +1545,11 @@ TEST(AnalyticsRecorderTest,
AnalyticsRecorder analytics_recorder(&event_logger,
/*no_record_time_millis=*/true);
auto discovery_metadata_params =
analytics_recorder.BuildDiscoveryMetadataParams();
analytics_recorder.OnStartDiscovery(connections::Strategy::kP2pStar,
/*mediums=*/{BLE, BLUETOOTH}, {});
/*mediums=*/{BLE, BLUETOOTH},
discovery_metadata_params.get());
analytics_recorder.OnConnectionRequestSent(endpoint_id_0);
analytics_recorder.OnLocalEndpointAccepted(endpoint_id_0);
@@ -1589,7 +1656,10 @@ TEST(AnalyticsRecorderTest, ClearcActiveConnectionsAfterSessionWasLogged) {
AnalyticsRecorder analytics_recorder(&event_logger,
/*no_record_time_millis=*/true);
analytics_recorder.OnStartAdvertising(strategy, mediums, {});
auto advertising_metadata_params =
analytics_recorder.BuildAdvertisingMetadataParams();
analytics_recorder.OnStartAdvertising(strategy, mediums,
advertising_metadata_params.get());
analytics_recorder.OnConnectionEstablished(endpoint_id, BLUETOOTH,
connection_token);
@@ -1696,8 +1766,11 @@ TEST(AnalyticsRecorderTest,
AnalyticsRecorder analytics_recorder(&event_logger,
/*no_record_time_millis=*/true);
auto advertising_metadata_params =
analytics_recorder.BuildAdvertisingMetadataParams();
analytics_recorder.OnStartAdvertising(connections::Strategy::kP2pStar,
/*mediums=*/{BLE, BLUETOOTH}, {});
/*mediums=*/{BLE, BLUETOOTH},
advertising_metadata_params.get());
analytics_recorder.OnBandwidthUpgradeStarted(endpoint_id, BLE, WIFI_LAN,
INCOMING, connection_token);
@@ -1867,8 +1940,11 @@ TEST(AnalyticsRecorderTest,
AnalyticsRecorder analytics_recorder(&event_logger,
/*no_record_time_millis=*/true);
auto advertising_metadata_params =
analytics_recorder.BuildAdvertisingMetadataParams();
analytics_recorder.OnStartAdvertising(connections::Strategy::kP2pStar,
/*mediums=*/{BLUETOOTH}, {});
/*mediums=*/{BLUETOOTH},
advertising_metadata_params.get());
analytics_recorder.OnStopAdvertising();
// LogSession
@@ -1891,7 +1967,9 @@ TEST(AnalyticsRecorderTest,
// LogSession again
CountDownLatch new_client_session_done_latch(1);
event_logger.SetClientSessionDoneLatch(new_client_session_done_latch);
analytics_recorder.OnStartAdvertising(strategy, /*mediums=*/{BLUETOOTH}, {});
analytics_recorder.OnStartAdvertising(strategy, /*mediums=*/{BLUETOOTH},
advertising_metadata_params.get());
analytics_recorder.OnStopAdvertising();
analytics_recorder.LogSession();
@@ -1912,8 +1990,11 @@ TEST(AnalyticsRecorderTest,
// Via OnStartAdvertising, current_strategy_session_is set in
// UpdateStrategySessionLocked.
auto advertising_metadata_params =
analytics_recorder.BuildAdvertisingMetadataParams();
analytics_recorder.OnStartAdvertising(connections::Strategy::kP2pStar,
/*mediums=*/{BLE, BLUETOOTH}, {});
/*mediums=*/{BLE, BLUETOOTH},
advertising_metadata_params.get());
analytics_recorder.OnStopAdvertising();
// LogSession
@@ -1949,8 +2030,8 @@ TEST(AnalyticsRecorderTest,
new_start_client_session_done_latch.Await(kDefaultTimeout).result());
// LogSession again
// - if current_strategy_session_ is reset, the same strategy_session_proto
// will be logged.
// - if current_strategy_session_ is reset, the same
// strategy_session_proto will be logged.
CountDownLatch new_client_session_done_latch(1);
event_logger.SetClientSessionDoneLatch(new_client_session_done_latch);
analytics_recorder.LogSession();
@@ -1968,9 +2049,12 @@ TEST(AnalyticsRecorderTest,
AnalyticsRecorder analytics_recorder(&event_logger,
/*no_record_time_millis=*/true);
analytics_recorder.OnStartAdvertising(connections::Strategy::kP2pStar,
/*mediums=*/{BLUETOOTH},
{}); // set current_advertising_phase_
auto advertising_metadata_params =
analytics_recorder.BuildAdvertisingMetadataParams();
analytics_recorder.OnStartAdvertising(
connections::Strategy::kP2pStar,
/*mediums=*/{BLUETOOTH},
advertising_metadata_params.get()); // set current_advertising_phase_
analytics_recorder.OnStopAdvertising();
// LogSession
@@ -2049,10 +2133,13 @@ TEST(AnalyticsRecorderTest,
AnalyticsRecorder analytics_recorder(&event_logger,
/*no_record_time_millis=*/true);
auto discovery_metadata_params =
analytics_recorder.BuildDiscoveryMetadataParams(
/*is_extended_advertisement_supported*/ true,
/*connected_ap_frequency*/ 1, /*is_nfc_available=*/false);
analytics_recorder.OnStartDiscovery(
strategy, {BLUETOOTH}, {}, /*is_extended_advertisement_supported=*/true,
/*connected_ap_frequency=*/1,
/*is_nfc_available=*/false); // set current_discovery_phase_
strategy, {BLUETOOTH},
discovery_metadata_params.get()); // set current_discovery_phase_
analytics_recorder.OnStopDiscovery();
analytics_recorder.OnEndpointFound(BLUETOOTH);
@@ -2136,8 +2223,11 @@ TEST(AnalyticsRecorderOnConnectionClosedTest,
// via OnStartAdvertising, current_strategy_session_ is set in
// UpdateStrategySessionLocked.
auto advertising_metadata_params =
analytics_recorder.BuildAdvertisingMetadataParams();
analytics_recorder.OnStartAdvertising(connections::Strategy::kP2pStar,
/*mediums=*/{BLE, BLUETOOTH}, {});
/*mediums=*/{BLE, BLUETOOTH},
advertising_metadata_params.get());
analytics_recorder.OnStopAdvertising();
// LogSession
@@ -0,0 +1,36 @@
// Copyright 2024 Google LLC
//
// 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
//
// https://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.
#ifndef ANALYTICS_DISCOVERY_METADATA_PARAMS_H_
#define ANALYTICS_DISCOVERY_METADATA_PARAMS_H_
#include <vector>
#include "internal/proto/analytics/connections_log.pb.h"
namespace nearby {
// A struct to construct DiscoveryMetadata for the analytics recorder.
struct DiscoveryMetadataParams {
bool is_extended_advertisement_supported = false;
int connected_ap_frequency = 0;
bool is_nfc_available = false;
std::vector<location::nearby::analytics::proto::ConnectionsLog::
OperationResultWithMedium>
operation_result_with_mediums = {};
};
} // namespace nearby
#endif // ANALYTICS_DISCOVERY_METADATA_PARAMS_H_
+13 -3
View File
@@ -35,7 +35,9 @@
#include "connections/advertising_options.h"
#include "connections/connection_options.h"
#include "connections/discovery_options.h"
#include "connections/implementation/analytics/advertising_metadata_params.h"
#include "connections/implementation/analytics/analytics_recorder.h"
#include "connections/implementation/analytics/discovery_metadata_params.h"
#include "connections/implementation/flags/nearby_connections_feature_flags.h"
#include "connections/listeners.h"
#include "connections/medium_selector.h"
@@ -240,9 +242,12 @@ void ClientProxy::StartedAdvertising(
const std::vector<location::nearby::proto::connections::Medium> medium_vector(
mediums.begin(), mediums.end());
std::unique_ptr<AdvertisingMetadataParams> advertising_metadata_params;
advertising_metadata_params =
GetAnalyticsRecorder().BuildAdvertisingMetadataParams();
// TODO(edwinwu): Implement to pass real values for OperatoinResultWithMedium.
analytics_recorder_->OnStartAdvertising(strategy, medium_vector, {}, false,
0);
analytics_recorder_->OnStartAdvertising(strategy, medium_vector,
advertising_metadata_params.get());
}
void ClientProxy::StoppedAdvertising() {
@@ -368,8 +373,13 @@ void ClientProxy::StartedDiscovery(
const std::vector<location::nearby::proto::connections::Medium> medium_vector(
mediums.begin(), mediums.end());
std::unique_ptr<DiscoveryMetadataParams> discovery_metadata_params;
discovery_metadata_params =
GetAnalyticsRecorder().BuildDiscoveryMetadataParams();
// TODO(edwinwu): Implement to pass real values for OperatoinResultWithMedium.
analytics_recorder_->OnStartDiscovery(strategy, medium_vector, {}, false, 0);
analytics_recorder_->OnStartDiscovery(
strategy, medium_vector,
discovery_metadata_params.get());
}
void ClientProxy::StoppedDiscovery() {