~andreas-pokorny/mir/device-handle-and-settings

« back to all changes in this revision

Viewing changes to src/server/scene/mediating_display_changer.cpp

  • Committer: Tarmac
  • Author(s): Alan Griffiths
  • Date: 2015-09-05 01:29:27 UTC
  • mfrom: (2898.3.6 mir1)
  • Revision ID: tarmac-20150905012927-wngfqmzulfgz6zfs
graphics, report: Make the DisplayConfigurationReport configurable.

Approved by PS Jenkins bot, Alexandros Frantzis, Kevin DuBois.

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
#include "mir/compositor/compositor.h"
25
25
#include "mir/graphics/display_configuration_policy.h"
26
26
#include "mir/graphics/display_configuration.h"
 
27
#include "mir/graphics/display_configuration_report.h"
27
28
#include "mir/server_action_queue.h"
28
 
#include "mir/log.h"
29
 
#include <cmath>
30
29
 
31
30
namespace mf = mir::frontend;
32
31
namespace ms = mir::scene;
57
56
 
58
57
    std::function<void()> const revert;
59
58
};
60
 
 
61
 
void log_configuration(mg::DisplayConfiguration const& conf)
62
 
{
63
 
    conf.for_each_output([](mg::DisplayConfigurationOutput const& out)
64
 
    {
65
 
        static const char* const type_str[] =
66
 
            {"Unknown", "VGA", "DVI-I", "DVI-D", "DVI-A", "Composite",
67
 
             "S-Video", "LVDS", "Component", "9-pin-DIN", "DisplayPort",
68
 
             "HDMI-A", "HDMI-B", "TV", "eDP"};
69
 
        auto type = type_str[static_cast<int>(out.type)];
70
 
        int out_id = out.id.as_value();
71
 
        int card_id = out.card_id.as_value();
72
 
        const char prefix[] = "  ";
73
 
 
74
 
        if (out.connected)
75
 
        {
76
 
            int width_mm = out.physical_size_mm.width.as_int();
77
 
            int height_mm = out.physical_size_mm.height.as_int();
78
 
            float inches =
79
 
                sqrtf(width_mm * width_mm + height_mm * height_mm) / 25.4;
80
 
            int indent = 0;
81
 
            mir::log_info("%s%d.%d: %n%s %.1f\" %dx%dmm",
82
 
                          prefix, card_id, out_id, &indent, type,
83
 
                          inches, width_mm, height_mm);
84
 
            if (out.used)
85
 
            {
86
 
                if (out.current_mode_index < out.modes.size())
87
 
                {
88
 
                    auto const& mode = out.modes[out.current_mode_index];
89
 
                    mir::log_info("%*cCurrent mode %dx%d %.2fHz",
90
 
                                  indent, ' ',
91
 
                                  mode.size.width.as_int(),
92
 
                                  mode.size.height.as_int(),
93
 
                                  mode.vrefresh_hz);
94
 
                }
95
 
                if (out.preferred_mode_index < out.modes.size())
96
 
                {
97
 
                    auto const& mode = out.modes[out.preferred_mode_index];
98
 
                    mir::log_info("%*cPreferred mode %dx%d %.2fHz",
99
 
                                  indent, ' ',
100
 
                                  mode.size.width.as_int(),
101
 
                                  mode.size.height.as_int(),
102
 
                                  mode.vrefresh_hz);
103
 
                }
104
 
                mir::log_info("%*cLogical position %+d%+d",
105
 
                              indent, ' ',
106
 
                              out.top_left.x.as_int(),
107
 
                              out.top_left.y.as_int());
108
 
            }
109
 
            else
110
 
            {
111
 
                mir::log_info("%*cDisabled", indent, ' ');
112
 
            }
113
 
        }
114
 
        else
115
 
        {
116
 
            mir::log_info("%s%d.%d: unused %s", prefix, card_id, out_id, type);
117
 
        }
118
 
    });
119
 
}
120
 
 
121
59
}
122
60
 
123
61
ms::MediatingDisplayChanger::MediatingDisplayChanger(
126
64
    std::shared_ptr<mg::DisplayConfigurationPolicy> const& display_configuration_policy,
127
65
    std::shared_ptr<SessionContainer> const& session_container,
128
66
    std::shared_ptr<SessionEventHandlerRegister> const& session_event_handler_register,
129
 
    std::shared_ptr<ServerActionQueue> const& server_action_queue)
 
67
    std::shared_ptr<ServerActionQueue> const& server_action_queue,
 
68
    std::shared_ptr<mg::DisplayConfigurationReport> const& report)
130
69
    : display{display},
131
70
      compositor{compositor},
132
71
      display_configuration_policy{display_configuration_policy},
133
72
      session_container{session_container},
134
73
      session_event_handler_register{session_event_handler_register},
135
74
      server_action_queue{server_action_queue},
 
75
      report{report},
136
76
      base_configuration{display->configuration()},
137
77
      base_configuration_applied{true}
138
78
{
169
109
                        session_stopping_handler(session);
170
110
                });
171
111
        });
172
 
    mir::log_info("Initial display configuration:");
173
 
    log_configuration(*base_configuration);
 
112
 
 
113
    report->initial_configuration(*base_configuration);
174
114
}
175
115
 
176
116
void ms::MediatingDisplayChanger::configure(
241
181
    std::shared_ptr<graphics::DisplayConfiguration> const& conf,
242
182
    SystemStateHandling pause_resume_system)
243
183
{
244
 
    mir::log_info("New display configuration:");
245
 
    log_configuration(*conf);
 
184
    report->new_configuration(*conf);
246
185
    if (pause_resume_system)
247
186
    {
248
187
        ApplyNowAndRevertOnScopeExit comp{