Skia是一个google开源的渲染引擎,不熟悉的可以参考Skia简介。Skia作为一个很多成熟项目用到的底层库,一致很好奇是开发团队是如何快速开发的同时保证产品的质量。
和google其他项目一样,Skia有着完备的自动化测试,同时也是用各种工具来辅助测试。Skia测试包括正确性测试,Fuzzing, sanitizer测试,自动化测试等,以下分别介绍。
正确性测试
Skia的正确性测试主要依赖于一个工具DM,简单来说,这个工具就是把渲染的内容draw到image上面,通过检查image来确保每次画的是一样的。
python3 tools/git-sync-deps
bin/gn gen out/Debug
ninja -C out/Debug dm
out/Debug/dm -v -w dm_output
Fonts and GM Tests
GM目录下的每个test会draw 一个参考图像,可以用来检查是不是有rendering的bug,同时也可以用来检查对于不同配置和平台是否渲染结果不一致。
Fuzzing
使用ClusterFuzz来批量去跑一些sanitizer测试,然后在本地
使用out/ASAN/fuzz -b /path/to/downloaded/testcase
去尝试重现一些bug.
同时也可以调用libfuzzer来进行测试。
MSAN,ASAN, &TSAN
这个是用memory, address and thread sanitizer去测试Skia. 这几个Sanitizer都是clang提供的,在实际中非常好用,定位一些bug非常容易。但他们也有一些局限:
- UBSAN works on Linux, Mac, Android, and Windows, though some checks are platform-specific.
- ASAN works on Linux, Mac, Android, and Windows.
- TSAN works on Linux and Mac.
- MSAN works on Linux[1].
看来一台Linux server是必不可少的。另外的话,尽量使用libc++,而不是系统库。使用libc++可以发现更多问题。
Testing on iOS
Skia 借助http://www.libimobiledevice.org/,
和ios-deploy https://github.com/phonegap/ios-deploy 去使用command line来编译skia.
网友评论