summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYu-Hsuan Hsu <yuhsuan@chromium.org>2021-02-05 15:54:35 +0800
committerCommit Bot <commit-bot@chromium.org>2021-02-08 07:47:53 +0000
commite3d5b546ff822c287857363937afc4dd6578aa97 (patch)
tree2af02108f9c1e1e755bda19888e7b80f6e275688
parenta59e8950467542956e1a52eeb023ac16c9e147f7 (diff)
downloadadhd-e3d5b546ff822c287857363937afc4dd6578aa97.tar.gz
CRAS: cras_server_metrics - Use normal histogram for runtime
For the stream runtime and the fetch delay, the UMA should not be logged as sparse histograms. Change to use normal histograms. Change the name so that the type in the server will be changed successfully. Cras.{Input|Output}StreamRuntime -> Cras.StreamRuntime.{Input|Output} Cras.StreamTimeoutMilliSeconds -> Cras.FetchDelayMilliSeconds BUG=b:177185438 TEST=Verified the UMA is logged correcly in chrome://histograms Change-Id: Id728f79c9b3fb0c0c77b399893a5773a1024023b Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/adhd/+/2675352 Reviewed-by: Cheng-Yi Chiang <cychiang@chromium.org> Tested-by: Yu-Hsuan Hsu <yuhsuan@chromium.org> Commit-Queue: Yu-Hsuan Hsu <yuhsuan@chromium.org>
-rw-r--r--cras/src/server/cras_server_metrics.c48
1 files changed, 36 insertions, 12 deletions
diff --git a/cras/src/server/cras_server_metrics.c b/cras/src/server/cras_server_metrics.c
index 05d156e9..e03dfd97 100644
--- a/cras/src/server/cras_server_metrics.c
+++ b/cras/src/server/cras_server_metrics.c
@@ -26,6 +26,7 @@ const char kBusyloopLength[] = "Cras.BusyloopLength";
const char kDeviceTypeInput[] = "Cras.DeviceTypeInput";
const char kDeviceTypeOutput[] = "Cras.DeviceTypeOutput";
const char kDeviceVolume[] = "Cras.DeviceVolume";
+const char kFetchDelayMilliSeconds[] = "Cras.FetchDelayMilliSeconds";
const char kHighestDeviceDelayInput[] = "Cras.HighestDeviceDelayInput";
const char kHighestDeviceDelayOutput[] = "Cras.HighestDeviceDelayOutput";
const char kHighestInputHardwareLevel[] = "Cras.HighestInputHardwareLevel";
@@ -47,12 +48,12 @@ const char kMissedCallbackSecondTimeInput[] =
const char kMissedCallbackSecondTimeOutput[] =
"Cras.MissedCallbackSecondTimeOutput";
const char kNoCodecsFoundMetric[] = "Cras.NoCodecsFoundAtBoot";
-const char kStreamTimeoutMilliSeconds[] = "Cras.StreamTimeoutMilliSeconds";
const char kStreamCallbackThreshold[] = "Cras.StreamCallbackThreshold";
const char kStreamClientTypeInput[] = "Cras.StreamClientTypeInput";
const char kStreamClientTypeOutput[] = "Cras.StreamClientTypeOutput";
const char kStreamFlags[] = "Cras.StreamFlags";
const char kStreamEffects[] = "Cras.StreamEffects";
+const char kStreamRuntime[] = "Cras.StreamRuntime";
const char kStreamSamplingFormat[] = "Cras.StreamSamplingFormat";
const char kStreamSamplingRate[] = "Cras.StreamSamplingRate";
const char kUnderrunsPerDevice[] = "Cras.UnderrunsPerDevice";
@@ -452,6 +453,33 @@ static void log_sparse_histogram_each_level(int num, int sample, ...)
va_end(valist);
}
+static void log_histogram_each_level(int num, int sample, int min, int max,
+ int nbuckets, ...)
+{
+ char metrics_name[METRICS_NAME_BUFFER_SIZE] = {};
+ va_list valist;
+ int i, len = 0;
+
+ va_start(valist, nbuckets);
+
+ for (i = 0; i < num && len < METRICS_NAME_BUFFER_SIZE; i++) {
+ int metric_len =
+ snprintf(metrics_name + len,
+ METRICS_NAME_BUFFER_SIZE - len, "%s%s",
+ i ? "." : "", va_arg(valist, char *));
+ // Exit early on error or running out of bufferspace. Avoids
+ // logging partial or corrupted strings.
+ if (metric_len < 0 ||
+ metric_len > METRICS_NAME_BUFFER_SIZE - len)
+ break;
+ len += metric_len;
+ cras_metrics_log_histogram(metrics_name, sample, min, max,
+ nbuckets);
+ }
+
+ va_end(valist);
+}
+
int cras_server_metrics_hfp_sco_connection_error(
enum CRAS_METRICS_BT_SCO_ERROR_TYPE type)
{
@@ -1053,21 +1081,17 @@ metrics_longest_fetch_delay(struct cras_server_metrics_stream_data data)
{
int fetch_delay_msec =
data.runtime.tv_sec * 1000 + data.runtime.tv_nsec / 1000000;
- log_sparse_histogram_each_level(
- 3, fetch_delay_msec, kStreamTimeoutMilliSeconds,
- metrics_client_type_str(data.client_type),
- metrics_stream_type_str(data.stream_type));
+ log_histogram_each_level(3, fetch_delay_msec, 0, 10000, 20,
+ kFetchDelayMilliSeconds,
+ metrics_client_type_str(data.client_type),
+ metrics_stream_type_str(data.stream_type));
}
static void metrics_stream_runtime(struct cras_server_metrics_stream_data data)
{
- char metrics_name[METRICS_NAME_BUFFER_SIZE];
-
- snprintf(metrics_name, METRICS_NAME_BUFFER_SIZE, "Cras.%sStreamRuntime",
- data.direction == CRAS_STREAM_INPUT ? "Input" : "Output");
-
- log_sparse_histogram_each_level(
- 3, (int)data.runtime.tv_sec, metrics_name,
+ log_histogram_each_level(
+ 4, (int)data.runtime.tv_sec, 0, 10000, 20, kStreamRuntime,
+ data.direction == CRAS_STREAM_INPUT ? "Input" : "Output",
metrics_client_type_str(data.client_type),
metrics_stream_type_str(data.stream_type));
}