From 73a20425512a7cf42725aea2c8f8072fe684d2ff Mon Sep 17 00:00:00 2001 From: Sugar Zhang Date: Tue, 16 Aug 2022 14:59:42 +0800 Subject: [PATCH] ALSA: pcm: Add support trace for applptr-start This patch add trace 'applptr_start' for analyse R/W whether it's blocked by user or kernel space. CONFIG_FUNCTION_TRACER CONFIG_FUNCTION_GRAPH_TRACER CONFIG_STACK_TRACER CONFIG_DYNAMIC_FTRACE /# cd /sys/kernel/debug/tracing /# echo "snd_pcm:applptr" >> set_event /# echo "snd_pcm:applptr_start" >> set_event /# echo "snd_pcm:hwptr" >> set_event /# echo "snd_pcm:xrun" >> set_event /# echo 1 > tracing_on /# cat trace_pipe > trace.txt 149.773314: applptr_start: pcmC1D0c/sub0: size=4096 149.794870: applptr: pcmC1D0c/sub0: prev=0, curr=1024, avail=0, period=1024, buf=4096 149.816192: applptr: pcmC1D0c/sub0: prev=1024, curr=2048, avail=0, period=1024, buf=4096 149.837526: applptr: pcmC1D0c/sub0: prev=2048, curr=3072, avail=0, period=1024, buf=4096 149.858859: applptr: pcmC1D0c/sub0: prev=3072, curr=4096, avail=0, period=1024, buf=4096 149.858871: applptr_start: pcmC1D0c/sub0: size=4096 149.880192: applptr: pcmC1D0c/sub0: prev=4096, curr=5120, avail=0, period=1024, buf=4096 149.901523: applptr: pcmC1D0c/sub0: prev=5120, curr=6144, avail=0, period=1024, buf=4096 149.922857: applptr: pcmC1D0c/sub0: prev=6144, curr=7168, avail=0, period=1024, buf=4096 149.944192: applptr: pcmC1D0c/sub0: prev=7168, curr=8192, avail=0, period=1024, buf=4096 149.944202: applptr_start: pcmC1D0c/sub0: size=4096 149.965524: applptr: pcmC1D0c/sub0: prev=8192, curr=9216, avail=0, period=1024, buf=4096 149.986858: applptr: pcmC1D0c/sub0: prev=9216, curr=10240, avail=0, period=1024, buf=4096 150.008191: applptr: pcmC1D0c/sub0: prev=10240, curr=11264, avail=0, period=1024, buf=4096 150.029529: applptr: pcmC1D0c/sub0: prev=11264, curr=12288, avail=0, period=1024, buf=4096 150.029539: applptr_start: pcmC1D0c/sub0: size=4096 150.050859: applptr: pcmC1D0c/sub0: prev=12288, curr=13312, avail=0, period=1024, buf=4096 150.072191: applptr: pcmC1D0c/sub0: prev=13312, curr=14336, avail=0, period=1024, buf=4096 150.093524: applptr: pcmC1D0c/sub0: prev=14336, curr=15360, avail=0, period=1024, buf=4096 150.114859: applptr: pcmC1D0c/sub0: prev=15360, curr=16384, avail=0, period=1024, buf=4096 Signed-off-by: Sugar Zhang Change-Id: I66dad75dc183d887ee413539e3df6d77a90a70f6 --- sound/core/pcm_lib.c | 3 +++ sound/core/pcm_trace.h | 26 ++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/sound/core/pcm_lib.c b/sound/core/pcm_lib.c index 289f52af15b9..062eacd65668 100644 --- a/sound/core/pcm_lib.c +++ b/sound/core/pcm_lib.c @@ -28,6 +28,7 @@ #define trace_xrun(substream) #define trace_hw_ptr_error(substream, reason) #define trace_applptr(substream, prev, curr) +#define trace_applptr_start(substream, frame) #endif static int fill_silence_frames(struct snd_pcm_substream *substream, @@ -2131,6 +2132,8 @@ snd_pcm_sframes_t __snd_pcm_lib_xfer(struct snd_pcm_substream *substream, if (err < 0) return err; + trace_applptr_start(substream, size); + is_playback = substream->stream == SNDRV_PCM_STREAM_PLAYBACK; if (interleaved) { if (runtime->access != SNDRV_PCM_ACCESS_RW_INTERLEAVED && diff --git a/sound/core/pcm_trace.h b/sound/core/pcm_trace.h index f18da2050772..535fbaa60c71 100644 --- a/sound/core/pcm_trace.h +++ b/sound/core/pcm_trace.h @@ -141,6 +141,32 @@ TRACE_EVENT(applptr, ) ); +TRACE_EVENT(applptr_start, + TP_PROTO(struct snd_pcm_substream *substream, snd_pcm_uframes_t size), + TP_ARGS(substream, size), + TP_STRUCT__entry( + __field( unsigned int, card ) + __field( unsigned int, device ) + __field( unsigned int, number ) + __field( unsigned int, stream ) + __field( snd_pcm_uframes_t, size ) + ), + TP_fast_assign( + __entry->card = (substream)->pcm->card->number; + __entry->device = (substream)->pcm->device; + __entry->number = (substream)->number; + __entry->stream = (substream)->stream; + __entry->size = (size); + ), + TP_printk("pcmC%dD%d%s/sub%d: size=%lu", + __entry->card, + __entry->device, + __entry->stream ? "c" : "p", + __entry->number, + __entry->size + ) +); + #endif /* _PCM_TRACE_H */ /* This part must be outside protection */