Mir shows an old frame on client startup (for Mesa GL clients)
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Mir |
Fix Released
|
Medium
|
Daniel van Vugt | ||
mesa (Ubuntu) |
Invalid
|
Medium
|
Unassigned | ||
mir (Ubuntu) |
Fix Released
|
Medium
|
Unassigned |
Bug Description
Mir shows an old frame on client startup.
Test case (1):
1. Start and stop one client at a time:
bin/
bin/
...
Expected: Each client only shows its own frames
Observed: The first frame of each client seems to be the last frame of the _previous_ client.
Test case(2) - more definitive but requires hacking:
1. Insert a long sleep in your client code just before eglSwapBuffers
Expected: The Mir server never shows the client till after the sleep has finished.
Observed: The Mir server composites the client immediately on startup, with old/invalid pixel data. It only gets replaced with a valid frame after the sleep finishes.
Related branches
- PS Jenkins bot (community): Approve (continuous-integration)
- Kevin DuBois (community): Approve
- Alan Griffiths: Approve
-
Diff: 85 lines (+33/-2)3 files modifiedsrc/client/mesa/native_surface.cpp (+12/-2)
src/client/mesa/native_surface.h (+1/-0)
tests/unit-tests/client/mesa/test_native_surface.cpp (+20/-0)
Changed in mir: | |
assignee: | nobody → Daniel van Vugt (vanvugt) |
Changed in mir: | |
status: | Invalid → In Progress |
milestone: | none → 0.1.6 |
summary: |
- Mir shows an old frame on client startup + Mir shows an old frame on client startup (for Mesa GL clients) |
description: | updated |
Changed in mir: | |
status: | Fix Committed → Fix Released |
tags: | added: egl-platform-mir |
Tried bisecting, but the bug seems to have existed since last year at least. Or perhaps exists in Mesa.
I can't see any evidence of the bug occurring with software clients, only hardware (GL) clients. Also, I have traced through the compositor, renderer and SwitchingBundle. All of them are behaving correctly and only showing client buffers after the client submits them. However, I am suspicious of the GLES extensions we use for binding textures of hardware surfaces... that might be resulting in the wrong texture somehow (perhaps like bug 1270245).