Unity8 not informing clients that they are not visible and thus can stop rendering

Bug #1475678 reported by Gerry Boland on 2015-07-17
22
This bug affects 4 people
Affects Status Importance Assigned to Milestone
Canonical System Image
High
Michał Sawicz
qtmir (Ubuntu)
High
Nick Dedekind
unity8 (Ubuntu)
High
Nick Dedekind

Bug Description

Currently on the phone, apps stop rendering when shell hides them, because shell also lifecycle stops the app. App isn't actually told it should stop rendering, we just SIGSTOP its process.

But some apps are not lifecycle stopped, e.g. music. So we should have unity8 tell the app to stop rendering.

This will be a multi-step process:
1. Qtubuntu
Mir has a attribute to set on surfaces to tell them they are visible/occluded: (see mir/include/common/mir_toolkit/common.h)
mir_surface_attrib_visibility - part of the MirSurfaceAttrib enum.

This indicates these possible values:
typedef enum MirSurfaceVisibility
{
    mir_surface_visibility_occluded = 0,
    mir_surface_visibility_exposed
} MirSurfaceVisibility;

On the client side (qtubuntu), you need to listen for this attribute change, and connect it to QWindowSystemInterface::handleExposeEvent() which tells Qt how much of a QWindow is being drawn.
Note there is also a QWindowSystemInterface::handleWindowStateChanged() handler, which use use to explicitly set QWindow show/hide, but Qt tends to release its GL context on hide, which we may not desire. It may not hurt, worth a look.

2. QtMir
There are methods on mir::scene::Surface to set and get the MirSurfaceAttrib attributes. I think it would make sense to use the pre-existing MirSurfaceItem::visible property, so that if a surface is marked visible=false, then that will dispatch the mir_surface_visibility_occluded event to the client, so it will stop drawing.

3. Unity8
Correctly set visible=false when an application surface is occluded, and true when visible. QML has no automatic way of doing that (i.e. occlusion detection)

Related branches

Mirco Müller (macslow) on 2015-07-17
Changed in qtmir:
assignee: nobody → Mirco Müller (macslow)
Changed in qtubuntu:
assignee: nobody → Mirco Müller (macslow)
Changed in unity8 (Ubuntu):
assignee: nobody → Mirco Müller (macslow)
Mirco Müller (macslow) on 2015-07-20
Changed in qtmir:
importance: Undecided → High
Changed in qtubuntu:
importance: Undecided → High
Changed in unity8 (Ubuntu):
importance: Undecided → High
Changed in qtmir:
status: New → In Progress
Changed in qtubuntu:
status: New → In Progress
Changed in unity8 (Ubuntu):
status: New → In Progress
Michael Zanetti (mzanetti) wrote :

Should probably be added to this Qt api:

http://doc.qt.io/qt-5/qml-qtqml-qt.html#application-prop

Changed in canonical-devices-system-image:
assignee: nobody → kevin gunn (kgunn72)
importance: Undecided → High
milestone: none → ww46-2015
status: New → In Progress
Michał Sawicz (saviq) on 2015-09-21
no longer affects: qtubuntu
Changed in qtmir:
assignee: Mirco Müller (macslow) → nobody
Changed in unity8 (Ubuntu):
assignee: Mirco Müller (macslow) → nobody
Michał Sawicz (saviq) on 2015-09-21
Changed in qtmir:
assignee: nobody → Nick Dedekind (nick-dedekind)
Changed in unity8 (Ubuntu):
assignee: nobody → Nick Dedekind (nick-dedekind)
Changed in canonical-devices-system-image:
status: In Progress → Fix Committed
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package unity8 - 8.11+16.04.20151104-0ubuntu1

