summaryrefslogtreecommitdiff
path: root/cras/src/server/cras_server_metrics.c
diff options
context:
space:
mode:
authorYu-Hsuan Hsu <yuhsuan@chromium.org>2018-10-05 13:36:43 +0800
committerchrome-bot <chrome-bot@chromium.org>2018-10-05 07:54:46 -0700
commit230cd444fd78f75f85225fb8369dcd0e09fed1c2 (patch)
treeb6ec0141db5557c4d67d2d24d3005c89553ccc6c /cras/src/server/cras_server_metrics.c
parentc9489d752a3db511c3bdc38a40a2d727b534354b (diff)
downloadadhd-230cd444fd78f75f85225fb8369dcd0e09fed1c2.tar.gz
CRAS: server_metrics - Log the highest hardware level per device
When we remove device, metrics will log the highest hardware level to UMA. It can help us to know how often the users get overrun. BUG=b:116066435 TEST=The highest hardware level can be recorded well on peppy. Change-Id: I5c42cc33c209b041fc5e88bc1688f50ed4592b13 Reviewed-on: https://chromium-review.googlesource.com/1263699 Commit-Ready: Yu-Hsuan Hsu <yuhsuan@chromium.org> Tested-by: Yu-Hsuan Hsu <yuhsuan@chromium.org> Reviewed-by: Cheng-Yi Chiang <cychiang@chromium.org>
Diffstat (limited to 'cras/src/server/cras_server_metrics.c')
-rw-r--r--cras/src/server/cras_server_metrics.c74
1 files changed, 46 insertions, 28 deletions
diff --git a/cras/src/server/cras_server_metrics.c b/cras/src/server/cras_server_metrics.c
index 03d22b41..c78ad64f 100644
--- a/cras/src/server/cras_server_metrics.c
+++ b/cras/src/server/cras_server_metrics.c
@@ -12,6 +12,8 @@
#include "cras_main_message.h"
#include "cras_rstream.h"
+const char kHighestInputHardwareLevel[] = "Cras.HighestInputHardwareLevel";
+const char kHighestOutputHardwareLevel[] = "Cras.HighestOutputHardwareLevel";
const char kNoCodecsFoundMetric[] = "Cras.NoCodecsFoundAtBoot";
const char kStreamTimeoutMilliSeconds[] = "Cras.StreamTimeoutMilliSeconds";
const char kStreamCallbackThreshold[] = "Cras.StreamCallbackThreshold";
@@ -22,6 +24,8 @@ const char kUnderrunsPerDevice[] = "Cras.UnderrunsPerDevice";
/* Type of metrics to log. */
enum CRAS_SERVER_METRICS_TYPE {
+ HIGHEST_INPUT_HW_LEVEL,
+ HIGHEST_OUTPUT_HW_LEVEL,
LONGEST_FETCH_DELAY,
NUM_UNDERRUNS,
STREAM_CONFIG
@@ -57,6 +61,36 @@ static void init_server_metrics_msg(
msg->data = data;
}
+int cras_server_metrics_highest_hw_level(unsigned hw_level,
+ enum CRAS_STREAM_DIRECTION direction)
+{
+ struct cras_server_metrics_message msg;
+ union cras_server_metrics_data data;
+ int err;
+
+ data.value = hw_level;
+
+ switch (direction) {
+ case CRAS_STREAM_INPUT:
+ init_server_metrics_msg(&msg, HIGHEST_INPUT_HW_LEVEL, data);
+ break;
+ case CRAS_STREAM_OUTPUT:
+ init_server_metrics_msg(&msg, HIGHEST_OUTPUT_HW_LEVEL, data);
+ break;
+ default:
+ return 0;
+ }
+
+ err = cras_main_message_send((struct cras_main_message *)&msg);
+ if (err < 0) {
+ syslog(LOG_ERR,
+ "Failed to send metrics message: HIGHEST_HW_LEVEL");
+ return err;
+ }
+
+ return 0;
+}
+
int cras_server_metrics_longest_fetch_delay(unsigned delay_msec)
{
struct cras_server_metrics_message msg;
@@ -115,32 +149,6 @@ int cras_server_metrics_stream_config(struct cras_rstream_config *config)
return 0;
}
-static void metrics_longest_fetch_delay(unsigned delay_msec)
-{
- static const int fetch_delay_min_msec = 1;
- static const int fetch_delay_max_msec = 10000;
- static const int fetch_delay_nbuckets = 10;
-
- cras_metrics_log_histogram(kStreamTimeoutMilliSeconds,
- delay_msec,
- fetch_delay_min_msec,
- fetch_delay_max_msec,
- fetch_delay_nbuckets);
-}
-
-static void metrics_num_underruns(unsigned num_underruns)
-{
- static const int num_underruns_min = 0;
- static const int num_underruns_max = 1000;
- static const int num_underruns_nbuckets = 10;
-
- cras_metrics_log_histogram(kUnderrunsPerDevice,
- num_underruns,
- num_underruns_min,
- num_underruns_max,
- num_underruns_nbuckets);
-}
-
static void metrics_stream_config(
struct cras_server_metrics_stream_config config)
{
@@ -166,11 +174,21 @@ static void handle_metrics_message(struct cras_main_message *msg, void *arg)
struct cras_server_metrics_message *metrics_msg =
(struct cras_server_metrics_message *)msg;
switch (metrics_msg->metrics_type) {
+ case HIGHEST_INPUT_HW_LEVEL:
+ cras_metrics_log_histogram(kHighestInputHardwareLevel,
+ metrics_msg->data.value, 1, 10000, 20);
+ break;
+ case HIGHEST_OUTPUT_HW_LEVEL:
+ cras_metrics_log_histogram(kHighestOutputHardwareLevel,
+ metrics_msg->data.value, 1, 10000, 20);
+ break;
case LONGEST_FETCH_DELAY:
- metrics_longest_fetch_delay(metrics_msg->data.value);
+ cras_metrics_log_histogram(kStreamTimeoutMilliSeconds,
+ metrics_msg->data.value, 1, 20000, 10);
break;
case NUM_UNDERRUNS:
- metrics_num_underruns(metrics_msg->data.value);
+ cras_metrics_log_histogram(kUnderrunsPerDevice,
+ metrics_msg->data.value, 0, 1000, 10);
break;
case STREAM_CONFIG:
metrics_stream_config(metrics_msg->data.stream_config);