Wayland 源码解析之代码结构

摘要:
Wayland实现的代码组成可以分为以下四个部分:1.Wayland库的核心部分,大部分Wayland协议实现都位于该库中。1) 该工具程序分析Wayland协议文件并生成相应的头文件和代码文件。源代码文件列表:wayland/cursor/wayland cursor。通道/光标/通道光标。cwyland/cursor/os兼容性。cwyland/cursor/os兼容性。hwayland/cursor/xcursor。cwyland/光标/xcursor。h6)通用头文件:wayland/src/wayland-util。hwayland/src/wayland服务器协议。hwayland/src/wayland服务器。hwayland/src/wayland客户端协议。hwayland/src/wayland客户端。hwayland/src/wayland version.hwayland/scr/wayland-egl.h2.egl与egl曲面和Waylandsurface之间的转换有关。代码位于台面上。1) 在libEGL_Wayland中编写mesa/src/egl/drivers/dri2/platform代码。cmesa/src/egl/wayland/waylanddrm/waylanddrm。cmesa/src/egl/wayland/waylanddrm/waylanddrm协议。cmesa/src/egl/wayland/waylanddrm/waylanddrm客户端协议。hmesa/src/egl/wayland/waylanddrm/waylanddrm服务器协议。h2)libwayland eglmesa/src/egl/wayland/wayland regl/wayland egl/waylandegl/wayland egl priv.hmesa/src/egl/wayland/wayland egl/waylan egl.c3.Weston1)合成器合成器的参考实现现在,有很多代码,因此选择了几个关键部分进行分析,如事件处理、图形输出等。

来源:http://blog.csdn.net/basilc/article/details/8074895

获取、编译 Wayland 及其依赖库可参考 Wayland 官方网站的 Build 指南:http://wayland.freedesktop.org/building.html

Wayland 实现的代码组成可以分成以下四部分:

1. Wayland 库

Wayland 中最核心的部分,Wayland 协议的大部分实现位于这里。

1)工具程序(wayland-scanner)

分析 Wayland 协议文件,并生成相应的头文件及代码文件。

源码文件列表:

wayland/src/scanner.c

2)工具库

供其他库、程序使用的工具函数、接口、结构等。

源码文件列表:

wayland/src/connection.c

wayland/src/wayland-util.c

wayland/src/wayland-util.h

wayland/src/wayland-os.c

wayland/src/wayland-os.h

wayland/src/wayland-private.h

3)Client 库

供 Client 使用的桩接口(stub interfaces)及 event listener 结构定义。

源码文件列表:

wayland/src/wayland-protocol.c

wayland/src/wayland-client.c

4)Server 库

Wayland 核心协议的实现。

源码文件列表:

wayland/src/wayland-protocol.c

wayland/src/wayland-server.c

wayland/src/wayland-shm.c

wayland/src/data-device.c

wayland/src/event-loop.c

5)Cursor 库

Cursor 相关功能的实现。不作为重点分析部分。

源码文件列表:

wayland/cursor/wayland-cursor.h

wayland/cursor/wayland-cursor.c

wayland/cursor/os-compatibility.c

wayland/cursor/os-compatibility.h

wayland/cursor/xcursor.c

wayland/cursor/xcursor.h

6)公用头文件

wayland/src/wayland-util.h

wayland/src/wayland-server-protocol.h

wayland/src/wayland-server.h

wayland/src/wayland-client-protocol.h

wayland/src/wayland-client.h

wayland/src/wayland-version.h

wayland/src/wayland-egl.h

2.EGL 相关实现

EGL surface 与 Waylandsurface 之间的互相转换,代码位于 mesa 中。

1)libEGL 中的代码

mesa/src/egl/drivers/dri2/platform_wayland.c

mesa/src/egl/wayland/wayland-drm/wayland-drm.c

mesa/src/egl/wayland/wayland-drm/wayland-drm-protocol.c

