Openharmony性能分析之窗口切换卡顿
背景 Oriole开发者手机升级到5.0,应用切换,最近任务退出,连续点击,窗口明显卡顿1.5s 原因分析---(最近任务点击退出) 分析trace,最近任务退出卡顿,主要阻塞在窗口服务window_manager_service卡顿1.2s 分析log 01-01 08:01:44.870 439
·
一、关键字:
窗口切换;最近任务;卡顿
二、问题描述
设备型号:黄鹂
系统版本:OpenHarmony 5.0
代码版本:OpenHarmony-5.0
问题现象:应用切换,最近任务退出,连续点击,窗口明显卡顿1.5s。
三、原因分析
3.1 正常机制
openharmony应用切换,最近任务退出,连续点击,窗口退出不卡顿。
window_manager_service线程没有明显阻塞:
3.2 异常机制
最近任务退出,连续点击,窗口退出卡顿1.5s.
window_manager_service线程明显阻塞:
3.2.1分析trace,最近任务退出卡顿,主要阻塞在窗口服务window_manager_service卡顿1.2s。
3.2.2 放大systrace发现,window_manager_service 线程loop被WindowVisibilityChangeCallback任务阻塞导致,RemoveWindow任务没有及时执行。
3.2.3 分析代码发现窗口服务端,处理RemoveWindow任务采用同步机制,会被前面任务阻塞。
3.2.4 分析window_manager_service 线程loop为啥被WindowVisibilityChangeCallback任务阻塞?
##通过加trace发现主要阻塞点在内存管理服务OnWindowVisibilityChanged回调耗时1.2s
3.3 分析log
3.3.1 分析日志发现,GetMemMgrService 服务失败导致阻塞1.2s
Memory::MemMgrClient::GetInstance().OnWindowVisibilityChanged(memMgrWindowInfos);
01-01 08:01:46.930 753 900 I C01799/MemMgr: MemMgrClient::GetMemMgrService called
01-01 08:01:47.716 912 912 E C01799/MemMgr: MemMgrClient::GetMemMgrService get service failed
01-01 08:01:47.716 912 912 E C01799/MemMgr: MemMgrClient::SubscribeAppState MemMgrService is null
3.3.2 分析开机log,发现MemMgrService启动失败,主要原因5.0升级,kernel内存还没有适配全。
01-01 08:01:44.870 439 484 E C01799/MemMgr: KernelInterface::WriteToFile file path cannot be canonicalized
01-01 08:01:44.870 439 484 E C01799/MemMgr: Memcg::WriteToFile_ failed. 300 > /dev/memcg/memory.app_score
01-01 08:01:44.870 439 484 E C01799/MemMgr: Memcg::ReadScoreAndReclaimRatiosFromKernel_ file not found. /dev/memcg/memory.zswapd_single_memcg_param
01-01 08:01:44.870 439 484 I C01799/MemMgr: MemcgMgr::SetRootMemcgPara Init rootMemcg reclaim ratios success
01-01 08:01:44.870 439 484 E C01799/MemMgr: ReclaimStrategyManager::Init init failed
01-01 08:01:44.870 439 484 E C01799/MemMgr: MemMgrService::Init ReclaimStrategyManager init failed
01-01 08:01:44.870 439 484 E C01799/MemMgr: MemMgrService::OnStart init failed
四、方案优化
MemMgrService没有起来前,先屏蔽内存管理服务OnWindowVisibilityChanged回调。
更多推荐
已为社区贡献10条内容
所有评论(0)