summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2015-10-30 15:50:46 +0100
committerRobin Gareus <robin@gareus.org>2015-10-30 15:55:27 +0100
commit4fa564c03b8839615753d120c127639ee7f02241 (patch)
treefc5f3996001749d6d0c8236238ef99ad6932b266
parent7abfe85498080f202b19e02744df1e5352a06ce0 (diff)
RAII Timer Suspend wrapper
-rw-r--r--gtk2_ardour/timers.cc21
-rw-r--r--gtk2_ardour/timers.h6
2 files changed, 27 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
diff --git a/gtk2_ardour/timers.h b/gtk2_ardour/timers.h
index 8854571f5b..28e88e4b4f 100644
--- a/gtk2_ardour/timers.h
+++ b/gtk2_ardour/timers.h
@@ -37,6 +37,12 @@ void set_fps_interval(unsigned int interval);
sigc::connection fps_connect(const sigc::slot<void>& slot);
+class TimerSuspender {
+ public:
+ TimerSuspender ();
+ ~TimerSuspender ();
+};
+
};
#endif // TIMERS_H