提供Surface管理、Buffer管理和Fence管理能力
| 文件 | 最后提交记录 | 最后更新时间 |
|---|
| add surface codeowner. Signed-off-by: tttaaaooo <yangtao141@huawei.com> | 5 个月前 |
| 规范整改 Signed-off-by: dingpy <dingpanyun1@huawei.com> Change-Id: I7295f29b80775f039c8e12515b38cee37a8a6844 | 4 天前 |
| Surface知识库 Signed-off-by: dingpy <dingpanyun1@huawei.com> Co-Authored-by: Agent Change-Id: I25d1f5ace8e56fa9c3b89992bf9a31bf09892d98 | 27 天前 |
| 提交README图片 Signed-off-by: 刘瓒 <liuzan9@huawei.com> | 2 年前 |
| sdr 安全告警修改 Signed-off-by: wangchenchuan <wangchenchuan@h-partners.com> | 1 天前 |
| 校验整改 Signed-off-by: dingpy <dingpanyun1@huawei.com> Change-Id: Ib4710b063416122a1d0d6e804510081b4f91dd50 | 17 天前 |
| !1361 merge master into master fix: lpp code sec Created-by: chengwenfeng Commit-by: chengwenfeng Merged-by: openharmony_ci Description: **Description:** 修改规范告警 **Issue number:** https://gitcode.com/openharmony/graphic_graphic_surface/issues/1032?ref=&did=4175394#tid-4175394 **Test & Result:** **CodeCheck:** <table> <tr> <th>类型</th><th>自检项</th><th>自检结果</th> </tr> <tr> <td rowspan="2">多线程相关</td><td>在类的成员变量中定义了vector/map/list等容器类型,且在多个成员函数中有操作时,需要加锁保护</td><td>自检结果:pass</td> </tr> <tr> <td>定义全局变量,在多个函数中都有操作时,需要加锁保护</td><td>自检结果:pass</td> </tr> <tr> <td rowspan="4">内存相关</td><td>调用外部接口时,确认是否对返回值做了判断,尤其外部接口返回了nullptr的情况,避免进程崩溃</td><td>自检结果:pass</td> </tr> <tr> <td>调用安全函数时,如memcpy_s等,是否检查其返回值</td><td>自检结果:pass</td> </tr> <tr> <td>检查函数中是否涉及了内存或资源申请(如文件句柄),注意每个异常退出流程,是否都已经将资源释放(推荐使用RAII)</td><td>自检结果:pass</td> </tr> </tr> <tr> <td>隐式内存分配场景:realpath、ReadParcelable序列化、cJSON相关函数时等,需主动释放或使用智能指针</td><td>自检结果:pass</td> </tr> <tr> <td rowspan="4">校验外部输入</td><td>使用nlohmann:json解析外部输入时,需判断参数类型是否符合预期</td><td>自检结果:pass</td> </tr> <tr> <td>所有外部输入均不可信,需判断外部输入是否直接作为内存分配的大小,数组下标、循环条件、SQL查询等</td><td>自检结果:pass</td> </tr> <tr> <td>外部输入的路径不可信,需使用realpath做标准化处理,并判断路径的合法性</td><td>自检结果:pass</td> </tr> <tr> <td>外部输入包括对外提供的接口,IPC的proxy/stub接口,序列化/反序列化接口等</td><td>自检结果:pass</td> </tr> </tr> <tr> <td rowspan="2">数学运算</td><td>代码中是否混合了加减乘除等运算,需检查是否可能导致整数溢出或符号翻转</td><td>自检结果:pass</td> </tr> <tr> <td>需检查代码是否有高精度数字转换为低精度的操作,如果必须,建议使用C++安全类型转换接口</td><td>自检结果:pass</td> </tr> </tr> <tr> <td rowspan="1">秘钥相关</td><td>如变量临时保存了口令、秘钥等,需要在使用完成后及时清空(内存memset掉)</td><td>自检结果:pass</td> </tr> <tr> <td rowspan="2">权限相关</td><td>作为系统服务对外提供了接口,是否做了权限保护和校验(如需要),只允许申请了权限的应用访问</td><td>自检结果:pass</td> </tr> <tr> <td>内核对外提供了设备节点,是否做了权限保护,只允许特定的系统服务访问</td><td>自检结果:pass</td> </tr> </tr> <tr> <td rowspan="3">内核操作</td><td>如有mmap操作,并使用remap_pfn_range进行地址映射时,校验起始地址是否是用户态输入且没有做合法性校验</td><td>自检结果:pass</td> </tr> <tr> <td>是否有copy_from_user,并对外部输入的数据做了长度校验,以防止缓冲区溢出</td><td>自检结果:pass</td> </tr> <tr> <td>是否有使用copy_to_user,并在返回到用户态时,对数据做了完整初始化,或使用memset清空后再赋值</td><td>自检结果:pass</td> </tr> </tr> </table> See merge request: openharmony/graphic_graphic_surface!1361 | 1 天前 |
| 规范整改 Signed-off-by: dingpy <dingpanyun1@huawei.com> Change-Id: I7295f29b80775f039c8e12515b38cee37a8a6844 | 4 天前 |
| 校验整改 Signed-off-by: dingpy <dingpanyun1@huawei.com> Change-Id: Ib4710b063416122a1d0d6e804510081b4f91dd50 | 17 天前 |
| update: 更新文件 frame_report.cpp 安全告警整改 Signed-off-by: dearsoulsfw <sunfangwen1@h-partners.com> | 1 天前 |
| Surface知识库 Signed-off-by: dingpy <dingpanyun1@huawei.com> Co-Authored-by: Agent Change-Id: I25d1f5ace8e56fa9c3b89992bf9a31bf09892d98 | 27 天前 |
| add oat.xml and license Signed-off-by: shegangbin <shegangbin1@huawei.com> | 2 年前 |
| oat alarm fix Signed-off-by: lihui <lihui359@huawei.com> | 2 年前 |
| 修改README Signed-off-by: 刘瓒 <liuzan9@huawei.com> | 2 年前 |
| 修改README Signed-off-by: 刘瓒 <liuzan9@huawei.com> | 2 年前 |
| 回退 'Pull Request !992 : Acquire、Release、Present线程接入FFRT' | 11 个月前 |
| delegator change Signed-off-by: chenguangG <guochenguang7@h-partners.com> | 6 个月前 |
图形SURFACE组件
简介
Surface组件用于管理和传递图形和媒体的共享内存。具体场景包括了图形的送显、合成,媒体的播放、录制等。
Surface的跨进程传输使用IPC传输句柄等控制结构(有拷贝),使用共享内存传递图形/媒体数据(零拷贝)。
图 1 surface(即图中的Screen Buffer)在系统架构中的位置

