BlinkOn9 - Viz Update

简介:

作者在 4 月 18~19 期间和同事一起在湾区参加了为其两天的 BlinkOn 9 会议。每次 BlinkOn 都是了解当前 Blink & Chrome 和 Web 技术演进现状和发展方向的一个不错机会,两天的会议下来大概听了 6 ~ 7 场分享,有些主题是之前已经有所了解,这次又更新了最新的进展信息;有些主题则是完全陌生,在这次 BlinkOn 上才第一次知悉。作者接下来会撰写一系列文章,每篇文章针对一个特定的主题,尽可能把相关的信息回馈给读者。

BlinkOn9 关于 Chrome 新的渲染引擎 Viz 的分享 Chrome Graphics: Viz Update 实际的内容并不多,只是对半年前 BlinkOn8 上 What is Viz: The Future of Chrome Compositing 分享后的一些信息更新,针对 BlinkOn8 上分享的解读,建议读者可以先看作者的这篇文章 - Chrome 渲染流水线演化的未来,这样更容易理解本文的内容。

这次分享的内容主要是关于 OOP-D (Out of Process Display Compositor)和 OOP-R (Out of Process Rasterization) 的当前进展,和对 OOP-D 和 OOP-R 完成融合后的最终状态的描绘。

OOP-D

oop-d

OOP-D 实际上就是之前的 Tadpole 的正式称谓,这个称谓也跟 OOP-R 在命名上保持了一致。OOP-D 实际上包含了以下三个主要目标:

  1. 将 Display Compositor 从 Browser 进程迁移到 Viz 进程(原 GPU 进程);
  2. Display Compositor 使用 SkiaRenderer 直接进行合成,不再使用 CommandBuffer;
  3. SkiaRenderer 的实现支持 Vulkan;

oopif compositing

为了实现这些目标的前置任务包括:

  1. Surface Synchronization —— 用于支持多个不同进程的 Viz Client(ClientLayerTreeFrameSink) 给 Display Compositor 提交的 CompositorFrame 的同步,这个情况会存在于 Browser 进程提交的 UI 界面的 CompositorFrame 和 Renderer 进程提交的网页内容的 CompositorFrame 的合成,还有在支持 Site Isolation 后,多个 Renderer 进程提交的主 frame 和不同 origin 的 iframe 的 CompositorFrame 的合成(参考上图);
  2. New Event Targeting - 了解的不多,看起来是为了解决 Site Isolation 支持后的事件路由的问题;
  3. Enhanced Draw Occlusion - OOP-D 会导致 Site Isolation 的网页 Overdraw 增加,增强的绘制遮挡剔除主要是解决这个问题;

完成以上任务,第一个包括前两个目标和初步的 Vulkan 验证实现的实验版预计会在 m69 上上线。

OOP-R

oop-r

从上图看要实现的目标包括:

  1. 将光栅化的 Worker 线程从 Renderer 进程转移到 Viz 进程,Renderer 进程的 RasterInterface 实际上是将序列化后的 Paint Item lists 通过 IPC 发送给 Viz 进程去做光栅化;
  2. Viz 进程的光栅化器使用 Skia 完成光栅化,支持 GL 和 Vulkan 的实现,不再使用 CommandBuffer;

目标一的第一个实验版本目标是 m70,而目标二还仅仅是设计和原型的阶段。

OOP-D + OOP-R

oop-d + oop-r

OOP-D 和 OOP-R 都实现后,唯一会使用 CommandBuffer 就只剩下 WebGL,其它需要访问 GPU API 的部分都已经从 Browser 和 Renderer 进程转移到了 Viz 进程,除了 WebGL 外,其它功能对 GPU 的使用最终都会通过 Skia,包括光栅化和合成,RasterInterface 和 ClientLayerTreeFrameSink 分别对应了光栅化和合成的 Viz Client 接口,供 Viz 的客户端使用。

这次分享没有包括 Unified Compositor 的内容,恐怕光是 OOP-D + OOP-R 要完成一个完整稳定的实现就需要花很长的时间,估计最少也要到明年上半年。

更多关于光栅化的信息

分享后的 Q&A 环节,我问了一直比较关心的关于光栅化的问题,问题是 —— “Firefox 新的渲染引擎 WebRender 看起来会使用 Direct Rasterization(直接光栅化),Chrome 是否也会走同样的路线,或者采用更灵活的混合策略,部分图层使用直接光栅化,部分图层使用异步光栅化?”

虽然 Chromium 的工程师也同样赞同对于 Web App 来说,大部分图层,比如切换的卡片,弹入弹出的侧栏菜单,中间滚动的长列表列表项,它们的内容都并不复杂,只要做好图片预解码或者延迟解码,在支持 GPU 光栅化的条件下采用直接光栅化可以带来更好的动画性能,不过他的回复是考虑到要实现直接光栅化可能的工作量,现在暂时还没有相应的计划。看起来目前的重中之重还是 OOP-D + OOP-R 吧。

