Browse Source

John Emmas patch for DSP CPU computation.

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@4547 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/1.9.8
sletz 13 years ago
parent
commit
c88d56cfd5
3 changed files with 33 additions and 14 deletions
  1. +5
    -0
      ChangeLog
  2. +22
    -8
      common/JackEngineControl.cpp
  3. +6
    -6
      common/JackEngineControl.h

+ 5
- 0
ChangeLog View File

@@ -30,11 +30,16 @@ Adrian Knoth
David Garcia Garzon David Garcia Garzon
Valerio Pilo Valerio Pilo
Chris Caudle Chris Caudle
John Emmas


--------------------------- ---------------------------
Jackdmp changes log Jackdmp changes log
--------------------------- ---------------------------


2011-10-10 Stephane Letz <letz@grame.fr>

* John Emmas patch for DSP CPU computation.

2011-09-27 Stephane Letz <letz@grame.fr> 2011-09-27 Stephane Letz <letz@grame.fr>


* Gabriel Beddingfield patch for ALSA driver: error when source is non-native byte-order float. * Gabriel Beddingfield patch for ALSA driver: error when source is non-native byte-order float.


+ 22
- 8
common/JackEngineControl.cpp View File

@@ -53,23 +53,37 @@ void JackEngineControl::CalcCPULoad(JackClientInterface** table,
} }


// Store the execution time for later averaging // Store the execution time for later averaging
fRollingClientUsecs[fRollingClientUsecsIndex++] = last_cycle_end - fPrevCycleTime;
if (last_cycle_end > 0)
fRollingClientUsecs[fRollingClientUsecsIndex++] = last_cycle_end - fPrevCycleTime;
if (fRollingClientUsecsIndex >= JACK_ENGINE_ROLLING_COUNT) if (fRollingClientUsecsIndex >= JACK_ENGINE_ROLLING_COUNT)
fRollingClientUsecsIndex = 0; fRollingClientUsecsIndex = 0;


// Every so often, recompute the current maximum use over the
// last JACK_ENGINE_ROLLING_COUNT client iterations.

if (++fRollingClientUsecsCnt % fRollingInterval == 0) {

// Each time we have a full set of iterations, recompute the current
// usage from the latest JACK_ENGINE_ROLLING_COUNT client entries.
if (fRollingClientUsecsCnt && (fRollingClientUsecsIndex == 0)) {
jack_time_t avg_usecs = 0;
jack_time_t max_usecs = 0; jack_time_t max_usecs = 0;
for (int i = 0; i < JACK_ENGINE_ROLLING_COUNT; i++)

for (int i = 0; i < JACK_ENGINE_ROLLING_COUNT; i++) {
avg_usecs += fRollingClientUsecs[i]; // This is really a running
// total to be averaged later
max_usecs = JACK_MAX(fRollingClientUsecs[i], max_usecs); max_usecs = JACK_MAX(fRollingClientUsecs[i], max_usecs);
}


fMaxUsecs = JACK_MAX(fMaxUsecs, max_usecs); fMaxUsecs = JACK_MAX(fMaxUsecs, max_usecs);
fSpareUsecs = jack_time_t((max_usecs < fPeriodUsecs) ? fPeriodUsecs - max_usecs : 0);

if (max_usecs < ((fPeriodUsecs * 95) / 100)) {
// Average the values from our JACK_ENGINE_ROLLING_COUNT array
fSpareUsecs = (jack_time_t)(fPeriodUsecs - (avg_usecs / JACK_ENGINE_ROLLING_COUNT));
} else {
// Use the 'worst case' value (or zero if we exceeded 'fPeriodUsecs')
fSpareUsecs = jack_time_t((max_usecs < fPeriodUsecs) ? fPeriodUsecs - max_usecs : 0);
}

fCPULoad = ((1.f - (float(fSpareUsecs) / float(fPeriodUsecs))) * 50.f + (fCPULoad * 0.5f)); fCPULoad = ((1.f - (float(fSpareUsecs) / float(fPeriodUsecs))) * 50.f + (fCPULoad * 0.5f));
} }

fRollingClientUsecsCnt++;
} }


void JackEngineControl::ResetRollingUsecs() void JackEngineControl::ResetRollingUsecs()


+ 6
- 6
common/JackEngineControl.h View File

@@ -69,12 +69,12 @@ struct SERVER_EXPORT JackEngineControl : public JackShmMem
bool fVerbose; bool fVerbose;


// CPU Load // CPU Load
jack_time_t fPrevCycleTime;
jack_time_t fCurCycleTime;
jack_time_t fSpareUsecs;
jack_time_t fMaxUsecs;
jack_time_t fRollingClientUsecs[JACK_ENGINE_ROLLING_COUNT];
int fRollingClientUsecsCnt;
jack_time_t fPrevCycleTime;
jack_time_t fCurCycleTime;
jack_time_t fSpareUsecs;
jack_time_t fMaxUsecs;
jack_time_t fRollingClientUsecs[JACK_ENGINE_ROLLING_COUNT];
unsigned int fRollingClientUsecsCnt;
int fRollingClientUsecsIndex; int fRollingClientUsecsIndex;
int fRollingInterval; int fRollingInterval;
float fCPULoad; float fCPULoad;


Loading…
Cancel
Save