Merge lp:~alan-griffiths/miral/trace-exceptions into lp:miral

Proposed by Alan Griffiths on 2017-01-19
Status: Merged
Approved by: Gerry Boland on 2017-01-19
Approved revision: 488
Merged at revision: 487
Proposed branch: lp:~alan-griffiths/miral/trace-exceptions
Merge into: lp:miral
Diff against target: 448 lines (+94/-41)
2 files modified
debian/changelog (+1/-0)
miral/window_management_trace.cpp (+93/-41)
To merge this branch: bzr merge lp:~alan-griffiths/miral/trace-exceptions
Reviewer Review Type Date Requested Status
Gerry Boland 2017-01-19 Approve on 2017-01-19
Review via email: mp+315112@code.launchpad.net

Commit Message

[libmiral] Logging of exceptions added to --window-management-trace

To post a comment you must log in.
Gerry Boland (gerboland) wrote :

Could be useful

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'debian/changelog'
2--- debian/changelog 2017-01-17 09:57:27 +0000
3+++ debian/changelog 2017-01-19 11:28:06 +0000
4@@ -6,6 +6,7 @@
5 - Enhancements:
6 . Compatibility with Mir 0.26 and update API to use the new Mir types and
7 enums.
8+ . Logging of exceptions added to --window-management-trace
9 - Bugs fixed:
10 . Let the policy decide how to handle "ready" for windows that can't have
11 focus (LP: #1652109)
12
13=== modified file 'miral/window_management_trace.cpp'
14--- miral/window_management_trace.cpp 2017-01-13 18:17:01 +0000
15+++ miral/window_management_trace.cpp 2017-01-19 11:28:06 +0000
16@@ -29,9 +29,20 @@
17
18 #define MIR_LOG_COMPONENT "miral::Window Management"
19 #include <mir/log.h>
20+#include <mir/report_exception.h>
21
22 using mir::operator<<;
23
24+#define MIRAL_TRACE_EXCEPTION \
25+catch (std::exception const& x)\
26+{\
27+ std::stringstream out;\
28+ mir::report_exception(out);\
29+ mir::log_warning("%s throws %s", __func__, out.str().c_str());\
30+ throw;\
31+}
32+
33+
34 namespace
35 {
36 std::string const null_ptr{"(null)"};
37@@ -304,95 +315,105 @@
38 }
39
40 auto miral::WindowManagementTrace::count_applications() const -> unsigned int
41-{
42+try {
43 log_input();
44 auto const result = wrapped.count_applications();
45 mir::log_info("%s -> %d", __func__, result);
46 trace_count++;
47 return result;
48 }
49+MIRAL_TRACE_EXCEPTION
50
51 void miral::WindowManagementTrace::for_each_application(std::function<void(miral::ApplicationInfo&)> const& functor)
52-{
53+try {
54 log_input();
55 mir::log_info("%s", __func__);
56 trace_count++;
57 wrapped.for_each_application(functor);
58 }
59+MIRAL_TRACE_EXCEPTION
60
61 auto miral::WindowManagementTrace::find_application(std::function<bool(ApplicationInfo const& info)> const& predicate)
62 -> Application
63-{
64+try {
65 log_input();
66 auto result = wrapped.find_application(predicate);
67 mir::log_info("%s -> %s", __func__, dump_of(result).c_str());
68 trace_count++;
69 return result;
70 }
71+MIRAL_TRACE_EXCEPTION
72
73 auto miral::WindowManagementTrace::info_for(std::weak_ptr<mir::scene::Session> const& session) const -> ApplicationInfo&
74-{
75+try {
76 log_input();
77 auto& result = wrapped.info_for(session);
78 mir::log_info("%s -> %s", __func__, result.application()->name().c_str());
79 trace_count++;
80 return result;
81 }
82+MIRAL_TRACE_EXCEPTION
83
84 auto miral::WindowManagementTrace::info_for(std::weak_ptr<mir::scene::Surface> const& surface) const -> WindowInfo&
85-{
86+try {
87 log_input();
88 auto& result = wrapped.info_for(surface);
89 mir::log_info("%s -> %s", __func__, result.name().c_str());
90 trace_count++;
91 return result;
92 }
93+MIRAL_TRACE_EXCEPTION
94
95 auto miral::WindowManagementTrace::info_for(Window const& window) const -> WindowInfo&
96-{
97+try {
98 log_input();
99 auto& result = wrapped.info_for(window);
100 mir::log_info("%s -> %s", __func__, result.name().c_str());
101 trace_count++;
102 return result;
103 }
104+MIRAL_TRACE_EXCEPTION
105
106 void miral::WindowManagementTrace::ask_client_to_close(miral::Window const& window)
107-{
108+try {
109 log_input();
110 mir::log_info("%s -> %s", __func__, dump_of(window).c_str());
111 trace_count++;
112 wrapped.ask_client_to_close(window);
113 }
114+MIRAL_TRACE_EXCEPTION
115
116 void miral::WindowManagementTrace::force_close(miral::Window const& window)
117-{
118+try {
119 log_input();
120 mir::log_info("%s -> %s", __func__, dump_of(window).c_str());
121 trace_count++;
122 wrapped.force_close(window);
123 }
124+MIRAL_TRACE_EXCEPTION
125
126 auto miral::WindowManagementTrace::active_window() const -> Window
127-{
128+try {
129 log_input();
130 auto result = wrapped.active_window();
131 mir::log_info("%s -> %s", __func__, dump_of(result).c_str());
132 trace_count++;
133 return result;
134 }
135+MIRAL_TRACE_EXCEPTION
136
137 auto miral::WindowManagementTrace::select_active_window(Window const& hint) -> Window
138-{
139+try {
140 log_input();
141 auto result = wrapped.select_active_window(hint);
142 mir::log_info("%s hint=%s -> %s", __func__, dump_of(hint).c_str(), dump_of(result).c_str());
143 trace_count++;
144 return result;
145 }
146+MIRAL_TRACE_EXCEPTION
147
148 auto miral::WindowManagementTrace::window_at(mir::geometry::Point cursor) const -> Window
149-{
150+try {
151 log_input();
152 auto result = wrapped.window_at(cursor);
153 std::stringstream out;
154@@ -401,9 +422,10 @@
155 trace_count++;
156 return result;
157 }
158+MIRAL_TRACE_EXCEPTION
159
160 auto miral::WindowManagementTrace::active_display() -> mir::geometry::Rectangle const
161-{
162+try {
163 log_input();
164 auto result = wrapped.active_display();
165 std::stringstream out;
166@@ -412,35 +434,39 @@
167 trace_count++;
168 return result;
169 }
170+MIRAL_TRACE_EXCEPTION
171
172 auto miral::WindowManagementTrace::info_for_window_id(std::string const& id) const -> WindowInfo&
173-{
174+try {
175 log_input();
176 auto& result = wrapped.info_for_window_id(id);
177 mir::log_info("%s id=%s -> %s", __func__, id.c_str(), dump_of(result).c_str());
178 trace_count++;
179 return result;
180 }
181+MIRAL_TRACE_EXCEPTION
182
183 auto miral::WindowManagementTrace::id_for_window(Window const& window) const -> std::string
184-{
185+try {
186 log_input();
187 auto result = wrapped.id_for_window(window);
188 mir::log_info("%s window=%s -> %s", __func__, dump_of(window).c_str(), result.c_str());
189 trace_count++;
190 return result;
191 }
192+MIRAL_TRACE_EXCEPTION
193
194 void miral::WindowManagementTrace::place_and_size_for_state(
195 WindowSpecification& modifications, WindowInfo const& window_info) const
196-{
197+try {
198 log_input();
199 mir::log_info("%s modifications=%s window_info=%s", __func__, dump_of(modifications).c_str(), dump_of(window_info).c_str());
200 wrapped.place_and_size_for_state(modifications, window_info);
201 }
202+MIRAL_TRACE_EXCEPTION
203
204 void miral::WindowManagementTrace::drag_active_window(mir::geometry::Displacement movement)
205-{
206+try {
207 log_input();
208 std::stringstream out;
209 out << movement;
210@@ -448,79 +474,89 @@
211 trace_count++;
212 wrapped.drag_active_window(movement);
213 }
214+MIRAL_TRACE_EXCEPTION
215
216 void miral::WindowManagementTrace::focus_next_application()
217-{
218+try {
219 log_input();
220 mir::log_info("%s", __func__);
221 trace_count++;
222 wrapped.focus_next_application();
223 }
224+MIRAL_TRACE_EXCEPTION
225
226 void miral::WindowManagementTrace::focus_next_within_application()
227-{
228+try {
229 log_input();
230 mir::log_info("%s", __func__);
231 trace_count++;
232 wrapped.focus_next_within_application();
233 }
234+MIRAL_TRACE_EXCEPTION
235
236 void miral::WindowManagementTrace::raise_tree(miral::Window const& root)
237-{
238+try {
239 log_input();
240 mir::log_info("%s root=%s", __func__, dump_of(root).c_str());
241 trace_count++;
242 wrapped.raise_tree(root);
243 }
244+MIRAL_TRACE_EXCEPTION
245
246 void miral::WindowManagementTrace::modify_window(
247 miral::WindowInfo& window_info, miral::WindowSpecification const& modifications)
248-{
249+try {
250 log_input();
251 mir::log_info("%s window_info=%s, modifications=%s",
252 __func__, dump_of(window_info).c_str(), dump_of(modifications).c_str());
253 trace_count++;
254 wrapped.modify_window(window_info, modifications);
255 }
256+MIRAL_TRACE_EXCEPTION
257
258 void miral::WindowManagementTrace::invoke_under_lock(std::function<void()> const& callback)
259-{
260+try {
261 mir::log_info("%s", __func__);
262 wrapped.invoke_under_lock(callback);
263 }
264+MIRAL_TRACE_EXCEPTION
265
266 auto miral::WindowManagementTrace::place_new_surface(
267 ApplicationInfo const& app_info,
268 WindowSpecification const& requested_specification) -> WindowSpecification
269-{
270+try {
271 auto const result = policy->place_new_surface(app_info, requested_specification);
272 mir::log_info("%s app_info=%s, requested_specification=%s -> %s",
273 __func__, dump_of(app_info).c_str(), dump_of(requested_specification).c_str(), dump_of(result).c_str());
274 return result;
275 }
276+MIRAL_TRACE_EXCEPTION
277
278 void miral::WindowManagementTrace::handle_window_ready(miral::WindowInfo& window_info)
279-{
280+try {
281 mir::log_info("%s window_info=%s", __func__, dump_of(window_info).c_str());
282 policy->handle_window_ready(window_info);
283 }
284+MIRAL_TRACE_EXCEPTION
285
286 void miral::WindowManagementTrace::handle_modify_window(
287 miral::WindowInfo& window_info, miral::WindowSpecification const& modifications)
288-{
289+try {
290 mir::log_info("%s window_info=%s, modifications=%s",
291 __func__, dump_of(window_info).c_str(), dump_of(modifications).c_str());
292 policy->handle_modify_window(window_info, modifications);
293 }
294+MIRAL_TRACE_EXCEPTION
295
296 void miral::WindowManagementTrace::handle_raise_window(miral::WindowInfo& window_info)
297-{
298+try {
299 mir::log_info("%s window_info=%s", __func__, dump_of(window_info).c_str());
300 policy->handle_raise_window(window_info);
301 }
302+MIRAL_TRACE_EXCEPTION
303
304 bool miral::WindowManagementTrace::handle_keyboard_event(MirKeyboardEvent const* event)
305-{
306+try {
307 log_input = [event, this]
308 {
309 mir::log_info("handle_keyboard_event event=%s", dump_of(event).c_str());
310@@ -529,9 +565,10 @@
311
312 return policy->handle_keyboard_event(event);
313 }
314+MIRAL_TRACE_EXCEPTION
315
316 bool miral::WindowManagementTrace::handle_touch_event(MirTouchEvent const* event)
317-{
318+try {
319 log_input = [event, this]
320 {
321 mir::log_info("handle_touch_event event=%s", dump_of(event).c_str());
322@@ -540,9 +577,10 @@
323
324 return policy->handle_touch_event(event);
325 }
326+MIRAL_TRACE_EXCEPTION
327
328 bool miral::WindowManagementTrace::handle_pointer_event(MirPointerEvent const* event)
329-{
330+try {
331 log_input = [event, this]
332 {
333 mir::log_info("handle_pointer_event event=%s", dump_of(event).c_str());
334@@ -551,87 +589,101 @@
335
336 return policy->handle_pointer_event(event);
337 }
338+MIRAL_TRACE_EXCEPTION
339
340 auto miral::WindowManagementTrace::confirm_inherited_move(WindowInfo const& window_info, Displacement movement)
341 -> Rectangle
342-{
343+try {
344 std::stringstream out;
345 out << movement;
346 mir::log_info("%s window_info=%s, movement=%s", __func__, dump_of(window_info).c_str(), out.str().c_str());
347
348 return policy->confirm_inherited_move(window_info, movement);
349 }
350+MIRAL_TRACE_EXCEPTION
351
352 void miral::WindowManagementTrace::advise_begin()
353-{
354+try {
355 log_input = []{};
356 trace_count.store(0);
357 policy->advise_begin();
358 }
359+MIRAL_TRACE_EXCEPTION
360
361 void miral::WindowManagementTrace::advise_end()
362-{
363+try {
364 if (trace_count.load() > 0)
365 mir::log_info("====");
366 policy->advise_end();
367 }
368+MIRAL_TRACE_EXCEPTION
369
370 void miral::WindowManagementTrace::advise_new_app(miral::ApplicationInfo& application)
371-{
372+try {
373 mir::log_info("%s application=%s", __func__, dump_of(application).c_str());
374 policy->advise_new_app(application);
375 }
376+MIRAL_TRACE_EXCEPTION
377
378 void miral::WindowManagementTrace::advise_delete_app(miral::ApplicationInfo const& application)
379-{
380+try {
381 mir::log_info("%s application=%s", __func__, dump_of(application).c_str());
382 policy->advise_delete_app(application);
383 }
384+MIRAL_TRACE_EXCEPTION
385
386 void miral::WindowManagementTrace::advise_new_window(miral::WindowInfo const& window_info)
387-{
388+try {
389 mir::log_info("%s window_info=%s", __func__, dump_of(window_info).c_str());
390 policy->advise_new_window(window_info);
391 }
392+MIRAL_TRACE_EXCEPTION
393
394 void miral::WindowManagementTrace::advise_focus_lost(miral::WindowInfo const& window_info)
395-{
396+try {
397 mir::log_info("%s window_info=%s", __func__, dump_of(window_info).c_str());
398 policy->advise_focus_lost(window_info);
399 }
400+MIRAL_TRACE_EXCEPTION
401
402 void miral::WindowManagementTrace::advise_focus_gained(miral::WindowInfo const& window_info)
403-{
404+try {
405 mir::log_info("%s window_info=%s", __func__, dump_of(window_info).c_str());
406 policy->advise_focus_gained(window_info);
407 }
408+MIRAL_TRACE_EXCEPTION
409
410 void miral::WindowManagementTrace::advise_state_change(miral::WindowInfo const& window_info, MirWindowState state)
411-{
412+try {
413 mir::log_info("%s window_info=%s, state=%s", __func__, dump_of(window_info).c_str(), dump_of(state).c_str());
414 policy->advise_state_change(window_info, state);
415 }
416+MIRAL_TRACE_EXCEPTION
417
418 void miral::WindowManagementTrace::advise_move_to(miral::WindowInfo const& window_info, mir::geometry::Point top_left)
419-{
420+try {
421 mir::log_info("%s window_info=%s, top_left=%s", __func__, dump_of(window_info).c_str(), dump_of(top_left).c_str());
422 policy->advise_move_to(window_info, top_left);
423 }
424+MIRAL_TRACE_EXCEPTION
425
426 void miral::WindowManagementTrace::advise_resize(miral::WindowInfo const& window_info, mir::geometry::Size const& new_size)
427-{
428+try {
429 mir::log_info("%s window_info=%s, new_size=%s", __func__, dump_of(window_info).c_str(), dump_of(new_size).c_str());
430 policy->advise_resize(window_info, new_size);
431 }
432+MIRAL_TRACE_EXCEPTION
433
434 void miral::WindowManagementTrace::advise_delete_window(miral::WindowInfo const& window_info)
435-{
436+try {
437 mir::log_info("%s window_info=%s", __func__, dump_of(window_info).c_str());
438 policy->advise_delete_window(window_info);
439 }
440+MIRAL_TRACE_EXCEPTION
441
442 void miral::WindowManagementTrace::advise_raise(std::vector<miral::Window> const& windows)
443-{
444+try {
445 mir::log_info("%s window_info=%s", __func__, dump_of(windows).c_str());
446 policy->advise_raise(windows);
447 }
448+MIRAL_TRACE_EXCEPTION

Subscribers

People subscribed via source and target branches