There are quite a lot of moving parts to this, ranging in difficulty from an estimated ‘pretty easy’ to ‘blocked until we're running a Mir session compositor under a Mir system compositor’.
The first step would be for the system compositor to not composite when there's no need to - which should be all the time when there's not an active transition occurring. That's the easy one.
Then we have the X server copy-to-Mir overhead. We can't reasonably remove this¹ because X's rendering model is persistent. Once we're running under a Mir session compositor we can run XMir without a root window and have each X window backed by its own Mir surface. For GL clients this would allow us to pass the Mir buffer all the way through DRI2, eliminating X's buffer copy.
¹: Although we could optimise it somewhat by Mir telling the client how old the buffer its receiving is. Then XMir could track damage between frames, and only copy the diff.
There are quite a lot of moving parts to this, ranging in difficulty from an estimated ‘pretty easy’ to ‘blocked until we're running a Mir session compositor under a Mir system compositor’.
The first step would be for the system compositor to not composite when there's no need to - which should be all the time when there's not an active transition occurring. That's the easy one.
Then we have the X server copy-to-Mir overhead. We can't reasonably remove this¹ because X's rendering model is persistent. Once we're running under a Mir session compositor we can run XMir without a root window and have each X window backed by its own Mir surface. For GL clients this would allow us to pass the Mir buffer all the way through DRI2, eliminating X's buffer copy.
¹: Although we could optimise it somewhat by Mir telling the client how old the buffer its receiving is. Then XMir could track damage between frames, and only copy the diff.