1 个不稳定版本
0.1.0 | 2019年4月8日 |
---|
#244 in 性能分析
555KB
21K SLoC
包含 (WOFF 字体,58KB) MaterialIcons-Regular.woff,(WOFF 字体,45KB) MaterialIcons-Regular.woff2,(WOFF 字体,20KB) roboto-v18-latin-300.woff,(WOFF 字体,21KB) roboto-v18-latin-500.woff,(WOFF 字体,20KB) roboto-v18-latin-700.woff,(WOFF 字体,20KB) roboto-v18-latin-regular.woff 以及更多。
视窗玻璃
一个比较相同基元不同实现的基准套件和工具。
用法
Sight Glass 加载多个实现相同测试套件的共享库,运行所有套件中的所有测试,并生成报告以评估实现之间的比较。
评估每个库中的函数如下
tests_config.global_setup(&global_ctx);
test1_setup(global_ctx, &test1_ctx);
test1_body(test1_ctx);
test1_teardown(test1_ctx);
test2_setup(global_ctx, &test2_ctx);
test2_body(test2_ctx);
test2_teardown(test2_ctx);
// ...
testN_setup(global_ctx, &testN_ctx);
testN_body(testN_ctx);
testN_teardown(testN_ctx);
tests_config.global_teardown(global_ctx);
每个共享库必须导出名为 tests_config
的符号
typedef struct TestsConfig {
void (*global_setup)(void **global_ctx_p);
void (*global_teardown)(void *global_ctx);
uint64_t version;
} TestsConfig;
TestsConfig tests_config;
global_setup
和 global_teardown
是可选的,如果不需要,可以设置为 NULL
。
测试至少必须导出名为 <testname>_body
的函数
void testname_body(void *ctx);
此函数包含要基准测试的实际代码。
默认情况下,ctx
将设置为 global_ctx
。但是,也可以为单个测试提供可选的 setup
和 teardown
函数。
void testname_setup(void *global_ctx, void **ctx_p);
void testname_teardown(void *ctx);
有关示例测试套件的示例,请参阅 example/example.c
。
Sight Glass 提取所有符合上述约定的符号以定义和运行测试套件。
为单个测试运行多个函数
单个测试可以评估共享相同上下文的多个主体函数。
这些函数必须命名为 <testname>_body_<bodyname>
。
<bodyname>
可以是任何内容;一个数字ID或者对该函数用途的简要描述。
void testname_body_2(void *ctx);
void testname_body_randomized(void *ctx);
这些函数将保证按照它们的名称在字典顺序中进行评估。
配置
全局配置从 sightglass.toml
文件中加载。这可以通过使用 -c
命令行标志来更改。
配置列出了要基准测试的实现
test_suites = [
{ name = "test1", library_path = "implementation1.so" },
{ name = "test2", library_path = "implementation2.so" }
]
单个测试套件也可以运行一个命令,以便在命令返回非零退出代码时可选地跳过
test_suites = [
{ name = "test1", library_path = "implementation1.so" },
{ name = "test2", library_path = "implementation2.so", guard = ["/opt/sg/guard-scripts/check", "arg1", "arg2"] }
]
文件可以包含的其他属性
-
single_core = <bool>
:设置为true
以在单个CPU核心上运行测试,以获得更准确的结果。这仅在Linux上有效。 -
output = [ { format = "Text|CSV|JSON" [, file = <file>] [, breakdown = <bool>] } ... ]
:如何存储或显示结果。
默认情况下,Text
和 CSV
输出不包括多函数测试中各个函数花费时间的细分。这可以通过将可选的 breakdown
属性设置为 true
来更改。
JSON
输出始终包含此信息。
依赖关系
~2.5–4MB
~72K SLoC