Ozone-Wayland Architecture翻译

原文链接:Ozone-Wayland Architecture - Google 文档

revision 1 (Jun 2014)

概述

Ozone-Wayland是Chromium Ozone的实现,用于支持Wayland图形系统。 现在可以使用Ozone在Wayland上启用基于Chromium / Blink的不同项目,例如Chrome浏览器,Chrome OS,Crosswalk等。 本文档概述了其背后的架构。

Chromium Ozone

Ozone 是Chromium中的一组类,用于抽象Linux上的不同窗口系统。 它为构建Aura UI框架下的加速表面,输入设备分配和事件处理提供了抽象。

img

以前,在Linux上使用Aura时,所有本机窗口系统代码(X11)都散布在整个Chromium树中。 现在的想法是,ozone将抽象本机代码,并且因为它是一组类工厂,所以它将切换到任何窗口系统。

Chromium Ozone最大的优点之一是它允许从外部实现来自Chromium树的窗口系统细节,这很好,因为在很多情况下它是加载工作的位置。因此,ozone- wayland可以看作是铬的朋友项目,一个赋予另一个不同的特征。除了Ozone- wayland,还有不同的[ozone实现](http://www.chromium.org/developers/design-documents/ozone# toc -Ozone- platform),比如KMS/DRM, caca等等。下图显示了ozone的详细结构:img

图形,窗口和渲染

简而言之,Ozone-Wayland中的图形操作与Aura / Linux上的Chromium并没有太大区别,但是具有不同的窗口系统,即Wayland。截至2014年6月,Ozone-Wayland仅支持通过EGL进行加速绘图(尽管可以实施,但软件绘图不在我们的议程中)。 Ozone-Wayland加载OpenGL ES 2.0库实现(“ libGLESv2.so.2”),供Chromium内部使用它进行绘图。在“桌面光环(desktop aura)”(Chrome浏览器,content_shell等)和“全屏光环(fullscreen aura)”(ChromeOS)目标中,大多数情况下,整个界面只使用一个表面(surface)。表面创建是由Ozone后端实现处理的,在Ozone-Wayland通过Wayland协议发送到OpenGL库的情况下,将负责实际创建这些表面缓冲区。每个surface的单独处理程序然后被交给ozone处理程序,它现在可以处理surface的生命事件,例如对调整大小、定位或分层做出相应的反应。

使用GPU进行的大多数复杂操作(如屏幕外渲染,WebGL和Canvas 2D)可与当前的Ozone-Wayland实现一起使用。 通过VAAPI(“ libva”)对硬件加速视频解码的初步支持已经到位,我们将在未来几天内继续完善它。

输入处理

诸如鼠标,触摸,键盘等输入事件在Wayland合成器中生成,并通过Wayland协议发送到Ozone-Wayland。 Ozone-Wayland依次将这些Wayland本地输入事件转换为Chromium类型(ui :: Event)并分派给Aura。

简而言之,Ozone-Wayland实现了以下功能:

Cursors: 当 a pointer enters a surface,Wayland不会自动更改指针图像,因此Ozone-Wayland会根据运动事件或指针焦点来设置所需的光标。

Keyboard Mapping: 通过X键盘扩展名发生 (XKB)

Virtual Keyboard (VKB) support

Input Methods

Ozone-Wayland and 多进程架构

img

上面的这张图显示了chromium是如何在wayland的Ozone-wayland中工作的。

Chromium有三种重要的进程类型:浏览器进程、渲染进程和GPU进程:浏览器进程是运行UI、管理标签和处理HTTP请求/响应的进程。此外,在Chromium中有多个呈现过程来解析HTML文档、运行JavaScript和呈现web页面。更多关于Chromium多进程架构的细节可以在这里找到(http://www.chromium.org/developers/design-documents/multiprocess-architecture)。Chromium也有一个单一的GPU进程,其中GPU加速操作被发布到图形驱动程序,在ozone-Wayland的情况下,是一个与Wayland compositor通信的single Wayland客户端。请注意,在Ozone-Wayland中,所有的窗口系统操作都是在连接到Wayland合成器之前在Chromium端多路复用到一个单一的Wayland客户端实例——其他方法更倾向于为每个浏览器进程使用多个客户端,或者实现“迷你Wayland合成器”方法。Ozone-Wayland这样做并不是为了方便。但是,我们当前的方法在输入方面确实增加了不必要的开销。我们在GPU进程中接收来自Wayland的输入回调,并通过IPC发送到浏览器进程,理想情况下我们希望在浏览器进程中直接处理回调。不知道如何用目前的Wayland协议解决这个问题。

Ozone Channel and Host:

Gpu进程具有OzoneChannel对象,该对象管理与Browser进程的通信。 浏览器进程维护一个相应的OzoneChannelHost。 我们使用现有的Chromium IPC系统在浏览器和GPU进程之间发送和接收消息(与表面和输入相关)。 OzoneChannelHost处理从GPU进程发送的任何输入或表面事件,即键盘,鼠标,触摸,窗口调整大小。 另外,OzoneChannel处理从浏览器进程发送的与小部件和IME状态有关的消息。

posted @ 2020-12-06 23:45  SuzanneHuang  阅读(526)  评论(0编辑  收藏  举报