---------------
unity8 (8.11+16.04.20151104-0ubuntu1) xenial; urgency=medium

  [ Albert Astals Cid ]
  * Add an Item that proxies for old and new audio roles (LP: #1493851)
  * CroppedImageMinimumSourceSize: Fix 'Binding loop detected for
    property "imageAspectRatio"'
  * Make the scope settings list scroll to text visible area (LP:
    #1499084)
  * Move to importing QtQuick 2.4 & friends
  * Use SDK 1.3 across all files (LP: #1503498, #1508363, #1449628)

  [ Andrea Cimitan ]
  * Add sharing widget to zoomable image and video playback
  * Make zoomable and video playback widgets edge to edge
  * Updated all 1.3 UbuntuShape to use new APIs where possible
  * Use SDK 1.3 across all files (LP: #1503498, #1508363, #1449628)

  [ CI Train Bot ]
  * Resync trunk.

  [ Christopher Lee ]
  * Quick spelling fix in process control output.

  [ Daniel d'Andrada ]
  * Enable support for overriding application orientations based on
    device type (LP: #1478637)
  * Use SDK 1.3 across all files (LP: #1503498, #1508363, #1449628)
  * Use SDK 1.3 across all files (LP: #1503498, #1508363, #1449628)

  [ Josh Arenson ]
  * Enable support for overriding application orientations based on
    device type (LP: #1478637)

  [ Michael Terry ]
  * Avoid showing the shutdown dialog when turning on the screen if your
    device is under heavy load. (LP: #1508563)
  * Handle lifecycle policy exceptions ourselves, instead of letting
    qtmir do it for us and allow non-Touch apps to opt-out of the Touch
    lifecycle.

  [ Michael Zanetti ]
  * Fixes for the panel buttons (LP: #1510360, #1504269, #1431566,
    #1443319)
  * Use SDK 1.3 across all files (LP: #1503498, #1508363, #1449628)

  [ Michał Sawicz ]
  * Add missing copyright to Cursor.qml
  * Enable support for overriding application orientations based on
    device type (LP: #1478637)
  * Support server->client visibility change to stop rendering
    (lp:#1475678) (LP: #1475678)

  [ Nick Dedekind ]
  * Support server->client visibility change to stop rendering
    (lp:#1475678) (LP: #1475678)

 -- Michał Sawicz <email address hidden> Wed, 04 Nov 2015 14:58:41 +0000

Changed in unity8 (Ubuntu):
status: In Progress → Fix Released
Changed in canonical-devices-system-image:
status: Fix Committed → Fix Released
Michał Sawicz (saviq) on 2015-11-30
Changed in canonical-devices-system-image:
status: Fix Released → Triaged
Changed in unity8 (Ubuntu):
status: Fix Released → Triaged
status: Triaged → Fix Committed
status: Fix Committed → In Progress
Changed in canonical-devices-system-image:
status: Triaged → In Progress
Changed in canonical-devices-system-image:
milestone: ww46-2015 → ww02-2016
Changed in canonical-devices-system-image:
milestone: ww02-2016 → ww08-2016
Michał Sawicz (saviq) on 2016-02-04
Changed in canonical-devices-system-image:
assignee: kevin gunn (kgunn72) → Michał Sawicz (saviq)
Michał Sawicz (saviq) on 2016-03-09
Changed in canonical-devices-system-image:
milestone: ww08-2016 → 11
Michał Sawicz (saviq) on 2016-05-05
Changed in canonical-devices-system-image:
milestone: 11 → 12
Selene ToyKeeper (toykeeper) wrote :

Subscribing so I can get notified to power-test the changes when they're available.

Changed in canonical-devices-system-image:
milestone: 12 → 13
Changed in canonical-devices-system-image:
status: In Progress → Fix Committed
Michał Sawicz (saviq) on 2016-09-05
Changed in qtmir:
status: In Progress → Fix Released
Changed in unity8 (Ubuntu):
status: In Progress → Fix Released
Changed in canonical-devices-system-image:
status: Fix Committed → Fix Released
Michał Sawicz (saviq) on 2017-03-13
affects: qtmir → qtmir (Ubuntu)
To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Other bug subscribers