Sophie

Sophie

distrib > Mandriva > 2009.0 > i586 > by-pkgid > fdc8b76a926899432c1a880ebcf344a7 > files > 6

pulseaudio-0.9.10-11.1mdv2009.0.src.rpm

From 1f55911ed4be3926eee7826a161fbb35fc57eb10 Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Tue, 19 Aug 2008 23:03:37 +0200
Subject: [PATCH] rework cpu limit logic to use monotonic instead of wall clock time

---
 src/daemon/cpulimit.c   |   15 +++++++++------
 src/pulsecore/rtclock.h |    1 +
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/src/daemon/cpulimit.c b/src/daemon/cpulimit.c
index 620a93a..fc9abda 100644
--- a/src/daemon/cpulimit.c
+++ b/src/daemon/cpulimit.c
@@ -26,11 +26,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"
 
@@ -69,7 +71,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};
@@ -119,20 +121,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 (CPUTIME_INTERVAL_SOFT >= ((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");
@@ -181,7 +184,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) {
diff --git a/src/pulsecore/rtclock.h b/src/pulsecore/rtclock.h
index f0360af..81ccfb3 100644
--- a/src/pulsecore/rtclock.h
+++ b/src/pulsecore/rtclock.h
@@ -25,6 +25,7 @@
 ***/
 
 #include <pulsecore/macro.h>
+#include <pulse/sample.h>
 
 struct timeval;
 
-- 
1.6.0.2