Mir

lp:~andreas-pokorny/mir/input-registrar-observer

Created by Andreas Pokorny and last modified
Get this branch:
bzr branch lp:~andreas-pokorny/mir/input-registrar-observer
Only Andreas Pokorny can upload to this branch. If you are Andreas Pokorny please log in for upload directions.

Branch merges

Related bugs

Related blueprints

Branch information

Owner:
Andreas Pokorny
Project:
Mir
Status:
Development

Recent revisions

1548. By Andreas Pokorny

merged devel

1547. By Andreas Pokorny

* New upstream release 0.1.9 (https://launchpad.net/mir/+milestone/0.1.9)
  - mirclient ABI unchanged, still at 7. Clients do not need rebuilding.
  - mirserver ABI bumped to 19. Shells need rebuilding.
  - More libmirserver class changes and reorganization, including;
    . Moving things from shell:: to scene::
    . Rewriting/refactoring surface factories.
  - Added an id() to Renderable.
  - Scene/Renderer interfaces:
    . Scene is no longer responsible for its own iteration (no for_each
      any more). Instead you should iterate over the list returned by
      Scene::generate_renderable_list().
  - Bugs fixed:
    . TODO: fill in when proposing to Ubuntu
[ Daniel van Vugt ]
  - mirserver ABI bumped to 18. Shells need rebuilding.
    . graphics::Platform::create_display() has a new parameter allowing you
      to customize the compositor's (E)GL configutation.
    . Renderable::buffer(unsigned long frameno) is now:
      Renderable::buffer(void const* user_id). See below.
    . Renderable::should_be_rendered_in() is replaced by a more natural:
      Renderable::visble()
    . input::Surface::name() returns by value instead of reference now,
      to ensure future thread safety.
  - Switched EventHub device enumeration and hotplug to Udev. NOTE! This
    means mir_test_* can't run natively on touch devices any more without
    some setup first:
      umockdev-run -- bin/mir_unit_tests
  - Introduced "RenderableList" as the way to sample the Scene contents,
    and started using that in the default compositor.
  - Introduced physical length units and conversion (geometry::Length) in
    preparation for arbitrary DPI rendering.
    anti-aliased and high-DPI scalable.
  - Multi-monitor frame sync has been redesigned to eliminate the need for
    frame number tracking.
  - Bugs (and enhancements) resolved:
    . [enhancement] Please move input detection to libudev (LP: #1237784)
    . [enhancement] Add a clamping resize mode to GLRenderer (LP: #1259887)
    . [regression] Intermittent loss of multimonitor frame sync
      (LP: #1290306)
    . [enhancement] Make GL config options configurable (LP: #1290780)
    . memcheck-test doesn't test anything when DISABLED_GTEST_DISCOVERY is
      enabled (LP: #1291876)
    . "Error opening DRM device" is always followed by "Unknown error -(some
      negative number)" (LP: #1292384)
    . Rendering/composition gets stopped early (LP: #1293896)
    . Ubuntu Touch Settings and terminal apps are not rendering correctly on
      rotate. (LP: #1294048)
    . [regression] Apps are much slower to open (LP: #1294051)
    . Settings app opens to a blank screen unless given enough time to render
      or the app is touched (LP: #1294053)
    . TestClientInput/DemoPrivateProtobuf memory leak is causing regular CI
      test failures (LP: #1295231)
    . OSK touch events "fall through" and hit surface behind them
      (LP: #1297878)
    . [enhancement] add a test for composite of last client post
      (LP: #1298596)
    . [regression] Surfaces vanish as soon as their edges touch the edge of
      screen (LP: #1301115)
* Cherry-picked from future release 0.1.9:
  - Bug fix: mirplatformgraphics does not have boost program options in its
    symbol table (LP: #1301040)
  - Bug fix: unity8 crashed with SIGSEGV in glDeleteTextures() from
    mir::scene::GLPixelBuffer::~GLPixelBuffer() from
    mir::scene::ThreadedSnapshotStrategy::~ThreadedSnapshotStrategy()
    (LP: #1256360)
[ Ubuntu daily release ]
* New rebuild forced

1546. By Andreas Pokorny

Allow multiple InputRegistrar

This change is necessary to split out the the input send parts from droidinput::InputDispatcher. InputRegistrar is copied to InputRegistrarObserver, and two methods are added to InputRegistrar to register further InputRegistrarObservers. The default implementation is no longer related to android integration code.

1545. By Andreas Pokorny

review findings addressed

1544. By Andreas Pokorny

Further tests showing the receival of focus changes and opened input channels

1543. By Andreas Pokorny

Make InputDispatcher replaceable

This change introduces a InputDispatcher interface that receives MirEvents.
The existing android-input based InputDispatcher is still the default dispatcher.
The configuration happens through the InputDispatcherConfiguration, which supplies
some additional related interfaces.

1542. By Kevin DuBois

Address some long term problems with SurfaceStack's synchronization...
1) SurfaceStack was a BasicLockable, requiring a recursive_mutex. 'locking' the surface stack would just lock the ordering, it wouldn't lock the surfaces contained by the surface stack. Eliminate lock()/unlock() from the mc::Scene interface
2) The decisions the compositor made were based on data that was potentially stale when it came time to apply the decision. That is, every time the DefaultDisplayBuffer compositor went to access something from the BasicSurface, it could get a different value back, and had no way to lock the values (eg position) until the render was complete

A few ideas were examined:
A) locking the surface ordering and the surfaces
This has the disadvantage that we essentially have one big lock around the central data structure of mir
B) locking the scene, and copying the surfaces
This has the disadvantage that the buffer acquisition (compositor_acquire) has to take place sooner in the render, leaving the client less time to sneak its buffers in to make the next frame posting
C) locking the scene, copying the surfaces, and lazy-copying the buffers.
This is the approach proposed, as it freezes the positioning info for the surfaces at generate_renderables_list() time, but allows the clients to sneak in 'last minute buffers' and make an earlier frame if they return their buffer between "generate_renderable_list() and when the GLRenderer needs the buffer for texture reasons. The positioning info is just locked during the copy, so the rest of the system can proceed with what it has do (servicing move requests, rearranging the surfaces, etc) while the compositor is drawing.

Approved by PS Jenkins bot, Alexandros Frantzis, Alan Griffiths, Alberto Aguirre.

1541. By Alberto Aguirre

Add capture rate limiting to mirscreencast (LP: #1294361, LP: #1280938). Fixes: https://bugs.launchpad.net/bugs/1280938, https://bugs.launchpad.net/bugs/1294361.

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

1540. By Alan Griffiths

tests: Provide an integration test that focusing on a session raises its default surface. Fixes: https://bugs.launchpad.net/bugs/1302689.

Approved by Daniel van Vugt, PS Jenkins bot, Alexandros Frantzis, Chris Halse Rogers.

1539. By Daniel van Vugt

Fix improperly (non)overloaded mock function (LP: #1301135). Fixes: https://bugs.launchpad.net/bugs/1301135.

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

Branch metadata

Branch format:
Branch format 7
Repository format:
Bazaar repository format 2a (needs bzr 1.16 or later)
Stacked on:
lp:mir/0.1
This branch contains Public information 
Everyone can see this information.

Subscribers