Mir

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

Bug #1294361 reported by Alberto Aguirre
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Mir
Fix Released
Medium
Alberto Aguirre
mir (Ubuntu)
Fix Released
Medium
Unassigned

Bug Description

Using mirscreencast -s 100 100 for example

with:
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.

Tags: screencast

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 :

@Alexandros:

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
        Scene::generate_renderable_list().
    - 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  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.