Okay, so this was sort of tangentially posted here a week ago via a link reference, but I haven't seen any replies to it so I'm formally asking. One of the labs I work in runs a multi-machine monitor wall, and my mission is to alter chromium in order to enable tiled rendering. The desired result is being able to pass chromium a CLI option, telling it to only render one tile out of a grid, as well as the "virtual" resolution it is rendering in. In this way multiple chromium processes across multiple machines can render the same page. We have future ideas for render synchronization over the network, but that would be putting the cart before the horse.
Our original plan was to fork skia and write a new SkCanvas class (something like 'TiledSkCanvas'). It would essentially wrap SkCanvas and just alter the coordinates of render calls, or discard them if they fell outside of the tile responsibility. Then we could just put something like `#define SkCanvas TiledSkCanvas` in blink's included skia headers and have our tiling. This plan was of course blown out of the water when we saw how blink is actually organized. As far as I can tell, skia and blink is highly coupled, and the Skia headers used by blink are actually referred to in the Skia source.
I've also done some proof of concept hacks on SkCanvas, and it looks like it is too low level for what we're looking for. Tom Hudson seemed to think that the compositor would be the logical place to insert this functionality, but I have to admit that after reading the code I'm struggling to see how tiling functionality would be implemented in the compositor. (I think that the Tile classes in there refer to a different abstraction than what I'm looking for).
I thought it would be a good idea to just ask the experts what a good way to implement this is. What do you guys think? You know this codebase way better than anyone in my lab.