Browse Source

MT#55283 report run times of timer threads

Change-Id: I2e2eaa0e0ad0a0b337123944bd8c285069221854
pull/1676/head
Richard Fuchs 3 years ago
parent
commit
594eb9d78f
1 changed files with 18 additions and 0 deletions
  1. +18
    -0
      daemon/aux.c

+ 18
- 0
daemon/aux.c View File

@ -35,6 +35,7 @@ struct scheduler {
};
struct looper_thread {
void (*f)(void);
const char *name;
};
@ -313,10 +314,26 @@ static void thread_looper_helper(void *fp) {
struct looper_thread lh = *lhp;
g_slice_free1(sizeof(*lhp), lhp);
long long interval_us = 1000000;
static const long long warn_limit_pct = 20; // 20%
long long warn_limit_us = interval_us * warn_limit_pct / 100;
while (!rtpe_shutdown) {
gettimeofday(&rtpe_now, NULL);
lh.f();
struct timeval stop;
gettimeofday(&stop, NULL);
long long duration_us = timeval_diff(&stop, &rtpe_now);
if (duration_us > warn_limit_us)
ilog(LOG_WARN, "Run time of timer \"%s\": %lli.%06lli sec, "
"exceeding limit of %lli%% (%lli.%06lli sec)",
lh.name,
duration_us / 1000000, duration_us % 1000000,
warn_limit_pct,
warn_limit_us / 1000000, warn_limit_us % 1000000);
thread_cancel_enable();
usleep(1000000); /* sleep for 1 second in each iteration */
thread_cancel_disable();
@ -327,6 +344,7 @@ void thread_create_looper(void (*f)(void), const char *scheduler, int priority,
struct looper_thread *lh = g_slice_alloc(sizeof(*lh));
*lh = (__typeof__(*lh)) {
.f = f,
.name = name,
};
thread_create_detach_prio(thread_looper_helper, lh, scheduler, priority, name);
}

Loading…
Cancel
Save