mesa/src/egl/wayland/wayland-drm/wayland-drm-client-protocol.h

mesa/src/egl/wayland/wayland-drm/wayland-drm-server-protocol.h

2)libwayland-egl

mesa/src/egl/wayland/wayland-egl/wayland-egl-priv.h

mesa/src/egl/wayland/wayland-egl/wayland-egl.c

3.Weston (WaylandCompositor 的参考实现)

1) Compositor

合成器的一个参考实现,代码较多,选取几个关键部分进行分析,如事件处理、图形输出等。

重点分析的源码列表:

weston/src/compositor.c

weston/src/compositor-drm.c

weston/src/evdev.c

2) Shell (作为Compositor的插件实现)

可以认为是一个窗口管理器或桌面管理插件。

重点分析的源码列表:

weston/src/shell.c

3) Clients

客户端程序,如 Terminal 等。不作为重点分析,仅在分析交互流程时,选取关键代码段进行分析。

4.协议

一系列的 XML 文件,定义 Wayland的核心协议及扩展协议。

核心协议:

wayland/protocol/wayland.xml

mesa/src/egl/wayland/wayland-drm/wayland-drm.xml(很重要,可以认为是核心协议)

扩展协议(不作为重点分析对象):

weston/protocol/desktop-shell.xml

weston/protocol/tablet-shell.xml

另外还有一些单元测试代码,位于 wayland 和weston 的tests目录,主要用来测试通用的 utility 函数,查看这些代码对理解 utility 函数的用途是很有帮助的。

免责声明:文章转载自《Wayland 源码解析之代码结构》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇CentOS7 初始化配置cocosCreator中Protobuf的简单使用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Django——Session源码分析

首先我们导入django.contrib.sessions.middleware这个中间件,查看里面的Session源码 from django.contrib.sessions.middleware import SessionMiddleware 我们可以看到一个类,可以把他分为3部分: class SessionMiddleware(Middlewa...

spring5 源码深度解析----- AOP代理的生成

在获取了所有对应bean的增强后,便可以进行代理的创建了。回到AbstractAutoProxyCreator的wrapIfNecessary方法中,如下所示: 1 protected static final Object[] DO_NOT_PROXY = null; 2 3 protectedObject wrapIfNecessary(Obje...

深入理解Apollo核心机制之配置读取——ConfigService定时扫描

概述 之前我们了解了,客户端会每秒(默认)长轮询Config Service,等待通知,然后去主动拉取配置文件。本文主要跟进Config Service主动轮询ReleaseMessage表,并通知对应监听器的源码,最终终止客户端长轮询的源码。附上之前的链接《深入理解Apollo核心机制之配置读取——前言》 监听器介绍 Config Service中有一些...

mjpgstreamer源码分析

mjpg-streamer是一个很好的开源项目,用来做视频服务器,使用的是v4l2的接口。前面我们说了它的移植过程,但是在某些特定的情况下这个工程不能达到我们的需求,所以我们需要对源码进行修改,或者直接写一个自己的视频服务器。在修改源码或写自己的服务器之前我们分析下这个源码的代码。 这个代码里有三个部分是我们需要掌握的内容,第一是v4l2接口,第二个是so...

源码编译安装nginx及设置开机启动项

1、上传nginx文档;解压到/data目录下,并安装依赖包tar xf nginx-1.20.1.tar.gz -C /data/cd /data/nginx-1.20.1/ && ll依赖关系安装,执行如下:yum -y install zlib pcre pcre-devel openssl openssl-devel 2、自定义安装...

windbg源码驱动调试 + 无源码驱动调试

windbg源码驱动调试   环境信息 虚拟机:win7 32位 windbg:6.12(版本不存在太大影响) 设置过程 windbg与虚拟机连接:链接 配置windbg 配置好双机调试后,点击windbg菜单栏的debug->Break产生中断,控制权交给windbg 中断产生后,点击File->Open Sourse File(Ct...