图层历史¶
本文概述了我们图层基础设施历史上的主要事件。
iPhone 于 2007 年 7 月发布(基于名为 LayerKit 的工具包构建)
Core Animation(2007 年 10 月)LayerKit 公开重命名为 OS X 10.5
Webkit CSS 3d 变换(2009 年 7 月)
原始图层 API(2010 年 3 月)引入了图层管理器合成概念。此功能的早期用例之一是用于视频的硬件加速 YUV 转换。
保留图层(2010 年 7 月 7 日 - Bug 564991)这是一个重要的概念,引入了在 Gecko 控制的缓冲区中跨绘制持久化图层内容的想法,而不是仅仅由操作系统来处理。这引入了缓冲区旋转的概念来处理滚动,而不是使用本机滚动 API(如 ScrollWindowEx)
图层 IPC(2010 年 7 月 - Bug 570294)引入了阴影图层和编辑列表,最初是为 e10s v1 设计的
3D 变换(2011 年 9 月 - Bug 505115)
OMTC(2011 年 12 月 - Bug 711168)最初在 OS X 上进行了原型设计,但首先在 Fennec 上发布
平铺 v1(2012 年 4 月 - Bug 739679)最初是为 Fennec 设计的。这样做是为了避免在少量滚动时需要执行大量工作的情况,例如缓冲区旋转。它使我们能够拥有各种有趣的功能,例如渐进式绘制和低分辨率绘制。
C++ 异步平移缩放控制器(2012 年 7 月 - Bug 750974)现有的 APZ 代码是为 Fennec 编写的 Java 代码,因此重新实现了它。
流式 WebGL 缓冲区(2013 年 2 月 - Bug 716859)允许 OMTC WebGL 并避免在每一帧都调用 glFinish() 的基础设施。
合成器 API(2013 年 4 月 - Bug 825928)其规划始于 2012 年 11 月左右。图层重构创建了一个合成器 API,该 API 隐藏了 D3D 与 OpenGL 之间的差异。主要 API 部分是 DrawQuad。
平铺 v2(2014 年 3 月 7 日 - Bug 963073)B2G 的平铺功能。这项工作主要是将平铺图层移植到新的纹理,实现双缓冲平铺以及实现纹理客户端池,供平铺内容客户端使用。
池的一个主要动机是分配平铺的性能非常慢,因为需要向合成器发送同步消息。
分配速度慢的问题由 bug 959089 直接解决,该错误允许我们在没有向合成器线程发送同步消息的情况下分配 gralloc 缓冲区。
B2G WebGL 性能(2014 年 5 月 - Bug 1006957、1001417、1024144)这项工作改进了合成器和生产者之间的同步机制。