相关问题
冷启动首帧完成时延问题分析
411浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何优化HarmonyOS NEXT冷启动响应时延超标的问题?
145浏览 • 1回复 待解决
#鸿蒙通关秘籍#问题场景冷启动响应时延如何进行Trace抓取?
124浏览 • 1回复 待解决
#鸿蒙通关秘籍# 使用NodeContainer如何提前渲染降低响应时延?
88浏览 • 1回复 待解决
#鸿蒙通关秘籍# 如何应对冷启动响应时延超标导致的应用启动卡顿问题?
151浏览 • 1回复 待解决
HarmonyOS 要如何分析性能问题
94浏览 • 1回复 待解决
#鸿蒙通关秘籍# 应用启动时如何优化大桌面时延以减少冷启动响应时间?
67浏览 • 0回复 待解决
关于启动慢问题首帧卡顿分析
424浏览 • 1回复 待解决
#鸿蒙通关秘籍# 如何解决HarmonyOS开发中的图像撕裂和掉帧问题,提高应用性能?
77浏览 • 0回复 待解决
#鸿蒙学习大百科#如何使用Frame分析响应性能?
223浏览 • 1回复 待解决
如何重写TextInput的响应时间,如:onFocus
1875浏览 • 1回复 待解决
更新完鸿蒙之后玩王者荣耀掉帧
8548浏览 • 1回复 待解决
冷启动加载完成时延(离手帧为起始点)
802浏览 • 1回复 待解决
如何分析和优化HarmonyOS NEXT应用在启动、运行和响应速度上的性能?
452浏览 • 0回复 待解决
HarmonyOS冷启动相关性能分析
365浏览 • 1回复 待解决
有没有性能分析工具啊?
920浏览 • 1回复 待解决
鸿蒙开发套件之DevEco Profiler,轻松分析应用性能问题
1650浏览 • 1回复 待解决
HarmonyOS 按钮从用户手指点下到点击响应时间过长
496浏览 • 1回复 待解决
基于原生能力的网络加载性能分析
769浏览 • 1回复 待解决
如何分析组件性能,如何知道自定义组件的布局、渲染等各个阶段的耗时,分析组件性能。
470浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何优化鸿蒙HarmonyOS NEXT应用中的掉帧现象?
128浏览 • 1回复 待解决
指令数问题分析,如何抓取指令数进行问题拆解和分析。
882浏览 • 1回复 待解决
#鸿蒙通关秘籍# 如何在DevEco Studio中进行性能分析?
216浏览 • 1回复 待解决
HarmonyOS参与者的问题分析
7760浏览 • 4回复 待解决
一、测试方式:
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: 高亮选中当前鼠标点击的段(这个比较常用,可以快速标识出这个方法的左右边界和执行时间,方便上下查看)
四、一帧的绘制流程
大概的处理流程: