Browse Source

made cpu load more accurate

git-svn-id: svn+ssh://jackaudio.org/trunk/jack@172 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/0.109.0
pbd 24 years ago
parent
commit
bc97d5427b
2 changed files with 47 additions and 45 deletions
  1. +1
    -1
      configure.in
  2. +46
    -44
      engine.c

+ 1
- 1
configure.in View File

@@ -5,7 +5,7 @@ AC_CONFIG_AUX_DIR(.)

JACK_MAJOR_VERSION=0
JACK_MINOR_VERSION=26
JACK_MICRO_VERSION=1
JACK_MICRO_VERSION=2

BETA=



+ 46
- 44
engine.c View File

@@ -424,7 +424,6 @@ jack_process (jack_engine_t *engine, nframes_t nframes)
int status;
float delayed_usecs;
unsigned long long now, then;
unsigned long long clients_start, clients_end;

engine->process_errors = 0;

@@ -438,8 +437,6 @@ jack_process (jack_engine_t *engine, nframes_t nframes)
engine->control->time.frame = engine->timebase_client->control->frame_time;
}

clients_start = get_cycles();

for (node = engine->clients; engine->process_errors == 0 && node; ) {

client = (jack_client_internal_t *) node->data;
@@ -556,45 +553,6 @@ jack_process (jack_engine_t *engine, nframes_t nframes)
}
}

if (!engine->process_errors) {
clients_end = get_cycles();
/* store the execution time for this this part of the graph */
engine->rolling_client_usecs[engine->rolling_client_usecs_index++] = (float) (clients_end - clients_start) / engine->cpu_mhz;
if (engine->rolling_client_usecs_index >= JACK_ENGINE_ROLLING_COUNT) {
engine->rolling_client_usecs_index = 0;
}
/* every so often, recompute the current average use over the
last JACK_ENGINE_ROLLING_COUNT client iterations.
*/

if (++engine->rolling_client_usecs_cnt % engine->rolling_interval == 0) {
float average_usecs = 0;
int i;
for (i = 0; i < JACK_ENGINE_ROLLING_COUNT; i++) {
average_usecs += engine->rolling_client_usecs[i];
}
average_usecs /= i;
if (average_usecs < engine->driver->period_usecs) {
engine->spare_usecs = engine->driver->period_usecs - average_usecs;
} else {
engine->spare_usecs = 0;
}

engine->control->cpu_load = (1.0f - (engine->spare_usecs / engine->driver->period_usecs)) * 100.0f;

if (engine->verbose) {
fprintf (stderr, "load = %.4f average usecs: %.3f, spare = %.3f\n",
engine->control->cpu_load, average_usecs, engine->spare_usecs);
}
}
}

return engine->process_errors > 0;
}

@@ -1386,6 +1344,7 @@ jack_main_thread (void *arg)
jack_engine_t *engine = (jack_engine_t *) arg;
jack_driver_t *driver = engine->driver;
int consecutive_excessive_delays;
unsigned long long cycle_start, cycle_end;

if (engine->control->real_time) {

@@ -1408,14 +1367,18 @@ jack_main_thread (void *arg)

consecutive_excessive_delays = 0;

engine->watchdog_check = 1;

while (1) {
int status;
nframes_t nframes;
float delayed_usecs;

engine->watchdog_check = 1;

nframes = driver->wait (driver, -1, &status, &delayed_usecs);
cycle_start = get_cycles();

engine->watchdog_check = 1;

#define WORK_SCALE 1.0f

@@ -1468,6 +1431,45 @@ jack_main_thread (void *arg)
default:
break;
}

cycle_end = get_cycles ();
/* store the execution time for this this part of the graph */
engine->rolling_client_usecs[engine->rolling_client_usecs_index++] = (float) (cycle_end - cycle_start) / engine->cpu_mhz;
if (engine->rolling_client_usecs_index >= JACK_ENGINE_ROLLING_COUNT) {
engine->rolling_client_usecs_index = 0;
}
/* every so often, recompute the current average use over the
last JACK_ENGINE_ROLLING_COUNT client iterations.
*/

if (++engine->rolling_client_usecs_cnt % engine->rolling_interval == 0) {
float average_usecs = 0;
int i;
for (i = 0; i < JACK_ENGINE_ROLLING_COUNT; i++) {
average_usecs += engine->rolling_client_usecs[i];
}
average_usecs /= i;
if (average_usecs < engine->driver->period_usecs) {
engine->spare_usecs = engine->driver->period_usecs - average_usecs;
} else {
engine->spare_usecs = 0;
}

engine->control->cpu_load = (1.0f - (engine->spare_usecs / engine->driver->period_usecs)) * 100.0f;

if (engine->verbose) {
fprintf (stderr, "load = %.4f average usecs: %.3f, spare = %.3f\n",
engine->control->cpu_load, average_usecs, engine->spare_usecs);
}
}


}

pthread_exit (0);


Loading…
Cancel
Save