来源: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 函数的用途是很有帮助的。

转载于:https://www.cnblogs.com/cnland/archive/2013/01/15/2861319.html

Wayland 源码解析之代码结构相关推荐

  1. jquery源码解析:代码结构分析

    本系列是针对jquery2.0.3版本进行的讲解.此版本不支持IE8及以下版本. (function(){ (21, 94)     定义了一些变量和函数,   jQuery = function() ...

  2. storm源码之storm代码结构【译】

    说明:本文翻译自Storm在GitHub上的官方Wiki中提供的Storm代码结构描述一节Structure of the codebase,希望对正在基于Storm进行源码级学习和研究的朋友有所帮助 ...

  3. 链表node中保存的是什么_Redis源码解析一 --链表结构

    Redis源码剖析-链表结构 1. redis中的链表 在redis中链表的应用非常广泛,例如列表键的底层实现之一就是链表.而且,在redis中的链表结构被实现成为双向链表,因此,在头部和尾部进行的操 ...

  4. yolo源码解析(1):代码逻辑

    一. 整体代码逻辑 yolo中源码分为三个部分,\example,\include,以及\src文件夹下都有源代码存在. 结构如下所示 ├── examples │ ├── darknet.c(主程序 ...

  5. [pytest源码3]-pluggy代码结构与核心设计

    前言 现在我们开始分析,按照demo代码顺序先进行简单分析. 个人拙见,有错请各位指出. 如果的我的文章对您有帮助,不符动动您的金手指给个Star,予人玫瑰,手有余香,不胜感激. GitHub plu ...

  6. YOLOv3源码解析2-数据预处理Dataset()

    YOLOv3源码解析1-代码整体结构 YOLOv3源码解析2-数据预处理Dataset() YOLOv3源码解析3-网络结构YOLOV3() YOLOv3源码解析4-计算损失compute_loss( ...

  7. Block源码解析和深入理解

    Block源码解析和深入理解 Block的本质 Block是"带有自动变量值的匿名函数". 我们通过Clang(LLVM编译器)来将OC的代码转换成C++源码的形式,通过如下命令: ...

  8. vue cli3源码解析

    vue-cli3 源码解析 脚手架代码入口点 从package.json文件中可以看到"vue-cli-service": "bin/vue-cli-service.js ...

  9. Andromeda 源码解析 (同步获取服务)

    Andromeda Andromeda是爱奇艺开源的适用于多进程架构的组件通信框架. github地址: https://github.com/iqiyi/Andromeda 其特点如下: 无需开发者 ...

最新文章

  1. SAP WM LQ02 为供应商寄售库存去K的时候,如果有Open TO单,则不能成功为物料去K?
  2. 使用Zabbix自带MySQL模板监控MySQL
  3. DataGrid Web Control 连载之九
  4. python排名上升_TIOBE:2019年7月全球编程语言排行 Python热度继续上升
  5. element ui 菜单右侧展开_Elementui Vue 菜单固定展开的问题
  6. 如何生成有向图_八十六、从拓扑排序探究有向图
  7. 在互联网上,没有人知道你是一条狗?
  8. Color-UI 简介及使用教程
  9. 【ATSC】ATSC数字测试专用ATSC Frequency
  10. 怎样在Word2010中新建样式
  11. JS网页特效实例:动态关闭页面
  12. 1024购书狂欢节,优惠券送给有需要的伙伴们
  13. 华为设置android系统提醒功能,华为手机短信不提醒怎么办?华为手机短信提醒设置方法...
  14. 挑战杯获奖作品_创新筑梦济南大学“挑战杯”获奖作品展示(二)
  15. 计算机机房管理员需要学什么,机房管理员工作内容
  16. python open encoding=utf-8_Python 文件操作中的读写模式:open(path, '-模式-',encoding='UTF-8')...
  17. Android adb.exe程序启动不起来 具体解决方法
  18. kinect手语_婴儿手语2.0-14个月更新
  19. Linux系统下定时关机命令shutdown
  20. Pip 安装,卸载,更新安装包

热门文章

  1. spring-boot注解详解(三)
  2. vue --- 2.0 编译的实现
  3. vue封装axios接口
  4. []End of 2017OI
  5. linux定时任务启动
  6. iOS学习之iOS沙盒(sandbox)机制和文件操作之NSFileManager
  7. 项目中遇到的ORA error 及解决办法 ---ora-07445
  8. C#多线程学习(六) 互斥对象
  9. 逻辑综合——优化电路
  10. 用OPENCV视觉解数独