summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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);