audio: add audio timer trace points
Track audio timer starts and stops. Also trace delayed audio timer calls. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Message-id: 20180702161524.17268-1-kraxel@redhat.com
This commit is contained in:
parent
cabedbc24e
commit
1a961e785f
@ -29,6 +29,7 @@
|
|||||||
#include "sysemu/sysemu.h"
|
#include "sysemu/sysemu.h"
|
||||||
#include "qemu/cutils.h"
|
#include "qemu/cutils.h"
|
||||||
#include "sysemu/replay.h"
|
#include "sysemu/replay.h"
|
||||||
|
#include "trace.h"
|
||||||
|
|
||||||
#define AUDIO_CAP "audio"
|
#define AUDIO_CAP "audio"
|
||||||
#include "audio_int.h"
|
#include "audio_int.h"
|
||||||
@ -1129,6 +1130,10 @@ static void audio_pcm_print_info (const char *cap, struct audio_pcm_info *info)
|
|||||||
/*
|
/*
|
||||||
* Timer
|
* Timer
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
static bool audio_timer_running;
|
||||||
|
static uint64_t audio_timer_last;
|
||||||
|
|
||||||
static int audio_is_timer_needed (void)
|
static int audio_is_timer_needed (void)
|
||||||
{
|
{
|
||||||
HWVoiceIn *hwi = NULL;
|
HWVoiceIn *hwi = NULL;
|
||||||
@ -1148,14 +1153,31 @@ static void audio_reset_timer (AudioState *s)
|
|||||||
if (audio_is_timer_needed ()) {
|
if (audio_is_timer_needed ()) {
|
||||||
timer_mod_anticipate_ns(s->ts,
|
timer_mod_anticipate_ns(s->ts,
|
||||||
qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + conf.period.ticks);
|
qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + conf.period.ticks);
|
||||||
}
|
if (!audio_timer_running) {
|
||||||
else {
|
audio_timer_running = true;
|
||||||
timer_del (s->ts);
|
audio_timer_last = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
|
||||||
|
trace_audio_timer_start(conf.period.ticks / SCALE_MS);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
timer_del(s->ts);
|
||||||
|
if (audio_timer_running) {
|
||||||
|
audio_timer_running = false;
|
||||||
|
trace_audio_timer_stop();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void audio_timer (void *opaque)
|
static void audio_timer (void *opaque)
|
||||||
{
|
{
|
||||||
|
int64_t now, diff;
|
||||||
|
|
||||||
|
now = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
|
||||||
|
diff = now - audio_timer_last;
|
||||||
|
if (diff > conf.period.ticks * 3 / 2) {
|
||||||
|
trace_audio_timer_delayed(diff / SCALE_MS);
|
||||||
|
}
|
||||||
|
audio_timer_last = now;
|
||||||
|
|
||||||
audio_run ("timer");
|
audio_run ("timer");
|
||||||
audio_reset_timer (opaque);
|
audio_reset_timer (opaque);
|
||||||
}
|
}
|
||||||
|
@ -15,3 +15,8 @@ alsa_no_frames(int state) "No frames available and ALSA state is %d"
|
|||||||
# audio/ossaudio.c
|
# audio/ossaudio.c
|
||||||
oss_version(int version) "OSS version = 0x%x"
|
oss_version(int version) "OSS version = 0x%x"
|
||||||
oss_invalid_available_size(int size, int bufsize) "Invalid available size, size=%d bufsize=%d"
|
oss_invalid_available_size(int size, int bufsize) "Invalid available size, size=%d bufsize=%d"
|
||||||
|
|
||||||
|
# audio/audio.c
|
||||||
|
audio_timer_start(int interval) "interval %d ms"
|
||||||
|
audio_timer_stop(void) ""
|
||||||
|
audio_timer_delayed(int interval) "interval %d ms"
|
||||||
|
Loading…
Reference in New Issue
Block a user