diff options
author | Yu-Hsuan Hsu <yuhsuan@chromium.org> | 2021-03-24 23:33:42 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-03-30 22:01:59 +0000 |
commit | fb309cc39ae9473caa840cc5114c7f5fffc53e13 (patch) | |
tree | df7cae1bc91bb7e198d565c48c987210bfcfe4fd | |
parent | e6eba5ff08c60ab02aafb17e0101baaf7a381195 (diff) | |
download | adhd-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.c | 1 | ||||
-rw-r--r-- | cras/src/server/cras_server_metrics.c | 39 | ||||
-rw-r--r-- | cras/src/server/cras_server_metrics.h | 3 |
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); |