diff options
author | Yu-Hsuan Hsu <yuhsuan@chromium.org> | 2021-02-05 15:54:35 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-02-08 07:47:53 +0000 |
commit | e3d5b546ff822c287857363937afc4dd6578aa97 (patch) | |
tree | 2af02108f9c1e1e755bda19888e7b80f6e275688 | |
parent | a59e8950467542956e1a52eeb023ac16c9e147f7 (diff) | |
download | adhd-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.c | 48 |
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)); } |