mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
ARA: Fix plugins in Logic by making the DocumentController not inherit from Timer
A Timer will only be created for the analysis task when necessary. This ensures that the ScopedJuceInitialiser_GUI member inside the DocumentController is initialised before a Timer instance is even created.
This commit is contained in:
parent
4f4ddf9733
commit
00e96e7779
1 changed files with 33 additions and 11 deletions
|
|
@ -26,8 +26,31 @@
|
|||
namespace juce
|
||||
{
|
||||
|
||||
class ARADocumentControllerSpecialisation::ARADocumentControllerImpl : public ARADocumentController,
|
||||
private juce::Timer
|
||||
class SimpleTimer final : private Timer
|
||||
{
|
||||
public:
|
||||
SimpleTimer (int frequencyHz, std::function<void()> callbackIn)
|
||||
: callback (std::move (callbackIn))
|
||||
{
|
||||
jassert (callback);
|
||||
startTimerHz (frequencyHz);
|
||||
}
|
||||
|
||||
~SimpleTimer() override
|
||||
{
|
||||
stopTimer();
|
||||
}
|
||||
|
||||
private:
|
||||
void timerCallback() override
|
||||
{
|
||||
callback();
|
||||
}
|
||||
|
||||
std::function<void()> callback;
|
||||
};
|
||||
|
||||
class ARADocumentControllerSpecialisation::ARADocumentControllerImpl : public ARADocumentController
|
||||
{
|
||||
public:
|
||||
ARADocumentControllerImpl (const ARA::PlugIn::PlugInEntry* entry,
|
||||
|
|
@ -204,10 +227,6 @@ protected:
|
|||
void didUpdatePlaybackRegionProperties (ARA::PlugIn::PlaybackRegion* playbackRegion) noexcept override;
|
||||
void willDestroyPlaybackRegion (ARA::PlugIn::PlaybackRegion* playbackRegion) noexcept override;
|
||||
|
||||
//==============================================================================
|
||||
// juce::Timer overrides
|
||||
void timerCallback() override;
|
||||
|
||||
public:
|
||||
//==============================================================================
|
||||
/** @internal */
|
||||
|
|
@ -248,6 +267,9 @@ private:
|
|||
std::atomic<bool> internalAnalysisProgressIsSynced { true };
|
||||
ScopedJuceInitialiser_GUI libraryInitialiser;
|
||||
int activeAudioSourcesCount = 0;
|
||||
std::optional<SimpleTimer> analysisTimer;
|
||||
|
||||
void analysisTimerCallback();
|
||||
|
||||
//==============================================================================
|
||||
template <typename ModelObject, typename Function, typename... Ts>
|
||||
|
|
@ -363,10 +385,10 @@ void ARADocumentControllerSpecialisation::ARADocumentControllerImpl::didEndEditi
|
|||
{
|
||||
notifyListeners (&ARADocument::Listener::didEndEditing, static_cast<ARADocument*> (getDocument()));
|
||||
|
||||
if (isTimerRunning() && (activeAudioSourcesCount == 0))
|
||||
stopTimer();
|
||||
else if (! isTimerRunning() && (activeAudioSourcesCount > 0))
|
||||
startTimerHz (20);
|
||||
if (activeAudioSourcesCount == 0)
|
||||
analysisTimer.reset();
|
||||
else if (! analysisTimer.has_value() && (activeAudioSourcesCount > 0))
|
||||
analysisTimer.emplace (20, [this] { analysisTimerCallback(); });
|
||||
}
|
||||
|
||||
void ARADocumentControllerSpecialisation::ARADocumentControllerImpl::willNotifyModelUpdates() noexcept
|
||||
|
|
@ -760,7 +782,7 @@ namespace ModelUpdateControllerProgressAdapter
|
|||
}
|
||||
}
|
||||
|
||||
void ARADocumentControllerSpecialisation::ARADocumentControllerImpl::timerCallback()
|
||||
void ARADocumentControllerSpecialisation::ARADocumentControllerImpl::analysisTimerCallback()
|
||||
{
|
||||
if (! internalAnalysisProgressIsSynced.exchange (true, std::memory_order_release))
|
||||
for (auto& audioSource : getDocument()->getAudioSources())
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue