Mir
glib_main_loop.h
Go to the documentation of this file.
1 /*
2  * Copyright © 2014-2015 Canonical Ltd.
3  *
4  * This program is free software: you can redistribute it and/or modify it
5  * under the terms of the GNU General Public License version 3,
6  * as published by the Free Software Foundation.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  *
16  * Authored by: Alexandros Frantzis <alexandros.frantzis@canonical.com>
17  */
18 
19 #ifndef MIR_GLIB_MAIN_LOOP_H_
20 #define MIR_GLIB_MAIN_LOOP_H_
21 
22 #include "mir/main_loop.h"
24 
25 #include <atomic>
26 #include <vector>
27 #include <mutex>
28 #include <exception>
29 
30 #include <glib.h>
31 
32 namespace mir
33 {
34 
35 namespace detail
36 {
37 
39 {
40 public:
43  operator GMainContext*() const;
44 private:
45  GMainContext* const main_context;
46 };
47 
48 }
49 
50 class GLibMainLoop : public MainLoop
51 {
52 public:
53  GLibMainLoop(std::shared_ptr<time::Clock> const& clock);
54 
55  void run() override;
56  void stop() override;
57 
59  std::initializer_list<int> signals,
60  std::function<void(int)> const& handler) override;
61 
63  std::initializer_list<int> fds,
64  void const* owner,
65  std::function<void(int)> const& handler) override;
66 
67  void unregister_fd_handler(void const* owner) override;
68 
69  void enqueue(void const* owner, ServerAction const& action) override;
70  void pause_processing_for(void const* owner) override;
71  void resume_processing_for(void const* owner) override;
72 
73  std::unique_ptr<mir::time::Alarm> notify_in(
74  std::chrono::milliseconds delay,
75  std::function<void()> const& callback) override;
76 
77  std::unique_ptr<mir::time::Alarm> notify_at(
79  std::function<void()> const& callback) override;
80 
81  std::unique_ptr<mir::time::Alarm> create_alarm(
82  std::function<void()> const& callback) override;
83 
84  std::unique_ptr<mir::time::Alarm> create_alarm(
85  std::function<void()> const& callback,
86  std::function<void()> const& lock,
87  std::function<void()> const& unlock) override;
88 
89  void reprocess_all_sources();
90 
91 private:
92  bool should_process_actions_for(void const* owner);
93  void handle_exception(std::exception_ptr const& e);
94 
95  std::shared_ptr<time::Clock> const clock;
96  detail::GMainContextHandle const main_context;
97  std::atomic<bool> running;
98  detail::FdSources fd_sources;
99  detail::SignalSources signal_sources;
100  std::mutex do_not_process_mutex;
101  std::vector<void const*> do_not_process;
102  std::function<void()> before_iteration_hook;
103  std::exception_ptr main_loop_exception;
104 };
105 
106 }
107 
108 #endif
std::unique_ptr< mir::time::Alarm > notify_at(mir::time::Timestamp t, std::function< void()> const &callback) override
Create an Alarm that calls the callback at the specified time.
All things Mir.
Definition: buffer_stream.h:37
void unregister_fd_handler(void const *owner) override
std::unique_ptr< mir::time::Alarm > create_alarm(std::function< void()> const &callback) override
Create an Alarm that will not fire until scheduled.
std::unique_ptr< mir::time::Alarm > notify_in(std::chrono::milliseconds delay, std::function< void()> const &callback) override
Create an Alarm that calls the callback after the specified delay.
Definition: glib_main_loop.h:38
GMainContextHandle()
Definition: glib_main_loop.cpp:98
void reprocess_all_sources()
void enqueue(void const *owner, ServerAction const &action) override
void stop() override
std::chrono::steady_clock::time_point Timestamp
Definition: types.h:29
Definition: glib_main_loop.h:50
GLibMainLoop(std::shared_ptr< time::Clock > const &clock)
Definition: glib_main_loop.cpp:117
void resume_processing_for(void const *owner) override
std::function< void()> ServerAction
Definition: server_action_queue.h:27
Definition: main_loop.h:29
Definition: glib_main_loop_sources.h:72
Definition: glib_main_loop_sources.h:90
void register_signal_handler(std::initializer_list< int > signals, std::function< void(int)> const &handler) override
void pause_processing_for(void const *owner) override
~GMainContextHandle()
Definition: glib_main_loop.cpp:105
void run() override
void register_fd_handler(std::initializer_list< int > fds, void const *owner, std::function< void(int)> const &handler) override

Copyright © 2012,2013 Canonical Ltd.
Generated on Tue Mar 24 16:15:19 UTC 2015