~ci-train-bot/mir/mir-ubuntu-zesty-2609

« back to all changes in this revision

Viewing changes to src/server/graphics/nested/display_buffer.cpp

  • Committer: Bileto Bot
  • Date: 2016-08-15 16:28:40 UTC
  • mfrom: (1160.2357.136 0.24)
  • Revision ID: ci-train-bot@canonical.com-20160815162840-98t95gfrcymlrwpc
* New upstream release 0.24.0 (https://launchpad.net/mir/+milestone/0.24.0)
  - ABI summary:
    . mirclient ABI unchanged at 9
    . mirserver ABI bumped to 41
    . mircommon ABI unchanged at 6
    . mirplatform ABI bumped to 12
    . mirprotobuf ABI unchanged at 3
    . mirplatformgraphics ABI bumped to 10
    . mirclientplatform ABI unchanged at 5
    . mirinputplatform ABI unchanged at 5
  - Enhancements:
    . Added a new tool 'mirvanity' which can use a high speed video camera
      to measure client-to-screen latency.
    . Added (build-time) support for desktop full OpenGL servers (disabled
      by default in favor of GLESv2).
    . Introduced new buffer semantics (NBS) and enabled it by default.
    . Avoided using libmirserver in mir_demo_standalone_render_overlays,
      making bringup traces less cluttered.
    . Removed TilingWindowManager from example servers.
    . Added two new mir_*_performance_test tools that are run as part of
      'mir_performance_tests'.
    . Added pointer confinement to the client API.
    . Added new platform supporting software EGLStreams.
    . Added an input platform that the nested server can use.
    . Allow configuration of the application_not_responding_detector
    . Handle server-side keymapping using XKBMapper.
    . Remove the offscreen display.
    . Add callback option to notify shells that the server is about to stop.
    . Add logging for ANativeWindow events on Android.
  - Bugs fixed:
    . usage of std:call_once in mirclient causes TLS collisions with some
      android devices (LP: #1599867)
    . AltGr not working on external keyboards (LP: #1565236)
    . [regression] unity8 fails to start when built with 0.24 series (lp:mir)
      (LP: #1597717)
    . CI failure in MirSurfaceVisibilityEvent.exposed_received_when_surface_
      raised_over_occluding_surface [called twice - over-saturated and active]
      (LP: #1556045)
    . package-built mir_demo_server does not start on device (LP: #1577357)
    . During surface creation, first stream in spec becomes default stream.
      (LP: #1577967)
    . mouse is getting stuck on a phantom edge (LP: #1580774)
    . [testsfail] in MirSurfaceVisibilityEvent.exposed_received_when_surface_
      raised_over_occluding_surface [never called] (LP: #1581385)
    . [enhancement] Add support for full OpenGL compositing (LP: #1420581)
    . [testsfail] ServerSignal.terminate_handler_is_called_for_SIGINT|SIGTERM
      (LP: #1570353)
    . [testsfail] ClientLatency.triple_buffered_client_has_less_than_two_
      frames_latency (LP: #1576690)
    . [testsfail] NestedServer.when_monitor_plugged_in_client_is_notified_of_
      new_display_configuration (LP: #1576760)
    . mir server crashed in what(): drmModeMoveCursor failed (returned -13)
      (LP: #1579630)
    . mirtest-dev is hard to use as the objects used are compiled with LTO
      (LP: #1583536)
    . [testsfail] ClientLogging.reports_performance [Value of: lag]
      (LP: #1583970)
    . [ FAILED ] ClientLogging.reports_performance (Value of: nbuffers)
      (LP: #1584603)
    . [ FAILED ] ClientLogging.reports_performance (Value of: render)
      (LP: #1584605)
    . ClientCredsTestFixture.session_authorizer_receives_pid_of_connecting_
      clients failure (LP: #1587604)
    . Mir on X11 ignores mir::graphics::GLConfig depth & stencil buffer size
      (LP: #1589632)
    . Need to support pointer confinement (LP: #1590099)
    . [tests] given_nested_server_set_base_display_configuration_when_
      monitor_plugged_in_configuration_is_reset fails (LP: #1591354)
    . CI failure in DemoInProcessServerWithStubClientPlatform.surface_
      creation_does_not_leak_fds (LP: #1598802)
    . Screen is squashed/distorted when rotated in Mir-on-X11 (LP: #1577262)
    . --display-report=log shows some invalid uninitialized EGL attribute
      values (LP: #1582066)
    . mir_demo_client_eglplasma falls back to software rendering on i915
      (Intel Atoms), which explains why it's so slow (LP: #1583532)
    . [regression] x11 platform only draws to a small part of the x11 window
      (LP: #1598267)
    . mir ftbfs in yakkety builders (LP: #1600343)
    . Autolanding keeps failing: mock_egl.h:89:7: error: type 'struct
      MockEGL' violates one definition rule [-Werror=odr] (LP: #1603303)
    . [regression] The Super/Windows key doesn't work any more (LP: #1602966)
    . mir_acceptance_tests.bin: double free or corruption (fasttop)
      (LP: #1603114)
    . ftbfs in linking libmir-test-assist.a in xenial+overlay and
      yakkety+overlay (LP: #1601810)
    . [testsfail] failure in NestedInput.on_input_device_state_nested_*
      (LP: #1602646)  
    . mirtest-dev provides an incorrect .pc file (LP: #1603080)
    . mir_test_framework::server_platform_path(), 
      mir_test_framework::server_platform() don't support use in a downstream
      test built against mir-test-assist (LP: #1603091)
    . Servers based on Mir need a hook to execute code when the server is
      closing (LP: #1593655)
    . Android graphics platform doesn't get packaged for arm64 (LP: #157866)
    . memory leaks in unit tests on android (LP: #1253486)
    . Physical "screen" size reported by the X11 backend is same as pixel
      count, fixing dpi to 25.4 (LP: #1596051)
    . Mir build and test failures with gcc-6 and LTO (LP: #1610215)
    . [regression] Trust prompt not shown when starting camera (LP: #1612256)
* No-change rebuild for boost soname change.
    . unity8/libmirclient gives up and terminates prematurely with
      "std::exception::what: disconnected: no new buffers" via
      ExchangeSemantics::submit() (LP: #1506358)

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
#include "display_buffer.h"
20
20
 
21
21
#include "host_connection.h"
22
 
#include "mir/input/input_dispatcher.h"
23
22
#include "mir/graphics/pixel_format_utils.h"
24
 
#include "mir/input/cursor_listener.h"
25
23
#include "mir/graphics/egl_error.h"
26
24
#include "mir/events/event_private.h"
27
25
 
28
26
#include <boost/throw_exception.hpp>
29
27
#include <stdexcept>
30
28
 
31
 
namespace mi = mir::input;
32
29
namespace mg = mir::graphics;
33
30
namespace mgn = mir::graphics::nested;
34
31
namespace geom = mir::geometry;
37
34
    EGLDisplayHandle const& egl_display,
38
35
    std::shared_ptr<HostSurface> const& host_surface,
39
36
    geometry::Rectangle const& area,
40
 
    std::shared_ptr<input::InputDispatcher> const& dispatcher,
41
 
    std::shared_ptr<mi::CursorListener> const& cursor_listener,
42
 
    MirPixelFormat preferred_format) :
 
37
    MirPixelFormat preferred_format,
 
38
    std::shared_ptr<HostConnection> const& host_connection) :
43
39
    egl_display(egl_display),
44
40
    host_surface{host_surface},
45
 
    egl_config{egl_display.choose_windowed_es_config(preferred_format)},
 
41
    host_connection{host_connection},
 
42
    egl_config{egl_display.choose_windowed_config(preferred_format)},
46
43
    egl_context{egl_display, eglCreateContext(egl_display, egl_config, egl_display.egl_context(), nested_egl_context_attribs)},
47
44
    area{area.top_left, area.size},
48
 
    dispatcher{dispatcher},
49
 
    cursor_listener{cursor_listener},
50
45
    egl_surface{egl_display, host_surface->egl_native_window(), egl_config}
51
46
{
52
47
    host_surface->set_event_handler(event_thunk, this);
115
110
 
116
111
void mgn::detail::DisplayBuffer::mir_event(MirEvent const& event)
117
112
{
118
 
    if (mir_event_get_type(&event) != mir_event_type_input)
119
 
        return;
120
 
 
121
 
    if (event.type() == mir_event_type_motion)
122
 
    {
123
 
        MirMotionEvent my_event = *event.to_input()->to_motion();
124
 
        auto iev = mir_event_get_input_event(&my_event);
125
 
 
126
 
        if (mir_input_event_get_type(iev) == mir_input_event_type_pointer)
127
 
        {
128
 
            auto motion = my_event.to_input()->to_motion();
129
 
 
130
 
            for (size_t i = 0; i != motion->pointer_count(); ++i)
131
 
            {
132
 
                auto x = motion->x(i);
133
 
                auto y = motion->y(i);
134
 
                motion->set_x(i, x + area.top_left.x.as_float());
135
 
                motion->set_y(i, y + area.top_left.y.as_float());
136
 
            }
137
 
 
138
 
            auto pev = mir_input_event_get_pointer_event(iev);
139
 
            auto x = mir_pointer_event_axis_value(pev, mir_pointer_axis_x);
140
 
            auto y = mir_pointer_event_axis_value(pev, mir_pointer_axis_y);
141
 
            cursor_listener->cursor_moved_to(x, y);
142
 
        }
143
 
 
144
 
        dispatcher->dispatch(my_event);
145
 
    }
146
 
    else
147
 
    {
148
 
        dispatcher->dispatch(event);
149
 
    }
 
113
    if (mir_event_get_type(&event) == mir_event_type_input ||
 
114
        mir_event_get_type(&event) == mir_event_type_input_device_state)
 
115
        host_connection->emit_input_event(event, area);
150
116
}
151
117
 
152
118
mg::NativeDisplayBuffer* mgn::detail::DisplayBuffer::native_display_buffer()