lcov + gcov-9 性能回归,因为 json 使用

lcov + gcov-9 performance regression because of json usage

我已将我的构建环境编译器从 gcc 5.5.0 更新到 gcc 9.3.0,并注意到覆盖率计算性能下降。

它变得慢了 10 倍(5 小时对整个项目的 48 小时)。

我的调查表明,在 gcov-9 中,他们开始使用 json 格式而不是 intermediate text format。 这会减慢中间 gcov 文件的创建和解析速度。

下面的最小示例:

> time geninfo --gcov-tool gcov-5 test5/CPrimitiveLayerTest.cpp.gcno 
Found gcov version: 5.5.0
Using intermediate gcov format
Processing test5/CPrimitiveLayerTest.cpp.gcno
Finished .info-file creation

real    0m0.351s
user    0m0.298s
sys     0m0.047s

> time geninfo --gcov-tool gcov-9 test9/CPrimitiveLayerTest.cpp.gcno 
Found gcov version: 9.3.0
Using intermediate gcov format
Processing test9/CPrimitiveLayerTest.cpp.gcno
Finished .info-file creation

real    0m8.024s
user    0m7.929s
sys     0m0.084s

我没有找到 return 旧格式的方法,但也许有任何解决方法或补丁。

P.S。我知道 gcov 的参数 --json-format,但 lcov1.15 可以处理 json 格式或所谓的 intermediate text format。同时 gcov9 可以输出 json 格式或所谓的 logfile 格式文件

进一步调查表明,这是因为lcov 1.15使用JSON:PP模块进行json解析。 将 JSON:PP 替换为 JSON:XS(快速解析器)可提供所需的加速。

所以我使用下一个命令到达它:

# patch geninfo to use fast json parser
> sudo sed -i 's/use JSON::PP/use JSON::XS/g' /usr/local/bin/geninfo

# install perl module
> sudo cpan install JSON:XS