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
Valerio Pilo
Chris Caudle
John Emmas

---------------------------
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>

* 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
fRollingClientUsecs[fRollingClientUsecsIndex++] = last_cycle_end - fPrevCycleTime;
if (last_cycle_end > 0)
fRollingClientUsecs[fRollingClientUsecsIndex++] = last_cycle_end - fPrevCycleTime;
if (fRollingClientUsecsIndex >= JACK_ENGINE_ROLLING_COUNT)
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;
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);
}

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));
}

fRollingClientUsecsCnt++;
}

void JackEngineControl::ResetRollingUsecs()


+ 6
- 6
common/JackEngineControl.h View File

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

// 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 fRollingInterval;
float fCPULoad;


Loading…
Cancel
Save