1# 图形SURFACE组件<a name="ZH-CN_TOPIC_0000001078362030"></a>
2
3-   [简介](#section11660541593)
4-   [目录](#section161941989596)
5-   [编译构建](#section137768191623)
6-   [说明](#section1312121216216)
7    -   [流程说明](#section1551164914237)
8    -   [使用说明](#section129654513264)
9
10-   [相关仓](#section1371113476307)
11
12## 简介<a name="section11660541593"></a>
13
14Surface组件用于管理和传递图形和媒体的共享内存。具体场景包括了图形的送显、合成,媒体的播放、录制等。
15
16Surface的跨进程传输使用IPC传输句柄等控制结构(有拷贝),使用共享内存传递图形/媒体数据(零拷贝)。
17
18**图 1**  surface(即图中的Screen Buffer)在系统架构中的位置<a name="fig584223343312"></a>
19![](figures/surface在系统架构中的位置(绿色部分为surface-buffer).png "surface在系统架构中的位置(绿色部分为surface-buffer)")
20
21## 目录<a name="section161941989596"></a>
22
23```
24/foundation/graphic/graphic_surface
25├── surface             # 框架代码
26│   ├── include         # surface头文件
27│   ├── src             # surface源码
28│   └── test            # 测试代码
29│       ├── fuzztest    # fuzz测试
30│       └── unittest    # 单元测试
31├── interfaces          # 接口
32│   ├── inner_api       # 模块间接口
33│   └── kits            # 对外接口
34├── buffer_handle       # 依赖的部件
35└── scoped_bytrace      # 依赖的部件
36```
37
38## 编译构建<a name="section137768191623"></a>
39
40```
41# 通过gn编译,在out目录下对应产品的文件夹中生成surface.so
42hb build graphic_surface
43```
44
45## 说明<a name="section1312121216216"></a>
46
47### 流程说明<a name="section1551164914237"></a>
48
49以WMS组件和UI组件交互为例,UI为生产者,WMS为消费者。
50
51生产者:从Free队列中获取Buffer,将UI内容绘制到Buffer中,然后将Buffer放到Dirty队列;
52
53消费者:从Dirty队列中获取Buffer并进行合成,然后将Buffer重新放到Free队列中。
54
55**图 2**  Surface轮转流程<a name="fig126141128261"></a>
56![](figures/Surface轮转流程.png "Surface轮转流程")
57
58>![](figures/icon-notice.gif) **须知:**
59>1.  由于使用了共享内存,而共享内存的管理任务在首次创建Surface的进程中,因此需要对该进程格外关注,如果发生进程异常且没有回收处理会发生严重的内存泄漏;
60>2.  Surface一般用作图形/媒体中大块内存的跨进程传输(如显示数据),尤其在使用了连续物理内存的情况下,可以大幅提高传输速率。不建议用在小内存传输的场景,容易造成内存碎片化影响典型场景的性能。
61
62### 使用说明<a name="section129654513264"></a>
63
64可参考轻量图形[WMS组件](https://gitee.com/openharmony/window_window_manager_lite/blob/master/README_zh.md)65
66## 相关仓<a name="section1371113476307"></a>
67
68[图形子系统](https://gitee.com/openharmony/docs/blob/master/zh-cn/readme/%E5%9B%BE%E5%BD%A2%E5%AD%90%E7%B3%BB%E7%BB%9F.md)
69
70[window_window_manager](https://gitee.com/openharmony/window_window_manager/blob/master/README_zh.md)
71