图形学【免费下载链接】skiaSkia is a complete 2D graphic library for drawing Text, Geometries, and Images. See documentation for contribution instructions.项目地址https://gitcode.com/gh_mirrors/ski/skia点击查看免费下载Skia 除了dm、nanobench和viewer三大主力工具外还内置了一批面向 SKP 回放文件、图像比对、动画与矢量模块Skottie/SVG以及模糊测试Fuzzing场景的辅助工具。本文以仓库文档 agents/skills/skia-gn-workflow/references/other_tools.md 为骨架结合tools/、modules/、fuzz/下的源码实现逐一讲解skpinfo、dump_record、skdiff、skottie_tool、svg_tool与fuzz的用途、命令行参数和典型使用场景帮助你快速掌握这批“小而专”的调试利器。一、SKP 工具skpinfo 与 dump_recordSKPSkia Picture是 Skia 序列化绘图指令的容器格式常用于记录回放、测试用例存档与线上故障复现。针对 SKP 的检查与调试Skia 提供了两个互补的工具。1. skpinfoSKP 文件信息检查与截断校验skpinfo用于打印 SKP 文件的元信息版本号、cull rect、内嵌 chunk 标签等。源码位于 tools/skpinfo.cpp其main函数通过CommandLineFlags解析参数核心逻辑是打开文件流后调用SkPicture_StreamIsSKP判定文件是否合法 SKP再逐 chunk 读取标签与大小。基本用法与文档一致out/Debug/skpinfo -i /path/to/file.skp从源码看skpinfo支持以下命令行标志tools/skpinfo.cpp标志短名默认值含义--input-i空要检查的 SKP 文件路径必填--version-vtrue打印 SKP 版本号--cullRect-ctrue打印裁剪矩形cull rect即left,top,right,bottom--flags-ftrue打印文件标志--tags-ttrue打印各 chunk 的标签与大小--quiet-qfalse静默模式出错时不打印信息skpinfo的返回值具有明确的诊断语义tools/skpinfo.cpp0表示成功1表示文件在录制过程中被截断truncated2表示不是合法 SKP3表示遇到非法标签4表示缺少输入文件5表示文件 I/O 错误。如源码注释所述“该工具的主要用途就是检查 SKP 在录制过程中是否被截断”Its main use is just to check if an SKP has been truncated during the recording process因此它常被用于验证回放文件是否完整、是否可以安全交给下游工具处理。2. dump_record转储 SKP 中的绘图命令序列dump_record将 SKP或其他已序列化格式中记录的绘图命令逐条转储为文本便于审查一次回放实际执行了哪些draw*调用。源码位于 tools/dump_record.cpp其工作流程是从文件流反序列化出SkPictureSkPicture::MakeFromStream用SkRecordCanvas重放并收集到SkRecord再通过SkRecordDumper逐条访问并打印命令tools/dump_record.cpp。基本用法out/Debug/dump_record /path/to/file.skpdump_record的完整参数如下tools/dump_record.cpp标志短名默认值含义--skps-r空要转储的 .SKP 文件列表可传多个--match—空按文件名子串过滤要转储的文件--optimize-Ofalse转储前先执行SkRecordOptimize命令合并优化--tile—1000000000模拟平铺tile尺寸用于观察裁剪效果--timeWithCommand—false为 true 时把耗时打印在命令旁否则打印在首列--write-w空把优化后的Picture 写回指定文件输出时命令序列会标记optimized或not-optimizedtools/dump_record.cpp方便对比优化前后的绘图指令差异。对于 GPU 端 SKP 回放产生的SkRecords也可结合 Skia 的 Record 优化机制做性能分析。二、图像比对工具skdiffskdiff用于比较两张图片或两个图片目录并产出差异结果。它常被用作 GM 图像基线回归的辅助比对手段当dm跑出的实际渲染图与基线图不一致时可用skdiff快速定位差异像素。基本用法与文档一致out/Debug/skdiff baseDir comparisonDir [outputDir]其中baseDir是基线目录comparisonDir是待比较目录可选的[outputDir]用于输出差异图与index.html报告。实现位于 tools/skdiff/skdiff_main.cpp该工具会逐对比较同名文件计算逐通道像素差异并生成可视化结果。从usage文本tools/skdiff/skdiff_main.cpp可以整理出skdiff支持的关键选项选项含义--failonresult result比较完成后若有文件对产生指定结果则以非零退出码退出退出码等于产生该结果的文件对数可重复传入--failonstatus baseStatus comparisonStatus若有文件对命中该状态组合则非零退出--listfilenames在 stdout 上按结果类型列出所有文件名--match substring只比较文件名包含该子串的文件不指定则比较全部可重复--nomatch substring与--match相反排除命中子串的文件可重复--nocolorspace比较时忽略图片的颜色空间--nodiffs不写差异图与index.html只在 stdout 输出报告--noprintdirs不打印所使用的目录--norecurse不递归进入子目录--sortbymaxmismatch按最差颜色通道的失配程度排序--sortbymismatch按平均颜色通道失配程度排序--threshold n只报告每个颜色通道差异大于 n 的差异默认 0--weighted按差异像素数加权颜色差异排序--help显示帮助信息上述--failonresult/--failonstatus特别适合接入 CI把skdiff的退出码作为回归判据一旦出现指定差异即可让流水线失败。HTML 报告生成逻辑见 tools/skdiff/skdiff_html.cpp整体组件BUILD 定义见 tools/skdiff/BUILD.bazel。三、模块专用工具skottie_tool 与 svg_toolSkia 的 SkottieLottie 动画与 SVG 两个模块各自提供了独立 CLI 渲染工具适合做批量渲染、逐帧导出与模块验证。1. skottie_tool渲染与检查 Lottie 动画skottie_tool是 Skottie 模块的 CLI 工具用于渲染可选 GPU与逐帧导出 Lottie.json动画。实现位于 modules/skottie/src/SkottieTool.cpp其关键参数定义如下modules/skottie/src/SkottieTool.cpp基本用法与文档一致out/Debug/skottie_tool --input animation.json --writePath outputDir完整参数标志短名默认值含义--input-i无输入的 Lottie.json文件--writePath-w无输出目录帧文件命名为[0-9]{6}.png格式--format-fpng输出格式可选png、skp、mp4或null部分构建仅支持png、skp、null见 modules/skottie/src/SkottieTool.cpp--width—800渲染宽度--height—600渲染高度--threads—0工作线程数0 表示使用 CPU 核心数--gpu-gfalse启用 GPU 光栅化从源码看工具内部还带有 Skottie 日志回调skottie::Logger会把动画解析与渲染过程中的警告/错误信息收集并打印modules/skottie/src/SkottieTool.cpp便于排查 JSON 中不支持的属性或表达式。典型应用包括将设计侧产出的 Lottie 动画批量渲染为帧序列、用--format skp输出 SKP 供其他工具回放检查、或启用--gpu验证 GPU 路径。2. svg_tool用 Skia 渲染 SVG 文件svg_tool使用 Skia 的 SVG 模块将 SVG 文件渲染为 PNG。实现位于 modules/svg/utils/SvgTool.cpp参数极为精简基本用法与文档一致out/Debug/svg_tool --input file.svg --output file.png标志短名默认值含义--input-i无输入的 SVG 文件--output-o无输出的 PNG 文件--width—1024输出宽度--height—1024输出高度参数定义见 modules/svg/utils/SvgTool.cpp。该工具适合做 SVG 兼容性冒烟测试把待验证的 SVG 批量转成 PNG 后再用前面的skdiff与参考图对比从而定位渲染差异。与之相关的工具还有 tools/SvgPathExtractor.cpp可用于从 SVG 中提取路径数据。四、模糊测试工具fuzzSkia 提供了丰富的模糊测试fuzzing基础设施fuzz工具用于在本地输入上运行各种预置 fuzzer是 fuzz/FuzzMain.cpp 的入口程序。基本用法与文档一致# 在某个文件上运行 path_deserialize fuzzer out/Debug/fuzz -t path_deserialize -b /path/to/fuzz/bytes参数含义如下fuzz/FuzzMain.cpp标志短名含义--type-t要运行的 fuzzer 类型例如path_deserialize用fuzz --help可查看全部合法类型--bytes-b输入字节可以是文件或目录若为文件则对该文件 fuzz若为目录则遍历目录--name-n当--type api时指定要 fuzz 的 API 名称--dump-d非空时把image*或skp类型的结果以图片/SKP 形式转储fuzz的用法说明fuzz/FuzzMain.cpp明确指出Usage: fuzz -t type -b path/to/file [-n api-to-fuzz] fuzz -b path/to/file如果省略--typefuzz会根据输入文件名猜测合适的 fuzzer 类型。文档中强调的out/Debug/fuzz --help会列出全部合法类型例如path_deserialize、sksl2glsl、sksl2metal、sksl2pipeline、sksl2spirv、sksl2wgsl、textblob_deserialize等见 fuzz/FuzzMain.cpp并且当构建开启SK_ENABLE_SVG/SK_ENABLE_SKOTTIE时还会额外注册svg_dom与skottie_json两个 fuzzer。除了fuzz主程序仓库还提供了完整的 OSS-Fuzz 集成位于 fuzz/oss_fuzz51 个入口文件它们把 Skia 的各模块Canvas、Gradients、Path、Paragraph、PolyUtils、RegionOp、Triangulation 等包装成标准 fuzz 目标供外部持续 fuzz 平台调用。五、工具的构建与获取以上工具均随 Skia 的 GN 构建系统产出到out/配置名/目录。在已配置好的构建目录如out/Debug下构建单个工具即可ninja -C out/Debug skpinfo dump_record skdiff skottie_tool svg_tool fuzzskottie_tool与svg_tool依赖对应模块构建时需启用 Skottie/SVG 相关构建参数如skia_enable_skottie、skia_use_svg等详见 agents/skills/skia-gn-workflow/references/build_args.mdfuzz与 OSS-Fuzz 目标则受fuzz.gni及对应 GN 配置控制gn/fuzz.gni。需要特别提醒的是本仓库同时提供 Bazel 构建入口BUILD.bazel、WORKSPACE.bazel工具的具体 target 名与 GN 目标可能存在差异请以构建输出目录中实际生成的二进制名为准。六、典型工作流串接示例把上述工具组合起来可以形成一条完整的 SKP/图像/动画调试流水线检查 SKP 完整性out/Debug/skpinfo -i replay.skp返回值1表示文件被截断需要重新录制转储绘图指令out/Debug/dump_record -O replay.skp对比优化前后的命令序列渲染并比对用skottie_tool或svg_tool渲染动画/SVG 帧再用skdiff与参考图对比--failonresult可让差异直接反映为 CI 退出码模糊测试兜底将可疑输入交给fuzz -t type -b input复现崩溃验证修复效果。这套“检查—转储—比对—fuzz”的组合与dmagents/skills/skia-gn-workflow/references/dm_usage.md、nanobenchagents/skills/skia-gn-workflow/references/nanobench_usage.md、vieweragents/skills/skia-gn-workflow/references/viewer_usage.md共同构成了 Skia 开发调试的完整工具箱。赞分享图形学【免费下载链接】skiaSkia is a complete 2D graphic library for drawing Text, Geometries, and Images. See documentation for contribution instructions.项目地址https://gitcode.com/gh_mirrors/ski/skia点击查看免费下载相关推荐miniblink49 内嵌 Skia SampleApp 完全指南幻灯片式渲染调试与 .skp 回放工具miniblink49 内嵌 Skia SampleApp 完全指南幻灯片式渲染调试与 .skp 回放工具 导读 SampleApp 是 Skia 官方随源码前端桌面应用Skia viewer 工具完全指南GM/SKP/SVG 可视化与着色器实时调试Skia viewer 工具完全指南GM/SKP/SVG 可视化与着色器实时调试 viewer 是 Skia 仓库内置的交互式图形查看工具用于可视化 GMs图形学Skia Gold 图像回归管理指南用 Gold 完成渲染图像的基线对比与 Triage 工作流Skia Gold 图像回归管理指南用 Gold 完成渲染图像的基线对比与 Triage 工作流 Skia Gold 是 Skia 项目用于 图像正确性回归检图形学创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
