八百万像素及更多:改进 WebRender 中的纹理图集分配

2024-06-22

本文介绍了作者如何改进 WebRender 中的纹理图集分配以提高渲染性能。作者首先开发了 guillotiere,这是一个用于动态纹理图集分配的 Rust crate,它基于优化的 guillotine 算法,能够高效地分配和释放纹理空间。然后,作者分析了 WebRender 的实际工作负载,发现 slab allocator 算法存在浪费空间的问题,特别是在处理大量小尺寸字形时。为了解决这个问题,作者实现了两种 shelf packing 算法,并通过实验比较了它们的性能和空间效率。最终,作者选择了简单的 shelf packing 算法,因为它在简单性和效率之间取得了良好的平衡,并将其集成到 Firefox 86 中。