blob: 966d515d3bfe6fe8b5193a1f119f2e669b678306 [file] [log] [blame]
/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include <errno.h>
#include <stdio.h>
#include <syslog.h>
#include "cras_metrics.h"
#include "cras_main_message.h"
const char kNoCodecsFoundMetric[] = "Cras.NoCodecsFoundAtBoot";
const char kStreamTimeoutMilliSeconds[] = "Cras.StreamTimeoutMilliSeconds";
/* Type of metrics to log. */
enum CRAS_SERVER_METRICS_TYPE {
LONGEST_FETCH_DELAY,
};
struct cras_server_metrics_message {
struct cras_main_message header;
enum CRAS_SERVER_METRICS_TYPE metrics_type;
unsigned data;
};
int cras_server_metrics_longest_fetch_delay(unsigned delay_msec)
{
struct cras_server_metrics_message msg;
int err;
msg.header.type = CRAS_MAIN_METRICS;
msg.header.length = sizeof(msg);
msg.metrics_type = LONGEST_FETCH_DELAY;
msg.data = delay_msec;
err = cras_main_message_send((struct cras_main_message *)&msg);
if (err < 0) {
syslog(LOG_ERR, "Failed to send metrics message");
return err;
}
return 0;
}
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);
}
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 LONGEST_FETCH_DELAY:
metrics_longest_fetch_delay(metrics_msg->data);
break;
default:
syslog(LOG_ERR, "Unknown metrics type %u",
metrics_msg->metrics_type);
break;
}
}
int cras_server_metrics_init() {
cras_main_message_add_handler(CRAS_MAIN_METRICS,
handle_metrics_message, NULL);
return 0;
}