mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-03 09:01:50 -05:00
rework cpu limit logic to use monotonic instead of wall clock time
This commit is contained in:
parent
961aa185e3
commit
8e71787551
2 changed files with 10 additions and 6 deletions
|
|
@ -24,11 +24,13 @@
|
|||
#endif
|
||||
|
||||
#include <pulse/error.h>
|
||||
#include <pulse/timeval.h>
|
||||
|
||||
#include <pulsecore/core-util.h>
|
||||
#include <pulsecore/core-error.h>
|
||||
#include <pulsecore/log.h>
|
||||
#include <pulsecore/macro.h>
|
||||
#include <pulsecore/rtclock.h>
|
||||
|
||||
#include "cpulimit.h"
|
||||
|
||||
|
|
@ -67,7 +69,7 @@
|
|||
#define CPUTIME_INTERVAL_HARD (5)
|
||||
|
||||
/* Time of the last CPU load check */
|
||||
static time_t last_time = 0;
|
||||
static pa_usec_t last_time = 0;
|
||||
|
||||
/* Pipe for communicating with the main loop */
|
||||
static int the_pipe[2] = {-1, -1};
|
||||
|
|
@ -117,20 +119,21 @@ static void signal_handler(int sig) {
|
|||
pa_assert(sig == SIGXCPU);
|
||||
|
||||
if (phase == PHASE_IDLE) {
|
||||
time_t now;
|
||||
pa_usec_t now, elapsed;
|
||||
|
||||
#ifdef PRINT_CPU_LOAD
|
||||
char t[256];
|
||||
#endif
|
||||
|
||||
time(&now);
|
||||
now = pa_rtclock_usec();
|
||||
elapsed = now - last_time;
|
||||
|
||||
#ifdef PRINT_CPU_LOAD
|
||||
pa_snprintf(t, sizeof(t), "Using %0.1f%% CPU\n", (double)CPUTIME_INTERVAL_SOFT/(now-last_time)*100);
|
||||
pa_snprintf(t, sizeof(t), "Using %0.1f%% CPU\n", ((double) CPUTIME_INTERVAL_SOFT * (double) PA_USEC_PER_SEC) / (double) elapsed * 100.0);
|
||||
write_err(t);
|
||||
#endif
|
||||
|
||||
if ((double) CPUTIME_INTERVAL_SOFT >= ((double) (now-last_time)*(double)CPUTIME_PERCENT/100)) {
|
||||
if (((double) CPUTIME_INTERVAL_SOFT * (double) PA_USEC_PER_SEC) >= ((double) elapsed * (double) CPUTIME_PERCENT / 100.0)) {
|
||||
static const char c = 'X';
|
||||
|
||||
write_err("Soft CPU time limit exhausted, terminating.\n");
|
||||
|
|
@ -179,7 +182,7 @@ int pa_cpu_limit_init(pa_mainloop_api *m) {
|
|||
pa_assert(the_pipe[1] == -1);
|
||||
pa_assert(!installed);
|
||||
|
||||
time(&last_time);
|
||||
last_time = pa_rtclock_usec();
|
||||
|
||||
/* Prepare the main loop pipe */
|
||||
if (pipe(the_pipe) < 0) {
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@
|
|||
***/
|
||||
|
||||
#include <pulsecore/macro.h>
|
||||
#include <pulse/sample.h>
|
||||
|
||||
struct timeval;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue