企点PC端性能测试——UI卡顿分析

发表于:2018-5-24 16:50

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:付煜    来源:腾讯云

  3、卡顿分析
  选择5次卡顿的任意一次进行分析,打开CPU(Precise)图形,找到QiDian.exe(7320)和3840线程
  简单介绍一下图中表格列的含义:
  New Thread Id: 即将开始执行线程(即将切换到运行状态的线程)Id
  New Thread Stack :即将开始执行线程的调用栈
  Time Since Last :线程处于准备状态和等待状态的时间和
  Count:上下文切换次数
  CPU Usage(in view):CPU耗时
  结合UI Delay图和CPU图形可知,线程3840卡了约0.5 s,其中只有10 ms消耗了CPU,所以这个线程是空闲挂起状态。
  为了查看具体的调用栈,在Trace下配置PDB符号表路径并加载符号表
  将Time Since Last排序后,查看New Thread Stack列,依次展开
  可以很清楚的看到,上图中CCicEvent:Wait进行了1次上下文切换, 将UI线程从533 ms的挂起的状态切换到运行状态
  继续往New Thread Stack的上面看,从图中可以很清楚的看到,企点应用层调用了LoadKeyboardLayoutW方法,消耗了约0.54 s
  找到源代码:
  void functionA(INT id, Event* pEvent, Data* pData)
  {
   ...
  
   hkl=LoadKeyboardLayout(_T("0x0409"),KLF_ACTIVATE);
   if (hkl==NULL)
   {
   return ;
   }
   ActivateKeyboardLayout(hkl,KLF_SETFORPROCESS);
   HWND hWnd;
  
   ...
  }
  通过分析得知,这部分代码是开关输入法,由于工作台拨号盘限制输入的类型为英文,所以在点击按钮时会调用LoadKeybordLayout和ActivateKeyboardLayout装载并激活输入法,导致了UI上的卡顿。
  定位原因后,解决方案:直接在输入法编辑状态过滤,避免开关输入法
  五、总结
  本文以一个案例介绍了如何分析客户端卡顿问题的思路和方法,另一方面,Windows性能问题除了UI卡顿外,还包括内存泄漏,磁盘读取等等,而UIforETW是一个十分强大的工具,对其他的windows性能问题也能够很好的支持,目前对它的了解只是冰山一角,还需要继续的探索和实践。

22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号