目录
/foundation/graphic/graphic_surface
├── surface # 框架代码
│ ├── include # surface头文件
│ ├── src # surface源码
│ └── test # 测试代码
│ ├── fuzztest # fuzz测试
│ └── unittest # 单元测试
├── interfaces # 接口
│ ├── inner_api # 模块间接口
│ └── kits # 对外接口
├── buffer_handle # 依赖的部件
└── scoped_bytrace # 依赖的部件
编译构建
# 通过gn编译,在out目录下对应产品的文件夹中生成surface.so
hb build graphic_surface
说明
流程说明
以WMS组件和UI组件交互为例,UI为生产者,WMS为消费者。
生产者:从Free队列中获取Buffer,将UI内容绘制到Buffer中,然后将Buffer放到Dirty队列;
消费者:从Dirty队列中获取Buffer并进行合成,然后将Buffer重新放到Free队列中。
图 2 Surface轮转流程

须知:
- 由于使用了共享内存,而共享内存的管理任务在首次创建Surface的进程中,因此需要对该进程格外关注,如果发生进程异常且没有回收处理会发生严重的内存泄漏;
- Surface一般用作图形/媒体中大块内存的跨进程传输(如显示数据),尤其在使用了连续物理内存的情况下,可以大幅提高传输速率。不建议用在小内存传输的场景,容易造成内存碎片化影响典型场景的性能。
使用说明
可参考轻量图形WMS组件。
相关仓
图形子系统
window_window_manager
提供Surface管理、Buffer管理和Fence管理能力
定制我的领域