From 847c38a2fe0e29156661eeef36ca8069d2c7e490 Mon Sep 17 00:00:00 2001 From: sletz Date: Fri, 12 Jan 2007 15:54:33 +0000 Subject: [PATCH] Cleanup engine Process code git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@1346 0c269be4-1314-0410-8aa9-9f06e86f4224 --- common/JackEngine.cpp | 58 ++++++++++++++++++++++++++++++++++++++++++++++++--- common/JackEngine.h | 2 ++ 2 files changed, 57 insertions(+), 3 deletions(-) diff --git a/common/JackEngine.cpp b/common/JackEngine.cpp index cb4e4801..fe2343e4 100644 --- a/common/JackEngine.cpp +++ b/common/JackEngine.cpp @@ -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 diff --git a/common/JackEngine.h b/common/JackEngine.h index 0f0ea01b..c1cfa291 100644 --- a/common/JackEngine.h +++ b/common/JackEngine.h @@ -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: -- 2.11.4.GIT