openkraken / kraken

A web standards-compliant, high-performance rendering engine based on Flutter.
https://openkraken.com
Apache License 2.0
4.93k stars 305 forks source link

测试环境添加 profile track API #870

Open andycall opened 3 years ago

andycall commented 3 years ago

使用场景 | Use case

Kraken 内部针对 layout,paint 以及 I/O 做了很多优化的处理。这些功能使用现有的测试工具很难进行覆盖,可能在后面的某个版本会由于某些变更而坏掉,即使改坏了,也要过很久才会发现,从而导致很长一段时间内拖慢 Kraken 整体的性能。

因此我们必须要有一些可靠的手段,持续保证 Kraken 运行过程中所使用的优化手段能够正常 work。

常规的渲染时间并不可靠,我们需要更精确的数据,能够精确到 RenderObject paint layout 的次数,每个网络资源加载的次数,以及命中 Cache 的次数,Element,RenderObject 销毁的频率等关键性能指标数据。并且我们还可以构造很多的测试用例来模拟各种各样的场景,并能够实时统计到我们所关心的这些关键数据的变化。

提案 | Proposal

在测试环境内,添加 performance track API

监控 Layout,Paint,Element,RenderObject 创建

let div = document.createElement('div');
document.body.appendChild(div);

console.log(div.profile()); // { layoutCount: 1, paintCount: 1 ... } 

监控网络资源

let img = document.createElement('div');
img.src = '...';
document.body.appendChild(img);
console.log(img.profile()); // { imgLoadTime: 20, imgLoadCount: 1 ... }
yuanyan commented 2 years ago

这个不是标准的 API,需要先调研下 W3C 标准里有没有解决类似的 API:

https://w3c.github.io/paint-timing/ https://www.w3.org/TR/resource-timing-1/