Mir

Merge lp:~alan-griffiths/mir/configurable-DisplayConfigurationReport into lp:mir

Proposed by Alan Griffiths on 2015-09-01
Status: Merged
Approved by: Francis Ginther on 2015-09-04
Approved revision: 2904
Merged at revision: 2903
Proposed branch: lp:~alan-griffiths/mir/configurable-DisplayConfigurationReport
Merge into: lp:mir
Diff against target: 635 lines (+286/-76)
16 files modified
include/common/mir/logging/logger.h (+3/-1)
include/server/mir/graphics/display_configuration_report.h (+43/-0)
include/server/mir/server.h (+5/-1)
src/common/logging/logger.cpp (+16/-1)
src/common/symbols.map (+1/-0)
src/include/server/mir/default_server_configuration.h (+3/-0)
src/server/report/default_server_configuration.cpp (+9/-0)
src/server/report/logging/CMakeLists.txt (+1/-1)
src/server/report/logging/display_configuration_report.cpp (+125/-0)
src/server/report/logging/display_configuration_report.h (+52/-0)
src/server/scene/default_configuration.cpp (+2/-1)
src/server/scene/mediating_display_changer.cpp (+7/-68)
src/server/scene/mediating_display_changer.h (+4/-1)
src/server/server.cpp (+1/-0)
src/server/symbols.map (+1/-0)
tests/unit-tests/scene/test_mediating_display_changer.cpp (+13/-2)
To merge this branch: bzr merge lp:~alan-griffiths/mir/configurable-DisplayConfigurationReport
Reviewer Review Type Date Requested Status
PS Jenkins bot continuous-integration Approve on 2015-09-05
Alexandros Frantzis (community) Approve on 2015-09-03
Kevin DuBois (community) 2015-09-01 Approve on 2015-09-01
Review via email: mp+269786@code.launchpad.net

Commit Message

graphics, report: Make the DisplayConfigurationReport configurable

Description of the Change

graphics, report: Make the DisplayConfigurationReport configurable

I plan to use this reporting mechanism in tests that track configuration changes in nested servers.

To post a comment you must log in.
Kevin DuBois (kdub) wrote :

lgtm, although I'm not quite sure the value in distinguishing the initial configuration from the subsequent ones. I had the thought that some of the ported printing code could use the geom::Length::Unit::inches for conversions, but thats pre-existing.

review: Approve
Alexandros Frantzis (afrantzis) wrote :

Looks good.

review: Approve
Cemil Azizoglu (cemil-azizoglu) wrote :

CI hiccup --> "No space left on device"

Francis Ginther (fginther) wrote :

FAILURE: http://jenkins.qa.ubuntu.com/job/mir-wily-amd64-autolanding/386/console

^ Failed because the slave ran out of disk space. The slave has been taken offline and will be fixed. I'll reapprove this MP as it failed due to an infrastructure issue.

