Browse Source

Cleanup engine Process code

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@1346 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/0.61
sletz 19 years ago
parent
commit
847c38a2fe
2 changed files with 57 additions and 3 deletions
  1. +55
    -3
      common/JackEngine.cpp
  2. +2
    -0
      common/JackEngine.h

+ 55
- 3
common/JackEngine.cpp View File

@@ -110,6 +110,7 @@ int JackEngine::Allocate()
// Graph management
//------------------

/*
bool JackEngine::Process(jack_time_t callback_usecs)
{
bool res = true;
@@ -131,7 +132,7 @@ bool JackEngine::Process(jack_time_t callback_usecs)
} else {
JackLog("Process: graph not finished!\n");
if (callback_usecs > fLastSwitchUsecs + fEngineControl->fTimeOutUsecs) {
JackLog("Process: switch to next state %ld\n", long(callback_usecs - fLastSwitchUsecs));
JackLog("Process: switch to next state delta = %ld\n", long(callback_usecs - fLastSwitchUsecs));
//RemoveZombifiedClients(callback_usecs); TODO
fLastSwitchUsecs = callback_usecs;
if (fGraphManager->RunNextGraph())
@@ -139,18 +140,69 @@ bool JackEngine::Process(jack_time_t callback_usecs)
fSignal->SignalAll(); // Signal for threads waiting for next cycle
res = true;
} else {
JackLog("Process: waiting to switch %ld\n", long(callback_usecs - fLastSwitchUsecs));
JackLog("Process: waiting to switch delta = %ld\n", long(callback_usecs - fLastSwitchUsecs));
if (callback_usecs < fLastSwitchUsecs + 2 * fEngineControl->fPeriodUsecs) // Signal XRun only for the first failling cycle
CheckXRun(callback_usecs);
fGraphManager->RunCurrentGraph();
res = false;
}
}
}

// Transport
fEngineControl->CycleEnd(fClientTable);
return res;
}
*/

void JackEngine::ProcessNext(jack_time_t callback_usecs)
{
fLastSwitchUsecs = callback_usecs;
if (fGraphManager->RunNextGraph()) // True if the graph actually switched to a new state
fChannel->ClientNotify(ALL_CLIENTS, JackNotifyChannelInterface::kGraphOrderCallback, 0);
fSignal->SignalAll(); // Signal for threads waiting for next cycle
}

void JackEngine::ProcessCurrent(jack_time_t callback_usecs)
{
if (callback_usecs < fLastSwitchUsecs + 2 * fEngineControl->fPeriodUsecs) // Signal XRun only for the first failling cycle
CheckXRun(callback_usecs);
fGraphManager->RunCurrentGraph();
}

bool JackEngine::Process(jack_time_t callback_usecs)
{
bool res = true;
// Transport
fEngineControl->CycleBegin(callback_usecs);

// Timing
fEngineControl->IncFrameTime(callback_usecs);
fEngineTiming->UpdateTiming(callback_usecs);

// Graph
if (fGraphManager->IsFinishedGraph()) {
ProcessNext(callback_usecs);
res = true;
} else {
JackLog("Process: graph not finished!\n");
if (callback_usecs > fLastSwitchUsecs + fEngineControl->fTimeOutUsecs) {
JackLog("Process: switch to next state delta = %ld\n", long(callback_usecs - fLastSwitchUsecs));
//RemoveZombifiedClients(callback_usecs); TODO
ProcessNext(callback_usecs);
res = true;
} else {
JackLog("Process: waiting to switch delta = %ld\n", long(callback_usecs - fLastSwitchUsecs));
ProcessCurrent(callback_usecs);
res = false;
}
}

// Transport
fEngineControl->CycleEnd(fClientTable);
return res;
}


/*
Client that finish *after* the callback date are considered late even if their output buffers may have been


+ 2
- 0
common/JackEngine.h View File

@@ -59,6 +59,8 @@ class JackEngine
bool IsZombie(JackClientInterface* client, jack_time_t current_time);
void RemoveZombifiedClients(jack_time_t current_time);
void GetZombifiedClients(bool clients[CLIENT_NUM], jack_time_t current_time);
void ProcessNext(jack_time_t callback_usecs);
void ProcessCurrent(jack_time_t callback_usecs);

public:



Loading…
Cancel
Save