相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
目录
相关文章
|
设计模式 供应链
一文教会你如何写复杂业务代码
了解我的人都知道,我一直在致力于应用架构和代码复杂度的治理。 这两天在看零售通商品域的代码。面对零售通如此复杂的业务场景,如何在架构和代码层面进行应对,是一个新课题。针对该命题,我进行了比较细致的思考和研究。
38113 3
|
存储 分布式计算 监控
Java一分钟之-Hazelcast:内存数据网格
【6月更文挑战第17天】**Hazelcast是开源的内存数据网格(IMDG),加速分布式环境中的数据访问,提供内存存储、分布式计算、线性扩展及高可用性。常见挑战包括内存管理、网络分区和数据分布不均。通过配置内存限制、优化网络和分区策略可避免问题。示例展示如何创建Hazelcast实例并使用分布式Map。使用Hazelcast提升性能和扩展性,关键在于理解和调优。**
496 1
|
8月前
鸿蒙开发:单一手势实现多次点击事件
TapGesture点击手势,在实际的开发中,更多的是运用于双击或者需要多次点击的场景,如果仅仅是单次点击,建议大家直接使用onClick即可。
165 1
鸿蒙开发:单一手势实现多次点击事件
|
8月前
|
移动开发 安全 虚拟化
VMware ESXi 8.0e 发布 - 领先的裸机 Hypervisor
VMware ESXi 8.0e 发布 - 领先的裸机 Hypervisor
226 4
VMware ESXi 8.0e 发布 - 领先的裸机 Hypervisor
|
8月前
|
机器学习/深度学习 人工智能 安全
论文推荐:CoSTAast、Transformers without Normalization
由马里兰大学团队提出的CoSTA*,针对多轮图像编辑任务设计了一种成本敏感的工具路径代理。该工作结合大语言模型(LLM)的子任务规划与A搜索算法,构建了一个高效的工具选择路径,不仅降低了计算成本,还提升了图像编辑质量。通过视觉语言模型评估子任务输出,CoSTA能在失败时快速调整路径,并在全新多轮图像编辑基准测试中超越现有最佳模型。
201 0
|
11月前
|
弹性计算 运维 监控
EMR管控平台全面升级:智能化助力客户实现在离线混部和降本增效
本次介绍EMR开源大数据平台2.0的最新特性,基于微服务架构,提供更稳定高效的服务。平台升级主要体现在智能化和Serverless两个方面。智能化功能利用大语言模型提升运维效率,推出一键诊断和根因分析,缩短问题定位时间。全托管弹性伸缩根据业务动态自动调整资源,提高资源利用率。即将推出的EMR on ACS产品形态支持离在线业务混部,进一步优化资源使用,帮助用户实现降本增效。
|
存储 负载均衡 Java
【Spring底层原理高级进阶】微服务 Spring Cloud 的注册发现机制:Eureka 的架构设计、服务注册与发现的实现原理,深入掌握 Ribbon 和 Feign 的用法 ️
【Spring底层原理高级进阶】微服务 Spring Cloud 的注册发现机制:Eureka 的架构设计、服务注册与发现的实现原理,深入掌握 Ribbon 和 Feign 的用法 ️
IntelliJ 中离线包方式安装 Cloud Toolkit
因 JetBrains 插件市场官方服务器在海外,如遇访问缓慢无法下载安装的,请加入文末交流群,向 Cloud Toolkit 产品运营获取离线包安装。 确保 IntelliJ 在 2018.1 或更高版本 第 1 步:打开 Intellij 的 Settings ( Windows下 ) 或 P...
8958 102
|
存储 Prometheus Kubernetes
Etcd几个关键的监控指标
Etcd是一个高可靠、分布式的键值存储系统,Kubernetes的设计基本都是围绕Etcd设计的,可谓成也Etcd,败也Etcd。Etcd负责Kubernetes集群的数据存储,提供了集群数据一致性保证及监测(watch)等机制,是整个集群的核心,但由于Etcd本身的性能限制,制约了Kubernetes集群的规模,当前官宣的最大节点数是5000,但目前原生Kubernetes在生产环境中基本都不超过3000个节点,所以针对Etcd的监控尤为重要。
1351 0
|
人工智能 JSON 移动开发
DingTalk「开发者说」钉钉连接平台,OA审批场景下如何实现系统互通
钉钉连接平台通过简单的低代码配置,帮助企业迅捷实现系统集成和连接,降低集成实施的周期和成本。本文主要介绍在OA审批场景下,如何通过连接平台实现系统互通。
2930 0
DingTalk「开发者说」钉钉连接平台,OA审批场景下如何实现系统互通