Merge lp://staging/~compiz-team/compiz/compiz.performance_1027211.2 into lp://staging/compiz/0.9.9
Status: | Superseded |
---|---|
Proposed branch: | lp://staging/~compiz-team/compiz/compiz.performance_1027211.2 |
Merge into: | lp://staging/compiz/0.9.9 |
Diff against target: |
2047 lines (+1631/-70) 20 files modified
include/core/CMakeLists.txt (+1/-0) include/core/configurerequestbuffer.h (+73/-0) include/core/window.h (+26/-7) plugins/composite/src/window.cpp (+1/-5) plugins/move/move.xml.in (+1/-1) plugins/move/src/move.cpp (+12/-5) plugins/move/src/move.h (+2/-0) plugins/opengl/src/paint.cpp (+3/-0) plugins/opengl/src/privates.h (+3/-0) plugins/opengl/src/window.cpp (+2/-1) src/CMakeLists.txt (+7/-0) src/asyncserverwindow.h (+52/-0) src/configurerequestbuffer-impl.h (+145/-0) src/configurerequestbuffer.cpp (+354/-0) src/event.cpp (+1/-1) src/privatewindow.h (+45/-1) src/syncserverwindow.h (+49/-0) src/tests/CMakeLists.txt (+11/-0) src/tests/test_configurerequestbuffer.cpp (+647/-0) src/window.cpp (+196/-49) |
To merge this branch: | bzr merge lp://staging/~compiz-team/compiz/compiz.performance_1027211.2 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Daniel van Vugt | Needs Fixing | ||
PS Jenkins bot (community) | continuous-integration | Approve | |
Review via email: mp+138800@code.staging.launchpad.net |
This proposal supersedes a proposal from 2012-12-07.
This proposal has been superseded by a proposal from 2012-12-13.
Commit message
Allow plugins to throttle delivery of ConfigureWindow requests within reason (LP: #1027211)
Description of the change
Allow plugins to throttle delivery of ConfigureWindow requests within reason (LP: #1027211)
(LP: #1027211) seems to be caused by vsync in the nvidia driver and posting lots of ConfigureWindow requests to the server. The driver really chokes on these for some reason. As a result, two things were happening:
1. The driver slows down quite significantly
2. We get more time to post more ConfigureWindow requests to the driver, which just slows it down even more until it grinds to a halt.
This branch does three things:
1. Introduces infrastructure for plugins to hold a "lock" on delivering ConfigureWindow requests until they choose to release it later (eg, on paint, or on ungrab), while still allowing core to override the plugin's decisions in cases where we actually need to post a ConfigureWindow request to the server in order to continue (eg, some other request is dependent on it). That code was TDD'ed into existence and has test coverage.
2. Optimizes reconfigureXWindow to only configure the frame window if the only thing that happened was that we moved the window. This means that we only buffer up one ConfigureWindow instead of three per call to reconfigureXWindow
3. Implements ConfigureReques
One question that might arise here is whether or not this branch is fundamentally unsafe because we allow the server to get "out of sync" with us. That isn't as much of a problem these days as it used to be. Nowadays we never track the incoming positions from the server to give us a representation of our own internal state, instead that is represented by what we meant to post to the server. So the internal state can never get mucked up. In areas where we do actually need to have our internal state represent what was really last sent to the server, I've structured the code such that in order to do those things, you have to release the queued up ConfigureWindow requests first.
Again, throw this at the wall and see if it introduces any bad regressions. I haven't see any so far.
Unmerged revisions
- 3536. By Sam Spilsbury
-
Fix assertion failures
- 3535. By Sam Spilsbury
-
Put lock in the list before freezing the buffer to avoid an assertion failure
- 3534. By Sam Spilsbury
-
Revert an accidental change due to f'n'r
- 3533. By Sam Spilsbury
-
Update client code to take advantage of ConfigureBuffer wrapping
queryShapeRectangles - 3532. By Sam Spilsbury
-
Fix broken assert
- 3531. By Sam Spilsbury
-
Merge lp:compiz
- 3530. By Sam Spilsbury
-
Bring back lazy positioning, make it off by default.
This basically "fixes" the various problems with nvidia being slow at
handling ConfigureWindow requests at the same time as doing synchronized
compositing, however it could come at the cost of some weird bugs. Keep
it off for now, and lets turn it on if there aren't any in testing - 3529. By Sam Spilsbury
-
Handle XShapeQueryRect
angles too and work around races with that - 3528. By Sam Spilsbury
-
Remove const promise, be a little smarter about calling XConfigureWindow
the other times - 3527. By Sam Spilsbury
-
Refactor the test code into test fixtures, remove lots of duplicated code
FAILED: Continuous integration, rev:3530 jenkins. qa.ubuntu. com/job/ compiz- ci/308/ jenkins. qa.ubuntu. com/job/ compiz- ci/./build= pbuilder, distribution= quantal, flavor= amd64/308/ console
http://
Executed test runs:
FAILURE: http://
Click here to trigger a rebuild: jenkins. qa.ubuntu. com/job/ compiz- ci/308/ /rebuild/?
http://