The part about what iOS does isn't quite correct—apps pass a high-level layer tree to the render server with properties like corner radius and shadow offset, not a list of low-level drawing commands involving textures and shaders. That lets you animate these high-level properties without sending over new commands. I think the basic history is right, though!