summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYu-Hsuan Hsu <yuhsuan@chromium.org>2021-03-24 23:33:42 +0800
committerCommit Bot <commit-bot@chromium.org>2021-03-30 22:01:59 +0000
commitfb309cc39ae9473caa840cc5114c7f5fffc53e13 (patch)
treedf7cae1bc91bb7e198d565c48c987210bfcfe4fd
parente6eba5ff08c60ab02aafb17e0101baaf7a381195 (diff)
downloadadhd-fb309cc39ae9473caa840cc5114c7f5fffc53e13.tar.gz
CRAS: Log the UI gain of input devices
It is used for tracing the user behavior on the gain setting. When the device is closed, submit the UI gain to the UMA server. The original UI gain scaler is between 0 to 10. CRAS will multiply this value by 100 to get more precise number. BUG=b:183676276 TEST=Record audio and check the chrome://histograms Change-Id: I263943ac56c2f806a743d957b7a6fad42714360d Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/adhd/+/2784379 Reviewed-by: Cheng-Yi Chiang <cychiang@chromium.org> Commit-Queue: Yu-Hsuan Hsu <yuhsuan@chromium.org> Tested-by: Yu-Hsuan Hsu <yuhsuan@chromium.org>
-rw-r--r--cras/src/server/cras_iodev.c1
-rw-r--r--cras/src/server/cras_server_metrics.c39
-rw-r--r--cras/src/server/cras_server_metrics.h3
3 files changed, 43 insertions, 0 deletions
diff --git a/cras/src/server/cras_iodev.c b/cras/src/server/cras_iodev.c
index 66446853..651cef71 100644
--- a/cras/src/server/cras_iodev.c
+++ b/cras/src/server/cras_iodev.c
@@ -1021,6 +1021,7 @@ int cras_iodev_close(struct cras_iodev *iodev)
if (iodev->active_node) {
cras_server_metrics_device_runtime(iodev);
+ cras_server_metrics_device_gain(iodev);
cras_server_metrics_device_volume(iodev);
}
diff --git a/cras/src/server/cras_server_metrics.c b/cras/src/server/cras_server_metrics.c
index f4f54094..7e487107 100644
--- a/cras/src/server/cras_server_metrics.c
+++ b/cras/src/server/cras_server_metrics.c
@@ -25,6 +25,7 @@ const char kBusyloop[] = "Cras.Busyloop";
const char kBusyloopLength[] = "Cras.BusyloopLength";
const char kDeviceTypeInput[] = "Cras.DeviceTypeInput";
const char kDeviceTypeOutput[] = "Cras.DeviceTypeOutput";
+const char kDeviceGain[] = "Cras.DeviceGain";
const char kDeviceVolume[] = "Cras.DeviceVolume";
const char kFetchDelayMilliSeconds[] = "Cras.FetchDelayMilliSeconds";
const char kHighestDeviceDelayInput[] = "Cras.HighestDeviceDelayInput";
@@ -94,6 +95,7 @@ enum CRAS_SERVER_METRICS_TYPE {
BT_WIDEBAND_SELECTED_CODEC,
BUSYLOOP,
BUSYLOOP_LENGTH,
+ DEVICE_GAIN,
DEVICE_RUNTIME,
DEVICE_VOLUME,
HIGHEST_DEVICE_DELAY_INPUT,
@@ -626,6 +628,31 @@ int cras_server_metrics_device_runtime(struct cras_iodev *iodev)
return 0;
}
+int cras_server_metrics_device_gain(struct cras_iodev *iodev)
+{
+ struct cras_server_metrics_message msg;
+ union cras_server_metrics_data data;
+ int err;
+
+ if (iodev->direction == CRAS_STREAM_OUTPUT)
+ return 0;
+
+ data.device_data.type = get_metrics_device_type(iodev);
+ data.device_data.value =
+ (unsigned)100 * iodev->active_node->ui_gain_scaler;
+
+ init_server_metrics_msg(&msg, DEVICE_GAIN, data);
+
+ err = cras_server_metrics_message_send(
+ (struct cras_main_message *)&msg);
+ if (err < 0) {
+ syslog(LOG_ERR, "Failed to send metrics message: DEVICE_GAIN");
+ return err;
+ }
+
+ return 0;
+}
+
int cras_server_metrics_device_volume(struct cras_iodev *iodev)
{
struct cras_server_metrics_message msg;
@@ -1071,6 +1098,15 @@ static void metrics_device_runtime(struct cras_server_metrics_device_data data)
cras_metrics_log_sparse_histogram(kDeviceTypeOutput, data.type);
}
+static void metrics_device_gain(struct cras_server_metrics_device_data data)
+{
+ char metrics_name[METRICS_NAME_BUFFER_SIZE];
+
+ snprintf(metrics_name, METRICS_NAME_BUFFER_SIZE, "%s.%s", kDeviceGain,
+ metrics_device_type_str(data.type));
+ cras_metrics_log_histogram(metrics_name, data.value, 0, 2000, 20);
+}
+
static void metrics_device_volume(struct cras_server_metrics_device_data data)
{
char metrics_name[METRICS_NAME_BUFFER_SIZE];
@@ -1185,6 +1221,9 @@ static void handle_metrics_message(struct cras_main_message *msg, void *arg)
kHfpWidebandSpeechSelectedCodec,
metrics_msg->data.value);
break;
+ case DEVICE_GAIN:
+ metrics_device_gain(metrics_msg->data.device_data);
+ break;
case DEVICE_RUNTIME:
metrics_device_runtime(metrics_msg->data.device_data);
break;
diff --git a/cras/src/server/cras_server_metrics.h b/cras/src/server/cras_server_metrics.h
index 90b40d4e..e8458087 100644
--- a/cras/src/server/cras_server_metrics.h
+++ b/cras/src/server/cras_server_metrics.h
@@ -49,6 +49,9 @@ int cras_server_metrics_hfp_packet_loss(float packet_loss_ratio);
/* Logs runtime of a device. */
int cras_server_metrics_device_runtime(struct cras_iodev *iodev);
+/* Logs the gain of a device. */
+int cras_server_metrics_device_gain(struct cras_iodev *iodev);
+
/* Logs the volume of a device. */
int cras_server_metrics_device_volume(struct cras_iodev *iodev);