GeneratedImage::drawPattern() creates an ImageBuffer the size of a tile, then creates an Image of the same size, which results in another copy of the data being made. For large tiles (such as a gradient whose height is the height of the body element), those are very large allocations. On the CG platforms, the code can be re-worked to utilize CGPattern, with the generator being called from the pattern callback and CG managing the memory allocation. Experimentation (as part of investigating bug 24130) has shown that this results in much faster painting and reduced memory use.
<rdar://problem/6624024>