mirscreencast can cause clients to render faster than the screen refresh rate

Bug #1294361 reported by Alberto Aguirre on 2014-03-18
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Fix Released
Alberto Aguirre
mir (Ubuntu)

Bug Description

Using mirscreencast -s 100 100 for example

mir_demo_server_basic with two clients running - mir_demo_client_eglplasma and mir_demo_client_egltriangle

The clients report the following:
60 FPS
60 FPS
60 FPS
60 FPS
60 FPS
59 FPS
60 FPS
60 FPS
60 FPS
60 FPS
60 FPS
59 FPS
79 FPS <--- screencasting started here
110 FPS
107 FPS
114 FPS
111 FPS
99 FPS

The screencast drives its compositor asynchronously from the multi threaded compositor which I suppose is making the switching bundle advance buffers at the screencast compositor rate.

Ideally the screencasting should:

1. If the screencast region falls within the region of a single display, then synchronize capture with the display refresh rate.
2. If the screencast region falls within the region of a multiple displays, then synchronize capture with the fastest display refresh rate.

Related branches

Revision history for this message
Daniel van Vugt (vanvugt) wrote :

Sounds like a fix would also resolve bug 1294362

tags: added: screencast
Changed in mir:
status: New → Triaged
Revision history for this message
Alexandros Frantzis (afrantzis) wrote :

Wouldn't capping the capture rate at 60FPS fix this issue? That's why we have the frame synchronization mechanism after all. The screencasting thread is essentially just another output/compositor from the BufferBundles' point of view.

Revision history for this message
Daniel van Vugt (vanvugt) wrote :

Last night I proposed an improvement to multi-monitor frame sync that could help, or at least could easily be modified to help with this.

Revision history for this message
Alberto Aguirre (albaguirre) wrote :


Yes, capping would solve it, but I was hoping to solve it together with #1294362 as my target is performance.

But I suppose the easiest solution is to cap framerate at the mirscreencast utility capture loop.

Changed in mir:
assignee: nobody → Alberto Aguirre (albaguirre)
Changed in mir:
milestone: none → 0.1.9
status: Triaged → In Progress
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

Fix committed into lp:mir/devel at revision 1541, scheduled for release in mir, milestone Unknown

Changed in mir:
status: In Progress → Fix Committed
Changed in mir:
status: Fix Committed → Fix Released
Changed in mir (Ubuntu):
importance: Undecided → Medium
status: New → Triaged
Revision history for this message
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package mir - 0.1.9+14.10.20140430.1-0ubuntu1

mir (0.1.9+14.10.20140430.1-0ubuntu1) utopic; urgency=medium

  [ Daniel van Vugt ]
  * 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
    - Bugs fixed:
      . Stale socket issue. (LP: #1285215)
      . Qt render gets blocked on EGLSwapBuffers. (LP: #1292306)
      . Lock order violated found in helgrind (potential deadlock).
        (LP: #1296544)
      . [regression] SwitchingBundle in framedropping mode can hang.
        (LP: #1306464)
      . [DPMS] Display backlight turns back on almost immediately after
        being turned off. (LP: #1231857)
      . Wrong frame is seen on wake up/resume/unlock. (LP: #1233564)
      . Nested platform is not testable (LP: #1299101)
      . [regression] mir_demo_server_shell crashes on display resume.
        (LP: #1308941)
      . Multi-threaded composition is actually mostly serialized by
        SurfaceStack::guard. (LP: #1234018)
      . Mirscreencast slows down compositing and makes it very jerky.
        (LP: #1280938)
      . Mirscreencast can cause clients to render faster than the screen
        refresh rate. (LP: #1294361)
      . Screen turns on when a new session/surface appears. (LP: #1297876)
      . mir-doc package is >56MB in size, expands to >100MB of files.
        (LP: #1304998)
      . [regression] Clang: 'mir::test::doubles::MockSurface::visible'
        hides overloaded virtual function [-Woverloaded-virtual].
        (LP: #1301135)
      . [regression] GLRenderer* unit tests have recently become noisy.
        (LP: #1308905)
      . FocusController::set_focus_to() no longer seems to raise a session
        to the top. (LP: #1302689)

  [ Ubuntu daily release ]
  * New rebuild forced
 -- Ubuntu daily release <email address hidden> Wed, 30 Apr 2014 13:26:58 +0000

Changed in mir (Ubuntu):
status: Triaged → Fix Released
To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Other bug subscribers