diff --git a/modules/juce_events/juce_events.cpp b/modules/juce_events/juce_events.cpp index b7d8834cea..f604f9033b 100644 --- a/modules/juce_events/juce_events.cpp +++ b/modules/juce_events/juce_events.cpp @@ -67,6 +67,7 @@ #include "interprocess/juce_InterprocessConnectionServer.cpp" #include "interprocess/juce_ConnectedChildProcess.cpp" #include "interprocess/juce_NetworkServiceDiscovery.cpp" +#include "native/juce_ScopedLowPowerModeDisabler.cpp" //============================================================================== #if JUCE_MAC || JUCE_IOS diff --git a/modules/juce_events/juce_events.h b/modules/juce_events/juce_events.h index 246033842e..1fb0af5dad 100644 --- a/modules/juce_events/juce_events.h +++ b/modules/juce_events/juce_events.h @@ -90,6 +90,7 @@ #include "interprocess/juce_InterprocessConnectionServer.h" #include "interprocess/juce_ConnectedChildProcess.h" #include "interprocess/juce_NetworkServiceDiscovery.h" +#include "native/juce_ScopedLowPowerModeDisabler.h" #if JUCE_LINUX || JUCE_BSD #include "native/juce_linux_EventLoop.h" diff --git a/modules/juce_events/native/juce_ScopedLowPowerModeDisabler.cpp b/modules/juce_events/native/juce_ScopedLowPowerModeDisabler.cpp new file mode 100644 index 0000000000..1324fc9af1 --- /dev/null +++ b/modules/juce_events/native/juce_ScopedLowPowerModeDisabler.cpp @@ -0,0 +1,54 @@ +/* + ============================================================================== + + This file is part of the JUCE library. + Copyright (c) 2020 - Raw Material Software Limited + + JUCE is an open source library subject to commercial or open-source + licensing. + + The code included in this file is provided under the terms of the ISC license + http://www.isc.org/downloads/software-support-policy/isc-license. Permission + To use, copy, modify, and/or distribute this software for any purpose with or + without fee is hereby granted provided that the above copyright notice and + this permission notice appear in all copies. + + JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER + EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE + DISCLAIMED. + + ============================================================================== +*/ + +namespace juce +{ + +#if JUCE_MAC + +class ScopedLowPowerModeDisabler::Pimpl +{ +public: + Pimpl() = default; + ~Pimpl() { [[NSProcessInfo processInfo] endActivity: activity]; } + +private: + id activity { [[NSProcessInfo processInfo] beginActivityWithOptions: NSActivityUserInitiatedAllowingIdleSystemSleep + reason: @"App must remain in high-power mode"] }; + + JUCE_DECLARE_NON_COPYABLE (Pimpl) + JUCE_DECLARE_NON_MOVEABLE (Pimpl) +}; + +#else + +class ScopedLowPowerModeDisabler::Pimpl {}; + +#endif + +//============================================================================== +ScopedLowPowerModeDisabler::ScopedLowPowerModeDisabler() + : pimpl (std::make_unique()) {} + +ScopedLowPowerModeDisabler::~ScopedLowPowerModeDisabler() = default; + +} // namespace juce diff --git a/modules/juce_events/native/juce_ScopedLowPowerModeDisabler.h b/modules/juce_events/native/juce_ScopedLowPowerModeDisabler.h new file mode 100644 index 0000000000..3d559e14eb --- /dev/null +++ b/modules/juce_events/native/juce_ScopedLowPowerModeDisabler.h @@ -0,0 +1,49 @@ +/* + ============================================================================== + + This file is part of the JUCE library. + Copyright (c) 2020 - Raw Material Software Limited + + JUCE is an open source library subject to commercial or open-source + licensing. + + The code included in this file is provided under the terms of the ISC license + http://www.isc.org/downloads/software-support-policy/isc-license. Permission + To use, copy, modify, and/or distribute this software for any purpose with or + without fee is hereby granted provided that the above copyright notice and + this permission notice appear in all copies. + + JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER + EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE + DISCLAIMED. + + ============================================================================== +*/ + +namespace juce +{ + +//============================================================================== +/** + Disables low-power-mode for the duration of an instance's lifetime. + + Currently this is only implemented on macOS, where it will disable the + "App Nap" power-saving feature. + + @tags{Events} +*/ +class ScopedLowPowerModeDisabler +{ +public: + ScopedLowPowerModeDisabler(); + ~ScopedLowPowerModeDisabler(); + +private: + class Pimpl; + std::unique_ptr pimpl; + + JUCE_DECLARE_NON_COPYABLE (ScopedLowPowerModeDisabler) + JUCE_DECLARE_NON_MOVEABLE (ScopedLowPowerModeDisabler) +}; + +} // namespace juce