awtk/docs/optimation.md
2018-10-22 07:04:22 +08:00

36 lines
1.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 优化技巧
* memcpy是最快的贴图方式所以对于不透明的图片尽量保持与Framebuffer一致的格式这样可以直接使用memcpy贴图。
> 比如FrameBuffer的格式是BGR565请定义宏WITH\_BITMAP\_BGR565。
* 如果支持硬件加速,确保(半)透明的图片解码成硬件支持的格式。
> 比如对于PXP/DMA2D硬件加速请定义宏WITH\_BITMAP\_BGRA。
* memcpy的速度对于AWTK非常重要。如果显示速度不理想请测试一下memcpy的速度。
> 如果memcpy的速度不理想请检查一下GUI使用的内存是否配置正确(如cache等)。
* 在窗口动画中,平移动画是最快的动画。所以请优先采用水平平移、垂直平移、底部弹出和顶部弹出几种动画。在没有硬件加速时,不要使用缩放和淡入的窗口动画。
* 在控件动画中,平移动画和值动画是最快的,淡入/淡出其次缩放和旋转是最慢的。PXP/DMA2D加速不能用于加速缩放和旋转所以除非有GPU否则缩放和旋转动画只适用于少量小图片。
* 绘制一帧需要的时间是一个重要指标。
> 可以在src/base/window\_manager.c:window\_manager\_paint\_normal中查看wm->last\_paint\_cost的值。
* 排除法有时能快速定位性能瓶颈。
> 1.怀疑字体渲染太慢? 让lcd\_draw\_glyph直接返回看看效果如何。
> 2.怀疑图片渲染太慢? lcd\_draw\_image直接返回看看效果如何。
> 3.怀疑填充颜色太慢? lcd\_fill\_rect直接返回看看效果如何。
> 4.怀疑硬件加速没有效果,用纯软件渲染试试,对比一下渲染一帧需要的时间。
* 使用3个framebuffer可以避免GUI等待和拷贝能够有效提高帧率有条件时尽量启用。
* 猜测往往是错误的请用函数time\_now\_ms去度量你怀疑的地方。