同步操作将从 HarmonyOS-Cases/Cases 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
SmartPerf Editor是一款PC端桌面应用,通过监测、采集应用运行时FPS、CPU、GPU、Memory、Battery、Network等性能数据,帮助开发者了解应用的性能状况。SmartPerf Editor还集成了DrawingDoc功能,可录制Render Service绘制指令,回放并生成不同图形库文件。通过逐帧逐绘制指令回放,来识别是否存在冗余绘制、是否可以优化绘制指令的数量,从而提升页面绘制性能。本文首先介绍DrawingDoc录制回放原理,然后结合场景示例阐述DrawingDoc在性能实践中的应用。SmartPerf Editor更多信息可查看SmartPerf Editor。
图1 Render Service处理流程图
Render Service详细步骤如下:
图2 场景预览图
@Entry
@Component
struct Index {
@State isVisible: Visibility = Visibility.None;
build() {
Column() {
Button("显示/隐藏Image")
.onClick(() => {
if (this.isVisible == Visibility.Visible) {
this.isVisible = Visibility.None
} else {
this.isVisible = Visibility.Visible
}
})
Stack() {
Row().width('40%').height('40%').backgroundColor(Color.Pink)
Text("Hello World").fontSize(40)
Image($r('app.media.image')).width('100%').height('100%')
}.width('100%').height('100%').backgroundColor(Color.Green).visibility(this.isVisible)
}.width('100%')
}
}
下文基于上述场景介绍SmartPerf Editor中DrawingDoc的使用,以及如何使用Skia Debugger工具网站分析skp文件。
在分析skp文件之前,需要先使用DrawingDoc录制Skia指令,生成skp文件,具体步骤如下:
① 设置skp文件名。.mskp表示生成多帧录像文件,.skp表示生成单帧录像文件。本示例中使用多帧录像文件,skp文件名设置为test.mskp。
② 设置录制帧数。录制帧数不得大于前面设置的录制最大帧。本示例中录制帧数设置为40。
使用Skia Debugger工具网站分析上述获取的mskp文件,具体步骤如下:
打开后可以看到如下界面,这里介绍一下SKP Debugger的常用功能。有关SKP Debugger的详细介绍可查看Skia Debugger。
① SKP文件播放进度条。可循环播放录制的画面,也可以点击选中一帧,查看它的Skia指令和视图。
② Skia指令栏。显示选中一帧上所有的Skia指令。点击单个Skia指令可以查看该指令相关的Skia属性。比如像Image绘制指令里useCubic属性为true,表示该Image组件使用了useCubic算法,可以推测出Image使用了图片插值属性interpolation。使用高图片插值可能会影响图片渲染的速度,开发者可以考虑是否优化。
③ SKP视图。显示当前选中的Skia指令对应的视图。“Image Resources”会显示skp文件用到的所有图片资源。
④ Show Clip。勾选Show Clip后,可以查看单个Skia指令目前执行的位置,会有浅蓝色背景选中效果。Clip表示当前执行的Skia指令绘制区域的左上角和右下角坐标位置。Matrix是3D变换的矩阵信息。
⑤ Skia命令直方图。统计当前帧上每个Skia指令出现的次数。Draw开头的是绘制指令。
对比优化冗余组件前后的skp文件可以看出,去除冗余组件后绘制指令由原来的12个降低到10个,页面需要执行的Skia指令总数由78个下降到63个,Skia指令总量下降19%,有效提升页面的绘制性能。 冗余组件删除前后Skia指令数量对比:
通过上述示例介绍DrawingDoc录制回放,以及使用Skia Debugger分析应用页面是否存在冗余绘制,进而对其进行优化。在实际复杂的应用页面中,如果存在冗余组件,页面绘制时执行额外的Skia指令会加重GPU负载,使页面组件刷新和渲染耗时变长,影响页面性能。使用DrawingDoc和Skia Debugger,可以通过抓取底层Skia指令,逐帧逐绘制指令回放应用页面上各个组件的绘制细节,从而帮助开发者减少应用页面的冗余绘制,有效提升应用绘制性能。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。