mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-01 22:58:47 -04:00
make it easier to debug timing related problems
This commit is contained in:
parent
fdca6edf20
commit
ef189d50a7
1 changed files with 42 additions and 7 deletions
|
|
@ -50,29 +50,39 @@
|
|||
#include <pulsecore/rtsig.h>
|
||||
#include <pulsecore/flist.h>
|
||||
#include <pulsecore/core-util.h>
|
||||
|
||||
#include <pulsecore/winsock.h>
|
||||
#include <pulsecore/ratelimit.h>
|
||||
|
||||
#include "rtpoll.h"
|
||||
|
||||
/* #define DEBUG_TIMING */
|
||||
|
||||
struct pa_rtpoll {
|
||||
struct pollfd *pollfd, *pollfd2;
|
||||
unsigned n_pollfd_alloc, n_pollfd_used;
|
||||
|
||||
pa_bool_t timer_enabled;
|
||||
struct timeval next_elapse;
|
||||
pa_bool_t timer_enabled:1;
|
||||
|
||||
pa_bool_t scan_for_dead;
|
||||
pa_bool_t running, installed, rebuild_needed, quit;
|
||||
pa_bool_t scan_for_dead:1;
|
||||
pa_bool_t running:1;
|
||||
pa_bool_t installed:1;
|
||||
pa_bool_t rebuild_needed:1;
|
||||
pa_bool_t quit:1;
|
||||
|
||||
#ifdef HAVE_PPOLL
|
||||
pa_bool_t timer_armed:1;
|
||||
#ifdef __linux__
|
||||
pa_bool_t dont_use_ppoll:1;
|
||||
#endif
|
||||
int rtsig;
|
||||
sigset_t sigset_unblocked;
|
||||
timer_t timer;
|
||||
pa_bool_t timer_armed;
|
||||
#ifdef __linux__
|
||||
pa_bool_t dont_use_ppoll;
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_TIMING
|
||||
pa_usec_t timestamp;
|
||||
pa_usec_t slept, awake;
|
||||
#endif
|
||||
|
||||
PA_LLIST_HEAD(pa_rtpoll_item, items);
|
||||
|
|
@ -149,6 +159,11 @@ pa_rtpoll *pa_rtpoll_new(void) {
|
|||
|
||||
PA_LLIST_HEAD_INIT(pa_rtpoll_item, p->items);
|
||||
|
||||
#ifdef DEBUG_TIMING
|
||||
p->timestamp = pa_rtclock_usec();
|
||||
p->slept = p->awake = 0;
|
||||
#endif
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
|
|
@ -377,6 +392,14 @@ int pa_rtpoll_run(pa_rtpoll *p, pa_bool_t wait) {
|
|||
pa_timeval_add(&timeout, pa_timeval_diff(&p->next_elapse, &now));
|
||||
}
|
||||
|
||||
#ifdef DEBUG_TIMING
|
||||
{
|
||||
pa_usec_t now = pa_rtclock_usec();
|
||||
p->awake = now - p->timestamp;
|
||||
p->timestamp = now;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* OK, now let's sleep */
|
||||
#ifdef HAVE_PPOLL
|
||||
|
||||
|
|
@ -396,6 +419,18 @@ int pa_rtpoll_run(pa_rtpoll *p, pa_bool_t wait) {
|
|||
#endif
|
||||
r = poll(p->pollfd, p->n_pollfd_used, (!wait || p->quit || p->timer_enabled) ? (int) ((timeout.tv_sec*1000) + (timeout.tv_usec / 1000)) : -1);
|
||||
|
||||
#ifdef DEBUG_TIMING
|
||||
{
|
||||
pa_usec_t now = pa_rtclock_usec();
|
||||
p->slept = now - p->timestamp;
|
||||
p->timestamp = now;
|
||||
|
||||
pa_log("Process time %llu ms; sleep time %llu ms",
|
||||
(unsigned long long) (p->awake / PA_USEC_PER_MSEC),
|
||||
(unsigned long long) (p->slept / PA_USEC_PER_MSEC));
|
||||
}
|
||||
#endif
|
||||
|
||||
if (r < 0) {
|
||||
if (errno == EAGAIN || errno == EINTR)
|
||||
r = 0;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue