响应时延/掉帧性能问题分析

响应时延/掉帧性能问题分析

HarmonyOS
2024-06-13 10:59:43
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
makeer

一、测试方式:

1、

响应时延的测试方式

1. 准备好测试手机,确认手机帧率(60/90/120Hz)

2. 再用一台手机打开相机,使用慢动作模式,切换到8倍速

3. 测试机在负一屏内中速上下滑动,完成一次测试

4. 重复测试三组数据,取平均

5. 打开录屏,计算响应时延

响应时延统计:手指滑动屏幕第二帧开始,页面开始滑动第一帧为结束。

2、

掉帧的测试方式

1. 准备好测试手机,确认手机帧率(60/90/120Hz)

2. 再用一台手机打开相机,使用慢动作模式,切换到8倍速

3. 测试机在负一屏内中速上下滑动,完成一次测试

4. 数帧,根据不同的设备帧率,掉帧判断条件:

60HZ设备,4帧视频中画面不动。

90HZ设备,3帧视频中画面不动。

120HZ设备,2帧视频中画面不动。

3、

测试工具

1. 数帧播放器

2. 在录屏的同时,用脚本抓取trace文件,用于对时延进行分析。

二、运行状态介绍

· trace 会用不同的颜色来标识不同的线程状态, 在每个方法上面都会有对应的线程状态来标识目前线程所处的状态,通过查看线程状态我们可以知道目前的瓶颈是什么, 是 cpu 执行慢还是因为 Binder 调用, 又或是进行 io 操作, 又或是拿不到 cpu 时间片。

· 线程状态主要有下面几个

1、运行中(Running)

只有在该状态的线程才可能在 cpu 上运行。而同一时刻可能有多个线程处于可执行状态,这些线程的 task_struct 结构被放入对应 cpu 的可执行队列中(一个线程最多只能出现在一个 cpu 的可执行队列中)。调度器的任务就是从各个 cpu 的可执行队列中分别选择一个线程在该cpu 上运行

作用:我们经常会查看 Running 状态的线程,查看其运行的时间,与正常情况做对比,分析变慢的原因:

1.是否频率不够?

2.是否跑在了小核上?

3.是否频繁在 Running 和 Runnable 之间切换?为什么?

4.是否频繁在 Running 和 Sleep 之间切换?为什么?

5.是否跑在了不该跑的核上面?比如不重要的线程占用了大核

2、可运行(Runnable)

线程可以运行但当前没有安排,在等待 cpu 调度

作用:Runnable 状态的线程状态持续时间越长,则表示 cpu 的调度越忙,没有及时处理到这个任务:

1.是否后台有太多的任务在跑?

2.没有及时处理是因为频率太低?

3.没有及时处理是因为被限制到某个 cpuset 里面,但是 cpu 很满?

4.此时 Running 的任务是什么?为什么?

3、休眠中(Sleep)

线程没有工作要做,可能是因为线程在互斥锁上被阻塞,也有可能是在等某些操作返回。

一般是在等事件驱动

4、不可中断的睡眠态 (Uninterruptible Sleep)

线程在I / O上被阻塞或等待磁盘操作完成,一般底线都会标识出此时的Blocked Function:

作用:这个一般是标示 io 操作慢,如果有大量的橘色不可中断的睡眠态出现,那么一般是由于进入了低内存状态,申请内存的时候触发 pageFault, linux 系统的 page cache 链表中有时会出现一些还没准备好的 page(即还没把磁盘中的内容完全地读出来) , 而正好此时用户在访问这个 page 时就会出现

5、不可中断的睡眠态(Uninterruptible Sleep Non-IO)

线程在另一个内核操作(通常是内存管理)上被阻塞。

作用:一般是陷入了内核态,有些情况下是正常的,有些情况下是不正常的,需要按照具体的情况去分析

三、查看方式

CPU Slice

快捷键的使用可以加快查看 Systrace 的速度,下面是一些常用的快捷键

W: 放大 Systrace , 放大可以更好地看清局部细节

S: 缩小 Systrace, 缩小以查看整体

A: 左移

D: 右移

M: 高亮选中当前鼠标点击的段(这个比较常用,可以快速标识出这个方法的左右边界和执行时间,方便上下查看)

四、一帧的绘制流程

大概的处理流程:

分享
微博
QQ
微信
回复
2024-06-13 21:24:50
相关问题
更新完鸿蒙之后玩王者荣耀
7023浏览 • 1回复 待解决
有没有性能分析工具啊?
293浏览 • 1回复 待解决
基于原生能力的网络加载性能分析
236浏览 • 1回复 待解决
HarmonyOS参与者的问题分析
6293浏览 • 4回复 待解决
List组件性能问题,有人知道吗?
589浏览 • 1回复 待解决
后端查询数据库的性能问题
2424浏览 • 1回复 待解决
应用性能问题定位和优化指导
1060浏览 • 1回复 待解决
imageReceiver拿到的数据长度
370浏览 • 1回复 待解决
鸿蒙中AbilitySlice怎么finish
7607浏览 • 2回复 待解决
Xcomponent绘图流程分析
455浏览 • 1回复 待解决
有谁知道是否支持动画
722浏览 • 1回复 待解决
鸿蒙中ScrollView如何禁滚动事件
5868浏览 • 2回复 待解决
什么是PolarDB的空间分析
2716浏览 • 1回复 待解决
分析埋点无法正常上报
390浏览 • 1回复 待解决