Firefox如何带来迄今最稳定的WebVR用户体验
文章相关引用及参考:mozilla
Firefox Quantum是迄今为止能够带来最稳定,最舒适的WebVR浏览体验的Firefox浏览器
(映维网 2017年11月21日)Mozilla已经正式推出了Firefox Quantum,这一版本以更新,更快和更现代的实施取代了部分核心浏览器组件。另外,Quantum还融合了Quantum Flow的主要优化功能,一个无需从零重写一切即可识别和消除主要垃圾信息来源的项目,旨在现代化和改进Firefox Web引擎的基础。
Quantum Flow对WebVR的稳定性有着重要而显著的影响,如视频所示:
视频显示了Snowglobe演示的配置文件执行,同时在后台运行Speedometer以模拟在常规场景中打开多个选项卡的效果。
视频顶部的图表显示了线条出现了一定的间隙,而间隙宽度则表示浏览器无法达到VR系统最后期限的时长。如果这种情况持续足够长时间,头显将尝试将用户带到安全的地方,以防止出现用户头晕和其他烦人的情况。
Firefox 55中的间歇性闪烁对应于顶部图表的间隙处,而VR系统则试图将用户带到安全空间。请注意,Quantum中不会发生这样的情况,体验会更流畅,更舒适。
不同之处在于Quantum Flow消除了浏览器按时向VR系统发送新图像的能力瓶颈。
要理解综合优化如何影响虚拟现实展示,我们有必要了解VR系统的严格要求,以及了解Firefox的通信底层。
1. VR框架
在浏览器中,常规3D内容以60Hz显示。这意味着,网页内容大约有16.6毫秒来模拟世界,渲染场景,并将新图像发送至浏览器合成器进程。如果网页符合16.6毫秒的最后期限,帧速率将是一个恒定的60帧/秒(帧/秒),而且动画将能流程地运行。
上图显示了三个框架,当前框架以绿色突出显示。每条垂直线标记帧的结束,即渲染场景向用户显示的时刻。
VR内容以90Hz显示,因此VR的渲染时间减少到11.1毫秒。在WebVR中,Web内容将渲染的帧发送至专用的WebVR进程。
更重要的是,当位于虚拟现实中时,我们应该考虑以前忽略的一个事实:网页开始呈现VR场景与在头显中显示新图像之间的延迟会直接影响用户的感知。
发生这种情况的原因是:当根据用户头部位置把相机放置在帧开始处之后,场景才会开始渲染;但为了方便用户有足够时间改变方向,场景将稍后显示。这种延迟被称为“运动到光子”延迟,并有可能会导致头晕和恶心。
运动到光子延迟导致现实落后于用户的视点
幸运的是,VR系统可以在不增加延迟的情况下部分修复这个问题:在渲染场景之前扭曲已经渲染的场景,这个过程被称为二次投影(reprojection)。
然而,延迟越低,模拟越准确。因此,为了减少延迟时间,浏览器在显示最后一帧后不会立即开始渲染。
遵循与传统帧相同的方法,运动到光子延迟将持续整个帧
相反,这要求VR系统等待一段时间才能渲染场景。
在帧的开始处等待,同时不改变渲染时间,这能缩短运动到光子的等待时间
如下所述,Web内容和WebVR进程在不同的进程中运行,但它们需要相互协调以渲染场景。在Quantum Flow之前,进程之间的通信带来了成为瓶颈的潜在风险。VR框架中存在两个关键的通信点:一个在等待之后,当WebVR产生网页渲染场景的执行时;;另一个是在渲染之后,当web内容把帧发送至WebVR进程。
任何一个意想不到的延迟都会导致运动到光子延迟达到峰值,而且头显会拒绝帧。
2. Firefox中的进程间通信消息
Firefox将执行组织成多个进程:母进程,其包含浏览器UI,并且可以访问系统资源;GPU进程,专用于与图形显卡通信,并包含Firefox合成器和WebVR进程;以及运行网页内容但不能与系统其他部分通信的数个内容进程。这种进程的分离使得未来有可能提高浏览器的安全性,并且防止一个错误的网页导致整个浏览器崩溃。
母进程,GPU进程和内容进程通过进程间通信(IPC)消息进行相互通信
很多时候,进程需要相互沟通。为此,他们将使用进程间通信(IPC)消息。IPC消息由三部分组成:1)发送请求;2)在接收者中执行任务;3)将结果返回给发起者。消息可以是同步或异步进行。
当其他任何需要通过IPC进行消息传递的尝试必须等到当前通信结束才能进行时,我们才会谈到同步IPC。这包括等待发送消息,完成任务,以及返回结果。
同步IPC意味着较长的等待时间和较慢的队列
同步IPC的问题是,尝试与母进程通信的活动选项卡可能会被阻止发送。这样就需要等到不同通信的结果到达发起者,即使后者是背景选项卡,或者是正在进行的,与试图进行的通信无关的任务。
与之对比,当发送请求,执行任务和返回结果属于独立操作时,我们会谈到异步IPC。新的通信不必等待发送。执行和结果发送可能是无序发生,可以动态地重新设置任务的优先级。
虽然任务执行时间与路程花费时间一样,但这个动画比前一个动画缩短了34%的整体时间。异步IPC无法避免排队,但可以更快地解决它们
在Firefox 55到56,再到57版本的过程中,Quantum Flow的其中一个目标一直都是识别同步IPC并将其转换为异步IPC。
现在,我们已经探讨了同步IPC的性能风险,下面让我们重温一下VR框架内的两个关键通信:一个用于产生令网页开始渲染的执行;一个用于将帧发送至头显;两个通信都分别需要“从GPU到内容”和“从内容到GPU”的IPC。
VR帧中的风险点每帧发生一次,即每秒180次
由于VR帧率的原因,这些关键的风险点每秒发生180次。在Quantum Flow的早期阶段(Firefox 55),除了其他打开的标签页的后台活动之外,高帧速率还增加了正在进行的同步IPC请求的延迟的可能性。等待时间并不少见。在这种情况下,浏览器总是无法达到VR设备的最后期限。
通过不断在Firefox 56和57中优化Quantum Flow之后,正在进行的同步IPC移除减少了意外通信中断的几率,现在浏览器不会再错过VR设备的最后期限。
尽管Quantum Flow不是专为优化WebVR而生,但通过消除通信瓶颈,新组件可以有效促进全局性能的提升。在没有Quantum Flow的情况下,如果新特性和新功能受阻,需要等待不相关的操作完成,则无论浏览器的速度有多快,这一切都不再重要。
因此,Firefox Quantum不仅是2D内容渲染速度最快的Firefox版本,也是迄今为止能够带来最稳定,最舒适的WebVR浏览体验的Firefox浏览器。