review: Approve (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'include/common/mir/logging/logger.h'
2--- include/common/mir/logging/logger.h 2015-02-22 07:46:25 +0000
3+++ include/common/mir/logging/logger.h 2015-09-01 16:52:14 +0000
4@@ -1,5 +1,5 @@
5 /*
6- * Copyright © 2012-2014 Canonical Ltd.
7+ * Copyright © 2012-2015 Canonical Ltd.
8 *
9 * This program is free software: you can redistribute it and/or modify it
10 * under the terms of the GNU Lesser General Public License version 3,
11@@ -45,6 +45,8 @@
12 const std::string& message,
13 const std::string& component) = 0;
14
15+ virtual void log(char const* component, Severity severity, char const* format, ...);
16+
17 protected:
18 Logger() {}
19 virtual ~Logger() = default;
20
21=== added file 'include/server/mir/graphics/display_configuration_report.h'
22--- include/server/mir/graphics/display_configuration_report.h 1970-01-01 00:00:00 +0000
23+++ include/server/mir/graphics/display_configuration_report.h 2015-09-01 16:52:14 +0000
24@@ -0,0 +1,43 @@
25+/*
26+ * Copyright © 2015 Canonical Ltd.
27+ *
28+ * This program is free software: you can redistribute it and/or modify it
29+ * under the terms of the GNU General Public License version 3,
30+ * as published by the Free Software Foundation.
31+ *
32+ * This program is distributed in the hope that it will be useful,
33+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
34+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
35+ * GNU General Public License for more details.
36+ *
37+ * You should have received a copy of the GNU General Public License
38+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
39+ *
40+ * Authored by: Alan Griffiths <alan@octopull.co.uk>
41+ */
42+
43+#ifndef MIR_GRAPHICS_DISPLAY_CONFIGURATION_REPORT_H
44+#define MIR_GRAPHICS_DISPLAY_CONFIGURATION_REPORT_H
45+
46+namespace mir
47+{
48+namespace graphics
49+{
50+class DisplayConfiguration;
51+
52+class DisplayConfigurationReport
53+{
54+public:
55+ virtual void initial_configuration(DisplayConfiguration const& configuration) = 0;
56+ virtual void new_configuration(DisplayConfiguration const& configuration) = 0;
57+
58+protected:
59+ DisplayConfigurationReport() = default;
60+ virtual ~DisplayConfigurationReport() = default;
61+ DisplayConfigurationReport(DisplayConfigurationReport const& ) = delete;
62+ DisplayConfigurationReport& operator=(DisplayConfigurationReport const& ) = delete;
63+};
64+}
65+}
66+
67+#endif //MIR_GRAPHICS_DISPLAY_CONFIGURATION_REPORT_H
68
69=== modified file 'include/server/mir/server.h'
70--- include/server/mir/server.h 2015-06-18 04:38:28 +0000
71+++ include/server/mir/server.h 2015-09-01 16:52:14 +0000
72@@ -30,7 +30,7 @@
73 {
74 namespace compositor { class Compositor; class DisplayBufferCompositorFactory; }
75 namespace frontend { class SessionAuthorizer; class Session; class SessionMediatorReport; }
76-namespace graphics { class Cursor; class Platform; class Display; class GLConfig; class DisplayConfigurationPolicy; }
77+namespace graphics { class Cursor; class Platform; class Display; class GLConfig; class DisplayConfigurationPolicy; class DisplayConfigurationReport; }
78 namespace input { class CompositeEventFilter; class InputDispatcher; class CursorListener; class TouchVisualizer; class InputDeviceHub;}
79 namespace logging { class Logger; }
80 namespace options { class Option; }
81@@ -216,6 +216,10 @@
82 void override_the_display_buffer_compositor_factory(
83 Builder<compositor::DisplayBufferCompositorFactory> const& compositor_builder);
84
85+ /// Sets an override functor for creating the display configuration report.
86+ void override_the_display_configuration_report(
87+ Builder<graphics::DisplayConfigurationReport> const& report_builder);
88+
89 /// Sets an override functor for creating the gl config.
90 void override_the_gl_config(Builder<graphics::GLConfig> const& gl_config_builder);
91
92
93=== modified file 'src/common/logging/logger.cpp'
94--- src/common/logging/logger.cpp 2015-06-17 05:20:42 +0000
95+++ src/common/logging/logger.cpp 2015-09-01 16:52:14 +0000
96@@ -1,5 +1,5 @@
97 /*
98- * Copyright © 2014 Canonical Ltd.
99+ * Copyright © 2014-2015 Canonical Ltd.
100 *
101 * This program is free software: you can redistribute it and/or modify it
102 * under the terms of the GNU Lesser General Public License version 3,
103@@ -20,9 +20,24 @@
104 #include "mir/logging/logger.h"
105
106 #include <mutex>
107+#include <cstdarg>
108+#include <cstdio>
109
110 namespace ml = mir::logging;
111
112+void ml::Logger::log(char const* component, Severity severity, char const* format, ...)
113+{
114+ auto const bufsize = 4096;
115+ va_list va;
116+ va_start(va, format);
117+ char message[bufsize];
118+ vsnprintf(message, bufsize, format, va);
119+ va_end(va);
120+
121+ // Inefficient, but maintains API: Constructing a std::string for message/component.
122+ log(severity, std::string{message}, std::string{component});
123+}
124+
125 namespace
126 {
127 std::mutex log_mutex;
128
129=== modified file 'src/common/symbols.map'
130--- src/common/symbols.map 2015-08-27 08:30:54 +0000
131+++ src/common/symbols.map 2015-09-01 16:52:14 +0000
132@@ -205,5 +205,6 @@
133 mir::dispatch::ReadableFd::watch_fd*;
134 mir::dispatch::ReadableFd::dispatch*;
135 mir::dispatch::ReadableFd::relevant_events*;
136+ mir::logger::Logger::log*;
137 };
138 } MIR_COMMON_5.1;
139
140=== modified file 'src/include/server/mir/default_server_configuration.h'
141--- src/include/server/mir/default_server_configuration.h 2015-07-20 02:48:17 +0000
142+++ src/include/server/mir/default_server_configuration.h 2015-09-01 16:52:14 +0000
143@@ -114,6 +114,7 @@
144 class Platform;
145 class Display;
146 class DisplayReport;
147+class DisplayConfigurationReport;
148 class GraphicBufferAllocator;
149 class Cursor;
150 class CursorImage;
151@@ -214,6 +215,7 @@
152 virtual std::shared_ptr<graphics::Cursor> the_cursor();
153 virtual std::shared_ptr<graphics::CursorImage> the_default_cursor_image();
154 virtual std::shared_ptr<input::CursorImages> the_cursor_images();
155+ virtual std::shared_ptr<graphics::DisplayConfigurationReport> the_display_configuration_report();
156
157 /** @} */
158
159@@ -420,6 +422,7 @@
160 CachedPtr<compositor::CompositorReport> compositor_report;
161 CachedPtr<logging::Logger> logger;
162 CachedPtr<graphics::DisplayReport> display_report;
163+ CachedPtr<graphics::DisplayConfigurationReport> display_configuration_report;
164 CachedPtr<time::Clock> clock;
165 CachedPtr<MainLoop> main_loop;
166 CachedPtr<ServerStatusListener> server_status_listener;
167
168=== modified file 'src/server/report/default_server_configuration.cpp'
169--- src/server/report/default_server_configuration.cpp 2015-04-28 07:54:10 +0000
170+++ src/server/report/default_server_configuration.cpp 2015-09-01 16:52:14 +0000
171@@ -24,6 +24,7 @@
172 #include "null_report_factory.h"
173
174 #include "mir/abnormal_exit.h"
175+#include "logging/display_configuration_report.h"
176
177 namespace mg = mir::graphics;
178 namespace mf = mir::frontend;
179@@ -100,6 +101,14 @@
180 });
181 }
182
183+auto mir::DefaultServerConfiguration::the_display_configuration_report() -> std::shared_ptr<mg::DisplayConfigurationReport>
184+{
185+ return display_configuration_report([this]() -> std::shared_ptr<mg::DisplayConfigurationReport>
186+ {
187+ return std::make_shared<mir::report::logging::DisplayConfigurationReport>(the_logger());
188+ });
189+}
190+
191 auto mir::DefaultServerConfiguration::the_input_report() -> std::shared_ptr<mi::InputReport>
192 {
193 return input_report(
194
195=== modified file 'src/server/report/logging/CMakeLists.txt'
196--- src/server/report/logging/CMakeLists.txt 2015-02-22 07:46:25 +0000
197+++ src/server/report/logging/CMakeLists.txt 2015-09-01 16:52:14 +0000
198@@ -11,7 +11,7 @@
199 compositor_report.cpp
200 scene_report.cpp
201 logging_report_factory.cpp
202-)
203+ display_configuration_report.cpp)
204
205 add_library(
206 mirlogging OBJECT
207
208=== added file 'src/server/report/logging/display_configuration_report.cpp'
209--- src/server/report/logging/display_configuration_report.cpp 1970-01-01 00:00:00 +0000
210+++ src/server/report/logging/display_configuration_report.cpp 2015-09-01 16:52:14 +0000
211@@ -0,0 +1,125 @@
212+/*
213+ * Copyright © 2015 Canonical Ltd.
214+ *
215+ * This program is free software: you can redistribute it and/or modify it
216+ * under the terms of the GNU General Public License version 3,
217+ * as published by the Free Software Foundation.
218+ *
219+ * This program is distributed in the hope that it will be useful,
220+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
221+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
222+ * GNU General Public License for more details.
223+ *
224+ * You should have received a copy of the GNU General Public License
225+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
226+ *
227+ * Authored by: Alan Griffiths <alan@octopull.co.uk>
228+ */
229+
230+#include "display_configuration_report.h"
231+#include "mir/graphics/display_configuration.h"
232+
233+#include "mir/logging/logger.h"
234+
235+#include <cmath>
236+
237+namespace mg = mir::graphics;
238+namespace ml = mir::logging;
239+namespace mrl= mir::report::logging;
240+
241+namespace
242+{
243+auto const component = MIR_LOG_COMPONENT_FALLBACK;
244+auto const severity = ml::Severity::informational;
245+}
246+
247+mrl::DisplayConfigurationReport::DisplayConfigurationReport(std::shared_ptr<ml::Logger> const& logger) :
248+ logger{logger}
249+{
250+}
251+
252+mrl::DisplayConfigurationReport::~DisplayConfigurationReport()
253+{
254+}
255+
256+void mrl::DisplayConfigurationReport::initial_configuration(mg::DisplayConfiguration const& configuration)
257+{
258+ logger->log(component, severity, "Initial display configuration:");
259+ log_configuration(configuration);
260+}
261+
262+void mrl::DisplayConfigurationReport::new_configuration(mg::DisplayConfiguration const& configuration)
263+{
264+ logger->log(component, severity, "New display configuration:");
265+ log_configuration(configuration);
266+}
267+
268+void mrl::DisplayConfigurationReport::log_configuration(mg::DisplayConfiguration const& configuration) const
269+{
270+ configuration.for_each_output([this](mg::DisplayConfigurationOutput const& out)
271+ {
272+ static const char* const type_str[] =
273+ {"Unknown", "VGA", "DVI-I", "DVI-D", "DVI-A", "Composite",
274+ "S-Video", "LVDS", "Component", "9-pin-DIN", "DisplayPort",
275+ "HDMI-A", "HDMI-B", "TV", "eDP"};
276+ auto type = type_str[static_cast<int>(out.type)];
277+ int out_id = out.id.as_value();
278+ int card_id = out.card_id.as_value();
279+ const char prefix[] = " ";
280+
281+ if (out.connected)
282+ {
283+ int width_mm = out.physical_size_mm.width.as_int();
284+ int height_mm = out.physical_size_mm.height.as_int();
285+ float inches =
286+ sqrtf(width_mm * width_mm + height_mm * height_mm) / 25.4;
287+ int indent = 0;
288+
289+ logger->log(component, severity,
290+ "%s%d.%d: %n%s %.1f\" %dx%dmm",
291+ prefix, card_id, out_id, &indent, type,
292+ inches, width_mm, height_mm);
293+
294+ if (out.used)
295+ {
296+ if (out.current_mode_index < out.modes.size())
297+ {
298+ auto const& mode = out.modes[out.current_mode_index];
299+ logger->log(component, severity,
300+ "%*cCurrent mode %dx%d %.2fHz",
301+ indent, ' ',
302+ mode.size.width.as_int(),
303+ mode.size.height.as_int(),
304+ mode.vrefresh_hz);
305+ }
306+
307+ if (out.preferred_mode_index < out.modes.size())
308+ {
309+ auto const& mode = out.modes[out.preferred_mode_index];
310+ logger->log(component, severity,
311+ "%*cPreferred mode %dx%d %.2fHz",
312+ indent, ' ',
313+ mode.size.width.as_int(),
314+ mode.size.height.as_int(),
315+ mode.vrefresh_hz);
316+ }
317+
318+ logger->log(component, severity,
319+ "%*cLogical position %+d%+d",
320+ indent, ' ',
321+ out.top_left.x.as_int(),
322+ out.top_left.y.as_int());
323+ }
324+ else
325+ {
326+ logger->log(component, severity,
327+ "%*cDisabled", indent, ' ');
328+ }
329+ }
330+ else
331+ {
332+ logger->log(component, severity,
333+ "%s%d.%d: unused %s", prefix, card_id, out_id, type);
334+ }
335+ });
336+}
337
338=== added file 'src/server/report/logging/display_configuration_report.h'
339--- src/server/report/logging/display_configuration_report.h 1970-01-01 00:00:00 +0000
340+++ src/server/report/logging/display_configuration_report.h 2015-09-01 16:52:14 +0000
341@@ -0,0 +1,52 @@
342+/*
343+ * Copyright © 2015 Canonical Ltd.
344+ *
345+ * This program is free software: you can redistribute it and/or modify it
346+ * under the terms of the GNU General Public License version 3,
347+ * as published by the Free Software Foundation.
348+ *
349+ * This program is distributed in the hope that it will be useful,
350+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
351+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
352+ * GNU General Public License for more details.
353+ *
354+ * You should have received a copy of the GNU General Public License
355+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
356+ *
357+ * Authored by: Alan Griffiths <alan@octopull.co.uk>
358+ */
359+
360+#ifndef MIR_DISPLAYCONFIGURATIONREPORT_H
361+#define MIR_DISPLAYCONFIGURATIONREPORT_H
362+
363+#include "mir/graphics/display_configuration_report.h"
364+
365+#include <memory>
366+
367+namespace mir
368+{
369+namespace logging { class Logger; }
370+
371+namespace report
372+{
373+namespace logging
374+{
375+class DisplayConfigurationReport : public mir::graphics::DisplayConfigurationReport
376+{
377+public:
378+ DisplayConfigurationReport(std::shared_ptr<mir::logging::Logger> const& logger);
379+ ~DisplayConfigurationReport();
380+
381+ virtual void initial_configuration(graphics::DisplayConfiguration const& configuration) override;
382+
383+ virtual void new_configuration(graphics::DisplayConfiguration const& configuration) override;
384+
385+private:
386+ void log_configuration(graphics::DisplayConfiguration const& configuration) const;
387+ std::shared_ptr<mir::logging::Logger> const logger;
388+};
389+}
390+}
391+}
392+
393+#endif //MIR_DISPLAYCONFIGURATIONREPORT_H
394
395=== modified file 'src/server/scene/default_configuration.cpp'
396--- src/server/scene/default_configuration.cpp 2015-06-18 04:38:28 +0000
397+++ src/server/scene/default_configuration.cpp 2015-09-01 16:52:14 +0000
398@@ -135,7 +135,8 @@
399 the_display_configuration_policy(),
400 the_session_container(),
401 the_session_event_handler_register(),
402- the_server_action_queue());
403+ the_server_action_queue(),
404+ the_display_configuration_report());
405 });
406
407 }
408
409=== modified file 'src/server/scene/mediating_display_changer.cpp'
410--- src/server/scene/mediating_display_changer.cpp 2015-08-28 05:21:26 +0000
411+++ src/server/scene/mediating_display_changer.cpp 2015-09-01 16:52:14 +0000
412@@ -24,9 +24,8 @@
413 #include "mir/compositor/compositor.h"
414 #include "mir/graphics/display_configuration_policy.h"
415 #include "mir/graphics/display_configuration.h"
416+#include "mir/graphics/display_configuration_report.h"
417 #include "mir/server_action_queue.h"
418-#include "mir/log.h"
419-#include <cmath>
420
421 namespace mf = mir::frontend;
422 namespace ms = mir::scene;
423@@ -57,67 +56,6 @@
424
425 std::function<void()> const revert;
426 };
427-
428-void log_configuration(mg::DisplayConfiguration const& conf)
429-{
430- conf.for_each_output([](mg::DisplayConfigurationOutput const& out)
431- {
432- static const char* const type_str[] =
433- {"Unknown", "VGA", "DVI-I", "DVI-D", "DVI-A", "Composite",
434- "S-Video", "LVDS", "Component", "9-pin-DIN", "DisplayPort",
435- "HDMI-A", "HDMI-B", "TV", "eDP"};
436- auto type = type_str[static_cast<int>(out.type)];
437- int out_id = out.id.as_value();
438- int card_id = out.card_id.as_value();
439- const char prefix[] = " ";
440-
441- if (out.connected)
442- {
443- int width_mm = out.physical_size_mm.width.as_int();
444- int height_mm = out.physical_size_mm.height.as_int();
445- float inches =
446- sqrtf(width_mm * width_mm + height_mm * height_mm) / 25.4;
447- int indent = 0;
448- mir::log_info("%s%d.%d: %n%s %.1f\" %dx%dmm",
449- prefix, card_id, out_id, &indent, type,
450- inches, width_mm, height_mm);
451- if (out.used)
452- {
453- if (out.current_mode_index < out.modes.size())
454- {
455- auto const& mode = out.modes[out.current_mode_index];
456- mir::log_info("%*cCurrent mode %dx%d %.2fHz",
457- indent, ' ',
458- mode.size.width.as_int(),
459- mode.size.height.as_int(),
460- mode.vrefresh_hz);
461- }
462- if (out.preferred_mode_index < out.modes.size())
463- {
464- auto const& mode = out.modes[out.preferred_mode_index];
465- mir::log_info("%*cPreferred mode %dx%d %.2fHz",
466- indent, ' ',
467- mode.size.width.as_int(),
468- mode.size.height.as_int(),
469- mode.vrefresh_hz);
470- }
471- mir::log_info("%*cLogical position %+d%+d",
472- indent, ' ',
473- out.top_left.x.as_int(),
474- out.top_left.y.as_int());
475- }
476- else
477- {
478- mir::log_info("%*cDisabled", indent, ' ');
479- }
480- }
481- else
482- {
483- mir::log_info("%s%d.%d: unused %s", prefix, card_id, out_id, type);
484- }
485- });
486-}
487-
488 }
489
490 ms::MediatingDisplayChanger::MediatingDisplayChanger(
491@@ -126,13 +64,15 @@
492 std::shared_ptr<mg::DisplayConfigurationPolicy> const& display_configuration_policy,
493 std::shared_ptr<SessionContainer> const& session_container,
494 std::shared_ptr<SessionEventHandlerRegister> const& session_event_handler_register,
495- std::shared_ptr<ServerActionQueue> const& server_action_queue)
496+ std::shared_ptr<ServerActionQueue> const& server_action_queue,
497+ std::shared_ptr<mg::DisplayConfigurationReport> const& report)
498 : display{display},
499 compositor{compositor},
500 display_configuration_policy{display_configuration_policy},
501 session_container{session_container},
502 session_event_handler_register{session_event_handler_register},
503 server_action_queue{server_action_queue},
504+ report{report},
505 base_configuration{display->configuration()},
506 base_configuration_applied{true}
507 {
508@@ -169,8 +109,8 @@
509 session_stopping_handler(session);
510 });
511 });
512- mir::log_info("Initial display configuration:");
513- log_configuration(*base_configuration);
514+
515+ report->initial_configuration(*base_configuration);
516 }
517
518 void ms::MediatingDisplayChanger::configure(
519@@ -241,8 +181,7 @@
520 std::shared_ptr<graphics::DisplayConfiguration> const& conf,
521 SystemStateHandling pause_resume_system)
522 {
523- mir::log_info("New display configuration:");
524- log_configuration(*conf);
525+ report->new_configuration(*conf);
526 if (pause_resume_system)
527 {
528 ApplyNowAndRevertOnScopeExit comp{
529
530=== modified file 'src/server/scene/mediating_display_changer.h'
531--- src/server/scene/mediating_display_changer.h 2015-02-22 07:46:25 +0000
532+++ src/server/scene/mediating_display_changer.h 2015-09-01 16:52:14 +0000
533@@ -33,6 +33,7 @@
534 {
535 class Display;
536 class DisplayConfigurationPolicy;
537+ class DisplayConfigurationReport;
538 }
539 namespace compositor { class Compositor; }
540 namespace scene
541@@ -51,7 +52,8 @@
542 std::shared_ptr<graphics::DisplayConfigurationPolicy> const& display_configuration_policy,
543 std::shared_ptr<SessionContainer> const& session_container,
544 std::shared_ptr<SessionEventHandlerRegister> const& session_event_handler_register,
545- std::shared_ptr<ServerActionQueue> const& server_action_queue);
546+ std::shared_ptr<ServerActionQueue> const& server_action_queue,
547+ std::shared_ptr<graphics::DisplayConfigurationReport> const& report);
548
549 /* From mir::frontend::DisplayChanger */
550 std::shared_ptr<graphics::DisplayConfiguration> active_configuration() override;
551@@ -83,6 +85,7 @@
552 std::shared_ptr<SessionContainer> const session_container;
553 std::shared_ptr<SessionEventHandlerRegister> const session_event_handler_register;
554 std::shared_ptr<ServerActionQueue> const server_action_queue;
555+ std::shared_ptr<graphics::DisplayConfigurationReport> const report;
556 std::mutex configuration_mutex;
557 std::map<std::weak_ptr<frontend::Session>,
558 std::shared_ptr<graphics::DisplayConfiguration>,
559
560=== modified file 'src/server/server.cpp'
561--- src/server/server.cpp 2015-06-18 04:38:28 +0000
562+++ src/server/server.cpp 2015-09-01 16:52:14 +0000
563@@ -48,6 +48,7 @@
564 #define FOREACH_OVERRIDE(MACRO)\
565 MACRO(compositor)\
566 MACRO(display_buffer_compositor_factory)\
567+ MACRO(display_configuration_report)\
568 MACRO(gl_config)\
569 MACRO(host_lifecycle_event_listener)\
570 MACRO(input_dispatcher)\
571
572=== modified file 'src/server/symbols.map'
573--- src/server/symbols.map 2015-07-25 08:10:48 +0000
574+++ src/server/symbols.map 2015-09-01 16:52:14 +0000
575@@ -145,6 +145,7 @@
576 mir::Server::override_the_application_not_responding_detector*;
577 mir::Server::override_the_compositor*;
578 mir::Server::override_the_display_buffer_compositor_factory*;
579+ mir::Server::override_the_display_configuration_report*;
580 mir::Server::override_the_gl_config*;
581 mir::Server::override_the_host_lifecycle_event_listener*;
582 mir::Server::override_the_input_dispatcher*;
583
584=== modified file 'tests/unit-tests/scene/test_mediating_display_changer.cpp'
585--- tests/unit-tests/scene/test_mediating_display_changer.cpp 2015-06-25 03:00:08 +0000
586+++ tests/unit-tests/scene/test_mediating_display_changer.cpp 2015-09-01 16:52:14 +0000
587@@ -19,6 +19,7 @@
588 #include "src/server/scene/mediating_display_changer.h"
589 #include "src/server/scene/session_container.h"
590 #include "mir/graphics/display_configuration_policy.h"
591+#include "mir/graphics/display_configuration_report.h"
592 #include "src/server/scene/broadcasting_session_event_sink.h"
593 #include "mir/server_action_queue.h"
594
595@@ -120,6 +121,13 @@
596 MOCK_METHOD1(resume_processing_for, void(void const*));
597 };
598
599+struct StubDisplayConfigurationReport : mg::DisplayConfigurationReport
600+{
601+ void initial_configuration(mg::DisplayConfiguration const&) override {}
602+ void new_configuration(mg::DisplayConfiguration const&) override {}
603+};
604+
605+
606 struct MediatingDisplayChangerTest : public ::testing::Test
607 {
608 MediatingDisplayChangerTest()
609@@ -132,7 +140,8 @@
610 mt::fake_shared(mock_conf_policy),
611 mt::fake_shared(stub_session_container),
612 mt::fake_shared(session_event_sink),
613- mt::fake_shared(server_action_queue));
614+ mt::fake_shared(server_action_queue),
615+ mt::fake_shared(display_configuration_report));
616 }
617
618 testing::NiceMock<MockDisplay> mock_display;
619@@ -142,6 +151,7 @@
620 ms::BroadcastingSessionEventSink session_event_sink;
621 mtd::StubDisplayConfig base_config;
622 StubServerActionQueue server_action_queue;
623+ StubDisplayConfigurationReport display_configuration_report;
624 std::shared_ptr<ms::MediatingDisplayChanger> changer;
625 };
626
627@@ -438,7 +448,8 @@
628 mt::fake_shared(mock_conf_policy),
629 mt::fake_shared(stub_session_container),
630 mt::fake_shared(session_event_sink),
631- mt::fake_shared(mock_server_action_queue));
632+ mt::fake_shared(mock_server_action_queue),
633+ mt::fake_shared(display_configuration_report));
634
635 void const* owner{nullptr};
636

Subscribers

People subscribed via source and target branches