Merge lp:~smspillaz/unity/unity.fix_1080947 into lp:unity
Status: | Superseded |
---|---|
Proposed branch: | lp:~smspillaz/unity/unity.fix_1080947 |
Merge into: | lp:unity |
Diff against target: |
665 lines (+286/-129) 4 files modified
launcher/XdndCollectionWindowImp.cpp (+2/-1) plugins/unityshell/src/unityshell.cpp (+264/-124) plugins/unityshell/src/unityshell.h (+20/-2) unity-shared/BackgroundEffectHelper.cpp (+0/-2) |
To merge this branch: | bzr merge lp:~smspillaz/unity/unity.fix_1080947 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Unity Team | Pending | ||
Review via email: mp+147544@code.launchpad.net |
This proposal has been superseded by a proposal from 2013-03-22.
Commit message
Don't re-present all of our windows on every frame. Only do that if damage intersects it.
Use the new APIs exposed by compiz and nux to intelligently determine which windows need to be presented per-frame and only register damage for those windows. This fixes two things:
1. BaseWindows being redrawn from scratch every time damage was registered over them. That was incorrect and should only be done in the case of background blurs.
2. BaseWindows being drawn to the screen on every frame, regardless of whether or not they needed to be. Now they will only be drawn if some damage intersects beneath them. Note that unity will expand the damage region to accomadate the base window since nux does not support geometry clipping. So if there is a partial intersection of the launcher for example, the area of the screen which contains the launcher will be re-painted (but the launcher itself won't be redrawn, just its texture).
This also uses the framebuffer blitting API from compiz to quickly copy the non-blurred regions of the screen back to the backbuffer.
(LP: #1080947)
Description of the change
Don't re-present all of our windows on every frame. Only do that if damage intersects it.
Use the new APIs exposed by compiz and nux to intelligently determine which windows need to be presented per-frame and only register damage for those windows. This fixes two things:
1. BaseWindows being redrawn from scratch every time damage was registered over them. That was incorrect and should only be done in the case of background blurs.
2. BaseWindows being drawn to the screen on every frame, regardless of whether or not they needed to be. Now they will only be drawn if some damage intersects beneath them. Note that unity will expand the damage region to accomadate the base window since nux does not support geometry clipping. So if there is a partial intersection of the launcher for example, the area of the screen which contains the launcher will be re-painted (but the launcher itself won't be redrawn, just its texture).
This also uses the framebuffer blitting API from compiz to quickly copy the non-blurred regions of the screen back to the backbuffer.
(LP: #1080947)
This branch depends on two others:
1. https:/
2. https:/
Update: test results here: http://
I was careful to modify phoronix-test-suite to run tests in windowed mode only, and those were the only three tests I was able to get to run in windowed mode. Of particular interest was the fact that the unigine demos had a 5x performance improvement, probably because the driver was spending less time filling redundant pixels from the compositor. In other areas we had a roughly 5FPS boost.
Compiz framerate graph:
http://
You'll see that especially on the last test, it drops off quite a bit on the non buffer_age case, and is generally speaking lower across the board.