diff options
Diffstat (limited to 'gtk2_ardour/timers.cc')
-rw-r--r-- | gtk2_ardour/timers.cc | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/gtk2_ardour/timers.cc b/gtk2_ardour/timers.cc index 13f2cfdbd7..3469d39df8 100644 --- a/gtk2_ardour/timers.cc +++ b/gtk2_ardour/timers.cc @@ -87,6 +87,7 @@ public: , rapid(100) , super_rapid(40) , fps(40) + , _suspend_counter(0) { #ifndef NDEBUG second.connect (sigc::mem_fun (*this, &UITimers::on_second_timer)); @@ -99,6 +100,8 @@ public: StandardTimer super_rapid; StandardTimer fps; + gint _suspend_counter; + #ifndef NDEBUG std::vector<uint64_t> rapid_eps_count; std::vector<uint64_t> super_rapid_eps_count; @@ -207,4 +210,22 @@ fps_connect(const sigc::slot<void>& slot) return get_timers().fps.connect (slot); } +TimerSuspender::TimerSuspender () +{ + if (g_atomic_int_add(&get_timers()._suspend_counter, 1) == 0) { + get_timers().rapid.suspend(); + get_timers().super_rapid.suspend(); + get_timers().fps.suspend(); + } +} + +TimerSuspender::~TimerSuspender () +{ + if (g_atomic_int_dec_and_test (&get_timers()._suspend_counter)) { + get_timers().rapid.resume(); + get_timers().super_rapid.resume(); + get_timers().fps.resume(); + } +} + } // namespace Timers |