Merge lp:~vanvugt/mir/earlier-release into lp:mir
| Status: | Merged |
|---|---|
| Approved by: | Daniel van Vugt on 2015-08-20 |
| Approved revision: | 2828 |
| Merged at revision: | 2862 |
| Proposed branch: | lp:~vanvugt/mir/earlier-release |
| Merge into: | lp:mir |
| Diff against target: |
164 lines (+107/-0) 4 files modified
src/server/compositor/buffer_queue.cpp (+17/-0) src/server/compositor/buffer_queue.h (+1/-0) tests/integration-tests/test_buffer_scheduling.cpp (+54/-0) tests/unit-tests/compositor/test_buffer_queue.cpp (+35/-0) |
| To merge this branch: | bzr merge lp:~vanvugt/mir/earlier-release |
| Related bugs: |
| Reviewer | Review Type | Date Requested | Status |
|---|---|---|---|
| PS Jenkins bot | continuous-integration | Approve on 2015-08-20 | |
| Daniel van Vugt | Needs Information on 2015-08-18 | ||
| Kevin DuBois (community) | Approve on 2015-08-12 | ||
| Cemil Azizoglu (community) | Approve on 2015-08-10 | ||
| Alan Griffiths | 2015-08-07 | Approve on 2015-08-10 | |
| Chris Halse Rogers | Approve on 2015-08-10 | ||
|
Review via email:
|
|||
Commit Message
Reintroduce very short* buffer holds so that a starving client can
get a new buffer to render to much sooner, and potentially appear
much smoother (LP: #1480164)
In visual terms this is the equivalent of adding an extra buffer to
the queue without actually needing an extra buffer. It also means
we're now much more likely to be able to keep up using a lower
number of buffers (and hopefully can re-enable double buffering
eventually).
As an added bonus, this also means a compositor can better predict
where in its render loop we're going to block to send responses to
clients (while LP: #1395421 is not resolved), allowing it to defer
or move buffer releases to another thread so as to not slow down
compositing.
* "very short" means for the render time only (often 1ms or less),
rather than the full frame interval.
| Daniel van Vugt (vanvugt) wrote : | # |
| PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:2810
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
| Alan Griffiths (alan-griffiths) wrote : | # |
*Needs Discussion*
I'm not completely comfortable with the "single monitor" naming here. If I understand the context correctly it identifies that the queue is being consumed by a single compositor (and isn't directly related to the number of monitors).
| Daniel van Vugt (vanvugt) wrote : | # |
Fair point.
| Daniel van Vugt (vanvugt) wrote : | # |
To be completely pedantic, "compositor" is not always accurate either. It might be a frame dropper or a snapshot rather than a compositor. We should just call them "consumers" (and clients "producers").
| PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:2813
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
| Chris Halse Rogers (raof) wrote : | # |
Hm. The various special-cases in BufferQueue are solidifying my belief that we've made an incorrect abstraction.
That said, we'll soon have an opportunity to revisit that in the New Buffer Semantics™, and this looks like a sensible improvement.
| Daniel van Vugt (vanvugt) wrote : | # |
Don't underestimate the value of 600 lines of lowly coupled and thoroughly tested code. The new solution is likely to be bigger, more highly coupled and less mature for quite some time yet.
| PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:2814
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
| Alan Griffiths (alan-griffiths) wrote : | # |
compositor vs consumers is a preexisting irritation
| Daniel van Vugt (vanvugt) wrote : | # |
I just noticed, kdub's already using "producer" and "consumer" in new code.
| PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:2816
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
deb: http://
FAILURE: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
| PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Autolanding.
More details in the following jenkins job:
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
SUCCESS: http://
| Daniel van Vugt (vanvugt) wrote : | # |
The autolanding failure seems to be a timing glitch. That failing test relies on real time :P
| PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Autolanding.
More details in the following jenkins job:
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
deb: http://
FAILURE: http://
SUCCESS: http://
| PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Autolanding.
More details in the following jenkins job:
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
FAILURE: http://
FAILURE: http://
SUCCESS: http://
deb: http://
FAILURE: http://
SUCCESS: http://
| Daniel van Vugt (vanvugt) wrote : | # |
Actually this failure looks suspiciously real and related:
13: [ FAILED ] BufferQueue/
If only I could reproduce it.
| PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:2820
http://
Executed test runs:
SUCCESS: http://
FAILURE: http://
FAILURE: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
| Daniel van Vugt (vanvugt) wrote : | # |
Although I've been landing a lot of proposals by hand during the wily archive transition (CI fails for everyone), this proposal should probably wait. The only place it was ever failing was in CI so I want to see it pass in CI...
- 2821. By Daniel van Vugt on 2015-08-14
-
Merge latest trunk
- 2822. By Daniel van Vugt on 2015-08-17
-
Merge latest trunk
| PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:2822
http://
Executed test runs:
SUCCESS: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
SUCCESS: http://
deb: http://
FAILURE: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
- 2823. By Daniel van Vugt on 2015-08-17
-
Merge latest trunk
- 2824. By Daniel van Vugt on 2015-08-17
-
Merge latest trunk
| Daniel van Vugt (vanvugt) wrote : | # |
Measurements:
Maxing out a demo server with 49 clients (which is all my desktop can render smoothly using trunk), I get an improvement in the compositor render time from 3.7ms to 1.6ms using this branch. Also, this branch raises the maximum number of concurrent clients before frames are missed from 49 to 54.
| Alan Griffiths (alan-griffiths) wrote : | # |
> Measurements:
> Maxing out a demo server with 49 clients (which is all my desktop can render
> smoothly using trunk), I get an improvement in the compositor render time from
> 3.7ms to 1.6ms using this branch. Also, this branch raises the maximum number
> of concurrent clients before frames are missed from 49 to 54.
Interesting.
Any chance of getting these tests automated?
| Daniel van Vugt (vanvugt) wrote : | # |
I think I can see another location where a similar optimization is required:
mc::BufferQue
That might explain why this branch still wasn't quite working as well as it should with my qtmir work.
- 2825. By Daniel van Vugt on 2015-08-18
-
Merge latest trunk
- 2826. By Daniel van Vugt on 2015-08-19
-
Merge latest trunk
- 2827. By Daniel van Vugt on 2015-08-19
-
Merge latest trunk
| PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:2827
http://
Executed test runs:
SUCCESS: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
deb: http://
FAILURE: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
- 2828. By Daniel van Vugt on 2015-08-20
-
Merge latest trunk
| PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:2828
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://

I suspect we need an equivalent test case added to kdub's new suite too?... But it's now Friday night. Later.