[DESCRIPTION]
在测试手机各项功能过程中,经常会遇到概率性复现“屏幕画花了,界面画错乱了等绘制异常问题”,而且概率还非常小;
这类问题请不要直接提交eService,而是先请测试人员及工程师保留住测试现场,然后根据此条FAQ的步骤进行排查;
通常贵司提交问题的时候所提供的资料太少,无法直接定位问题,与其提交了eService之后再又去花时间复现,不如在复现问题的当下,就先按照FAQ的步骤做一个初步排查和分析。
如果在排查过程中,分析问题遇到困难,再将已经排查的结果以及排查过程中每一步所生成的资料和复现问题的log一并提交到eService。
这样的话我们就能获得较全面的资料并接着之前的排查结果做进一步分析,不然的话,我们还是需要贵司安排测试人员再花时间去复现,然后按照步骤抓取我们需要的资料,这大大降低了双方的工作效率,所以这条FAQ就是为了减少双方的工作量。
下图是显示相关的流程图:
[SOLUTION]

在如下3个大的check步骤中,请分别按照每一步的操作来进行排查;如果贵司有定位到某一个问题点,请在提eService时,将问题排查过程写清楚,并提供相应的资料到eService附件中,以便MTK做进一步分析。

1.通过DDMS或GAT tool获取异常界面的屏幕截图

[Android 5.0版本之前]DDMS 截图方法如下:Device --> Screen capture,点击Screen capture,就能抓到当前刷到LCM 屏上的那帧数据,或者通过Eclipse中的DDMS工具的screen capture功能,点击操作面板上的“照相机”图标即可。

=>如果屏幕截图是ok的,那么问题点就在LCM driver或timing,具体问题要具体分析。

=>如果屏幕截图not ok,那么你需要进入第2步去获取并查看FrameBuffer中的数据。

[Android 5.0版本及以后]

Android L版本上抓取到的DDMS截图,不是ovl output,而是GPU composer之后的画面。

若要抓取ovl output,可以输入如下命令

adb shell

system/bin/lcdc_screen_cap  /data/fb.bin

2.获取FrameBuffer中的数据

对于android 4.1及以后的版本,通过如下方法抓取FrameBuffer中的数据:

先做如下操作,再dump framebuffer数据

先进入手机中Settings->Developer options->Disable HW overlays

再勾选Disable HW overlays

抓取framebuffer 数据: adb shell cat /dev/graphics/fb0  > /data/fb.bin 然后将fb.bin adb push出来,通过工具查看fb.bin

=>如果此步骤的屏幕截图是ok,那说明是LCM controller做overlay时出了问题。

需要把寄存器值打出来(保存在kernel log中),再抓kernel log做进一步分析

打印寄存器的值:

请在当前刷屏时,将LCM controller寄存器打印出来,寄存器打印命令如下:

adb shell

echo reg:lcd>sys/kernel/debug/mtkfb

这条命令会将LCM controller的寄存器打印到kernel log中

抓kernel log的方式:要么开启mobile log,要么单独用adb命令抓取kernel log;

用adb命令抓取kernel log的方法是:adb shell cat /proc/kmsg > kernel_log.txt

如果分析问题原因是出在这一步,遇到困难时,请将抓取的资料都提供到eService附件中。

=>如果此步骤的屏幕截图not ok,那么就需要进入第3步,抓取layerdump。

3、抓取layerdump

在异常界面下,手机连接usb,执行抓取layerdump,抓取的方法根据android的版本不同而不同,下面会分别列出不同版本的抓取方法:

android 4.0~4.4的版本,分别介绍在windows环境下和linux 环境下如何抓取layerdump

在Windows系统环境下,将如下内容copy到新建文本文件中,然后保存文件为SF_layerdump_all.bat

保持手机连接usb并且在异常界面下,在电脑端双击鼠标执行该脚本(请在Windows系统下执行),就会在脚本所在路径下生成一个文件SF_layerdump_all

将SF_layerdump_all和复现问题的mobile log一并提供到eService附件中。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

SET raw=%1 SET layerdump=%2

IF "%raw%"=="" SET raw=0 IF "%layerdump%"=="" SET layerdump=-1

adb shell setprop debug.sf.layerdump.raw %raw% adb shell setprop debug.sf.layerdump %layerdump% adb shell dumpsys SurfaceFlinger > SF_layerdump_all.log adb shell mkdir /data/SF_dump adb shell mv /data/*.png /data/SF_dump adb shell mv /data/*.i420 /data/SF_dump adb shell mv /data/*.yv12 /data/SF_dump adb shell mv /data/*.RGBA /data/SF_dump adb shell mv /data/*.RGB565 /data/SF_dump rmdir /S /Q SF_layerdump_all md SF_layerdump_all move SF_layerdump_all.log  SF_layerdump_all adb pull /data/SF_dump SF_layerdump_all/ adb shell rm /data/SF_dump/*

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

注意:如果异常画面是动态的,不是那种静止不动的画面,那么可以尝试多执行几次layerdump,尽量争取能抓到发生问题时的画面的layerdump

如果不方便在Windows系统下抓取layerdump,那么就在linux系统的Terminal 下,按照如下步骤执行下面的指令:

在复现问题前,下如下这条命令,做设置并打开layerdump的开关:

adb shell setprop debug.sf.layerdump.raw 1

adb shell setprop debug.sf.layerdump -1

在即将开始复现问题前,先将下面的指令准备好,在复现问题的画面,敲回车执行这条命令,就是做layerdump的动作,

如果复现问题的画面是动态的,请多下几次这条命令,尽量把复现问题的画面dump下来

adb shell dumpsys SurfaceFlinger >SF_layerdump_all.log

执行了上面的第3条命令之后,会在手机的/data/SF_dump目录下生成一些xxx.png或*.i420,*.yv12,*.RGBA,*.RGB565等文件,请把data/SF_dump这个目录pull出来提供给我们,还有SF_layerdump_all.log文件也一并需要提供。

android 5.0及以后的版本,在windows环境下如何抓取layerdump

在Windows系统环境下

若异常画面是静态稳定的,将如下内容copy到新建文本文件中,然后保存文件为SF_bqdump_L.bat

@echo off

adb shell rm /data/SF_dump/* adb shell setprop debug.bq.dump "@surface"

adb shell "dumpsys SurfaceFlinger" > SF_bqdump_all.log

adb shell setprop debug.bq.dump ""

rmdir /S /Q SF_bqdump_all md SF_bqdump_all move SF_bqdump_all.log SF_bqdump_all adb pull /data/SF_dump SF_bqdump_all/ adb shell rm /data/SF_dump/*

echo "Please view dump files in folder ‘SF_bqdump_all‘" pause

若异常画面是一闪而过的,则需用如下脚本dump画面刷新过程的几十帧画面,下面是设置30帧:SF_cont_bqdump_L_30.bat

复现问题后,双击执行下面的脚本,接着按命令行提示“按电脑任意键继续”,然后等几秒钟,系统会自动dump复现过程的所有帧到指定目录

@echo off

adb shell rm /data/SF_dump/*

:: Modified this line to set surface count,default is 30 adb shell setprop debug.bq.dump "@surface#30"

adb shell "dumpsys SurfaceFlinger > /dev/null"

pause

adb shell setprop debug.bq.dump "@surface"

adb shell "dumpsys SurfaceFlinger" > SF_bqdump_all.log

adb shell setprop debug.bq.dump ""

rmdir /S /Q SF_bqdump_all md SF_bqdump_all move SF_bqdump_all.log SF_bqdump_all adb pull /data/SF_dump SF_bqdump_all/ adb shell rm /data/SF_dump/*

echo "Please view dump files in folder ‘SF_bqdump_all‘" pause

注意:抓取到layerdump后,请将layerdump的所生成的文件SF_layerdump_all(在Linux环境下就是手机的data/SF_dump目录和SF_layerdump_all.log文件)和复现问题的mobile log一并提交到eService上来。

抓到layerdump之后,根据layerdump的结果,再做下一步分析;

如果layerdump看到的目标画面not ok,则参考如下FAQ做进一步确认,看是app本身的问题还是UI framework绘制的问题;

[DESCRIPTION]
在遇到界面显示异常等问题的时候,需要排查界面异常是由哪个处理过程所引起的,画面显示的过程,大致上可以分为:
1、上层app定义view 大小、位置,和画面对应的layout;
2、View system处理view的这些属性,计算view tree的大小、位置、处理view的绘制逻辑;
3、native framework处理绘图指令,未开启硬件加速绘制时,是使用Skia图形库来执行绘图指令;如果开启了硬件加速,则是GPU来执行绘图指令
当前这个FAQ就是要提供方法来抓取View hierarchy,排查第1、2这两个步骤是否出现问题
[SOLUTION]
抓取方法是:
1、将手机用usb连接至电脑,确保手机软件版本是eng load,或者userdebug load,才可以抓View hierarchy,如果是user load,且没有打开对应的debug权限,则不可以抓;
2、打开Android sdk提供的Android Debug Monitor工具或Eclipse,进入DDMS这个视图界面;
3、打开Devices显示界面,在Devices的进程列表上方的那一排button中,找到最右边的button,将鼠标悬浮在button上方,显示的文字是"Dump View Hierarchy for UI Automator";
4、在复现了画面显示异常的界面,保持画面不动,点击第3步中的那个button开始dump,完了之后系统会自动打开所dump到的文件,文件名是dump_xxx.uix,xxx通常是一串数字;
5、将鼠标移到文件名上,会悬浮显示出此文件的存放 folder 名称及路径,folder 命名格式为: uiautomatorviewer_xxxxx,xxxxx也是一串数字,将此folder打包提供给我们分析即可;
如果是自己分析该文件,那么直接在已经打开了的文件中,查看异常位置处的view的状态和属性是否正确即可,将鼠标移动到view的位置时,view会被红色虚线框highligh出来,右边的属性列表中会显示出该view的各项属性。

MTK平台如何定位显示花屏和界面错乱等绘制异常的问题相关推荐

  1. linux服务器黑屏_IBM服务器安装、进入Linux系统时显示花屏、黑屏的解决办法

    IBM服务器安装.进入Linux系统时显示花屏.黑屏的解决办法 在Linux安装时不能正确识别或者装上显卡驱动,导致在安装或者启动时显示黑屏.花屏,这时我们可以使用VESA模式进入Linux的图形话界 ...

  2. 两个问题:进入ubuntu需要很久,安装gtx2060显卡后进入ubuntu一直显示“花屏/黑屏”

    环境:ubuntu18.04 第一个问题描述:ubuntu开机时间太久, 一直停留在开机界面,每次进入都需要等待10分钟左右 解决办法:主要是参考了博主"缘来缘"分享的链接,原文链 ...

  3. android 窗口切换花屏,分享Android4平台二级页面滚动花屏问题的解决方案v1.0.0

    环境:小米2S,Android 4.1.1 因为刚升级的新版HBuilder,Android5的webview闪屏.花屏问题也基本都解决了,竟然小米2S的Android4会出现花屏觉得不可思议.不知道 ...

  4. 使用Vitamio插件显示花屏

    Vitamio是一款 Android 与 iOS 平台上的全能多媒体开发框架,全面支持硬件解码与 GPU 渲染. 使用vitamio进行播放器的开发非常便捷,使用vitamio的解码,自己编写播放器界 ...

  5. 计算机开机显示花屏,导致电脑开机花屏出现的几种原因

    电脑花屏是比较常见显示故障,大部分电脑屏幕故障全部由显示卡本身引起的,可能是显示器与显示卡的连线松动.显示卡损坏或者超频造成的,其他可能的原因是电脑温度过高或灰尘过多等原因引起的.花屏时首先要检查的就 ...

  6. 服务器03系统在win10的电脑花屏,win10玩吃鸡电脑显示花屏怎么办-修复win10玩吃鸡电脑显示花屏的方法 - 河东软件园...

    说到吃鸡想必大家都听说过吧?最近绝地求生这款游戏异常的火爆,很多用户都加入了游戏的行列.近日有用户向小编询问,在win10系统中运行绝地求生游戏的时候出现花屏怎么办?出现花屏的情况很多,若是无论运行什 ...

  7. 计算机开机显示花屏,电脑开机出现花屏乱码怎么办? 解决电脑乱码问题

    花屏时全是乱码. 乱码就是:那些英文字母全变了样,本来是个A的成了其它的字母,还有就是中间一线的字母本来是黑底白字的,结果成了黑底红字.CMOS里面更是乱了,不仅字母乱七八糟,而且边框的线也成了字母, ...

  8. 计算机开机显示花屏,电脑开机乱码花屏故障,动动手或就解决

    原标题:电脑开机乱码花屏故障,动动手或就解决 电脑开机时乱码花屏,是什么个情况?请欣赏: 看了这些图我相信大家已经了解了我说的电脑开机出现乱码花屏是什么了. 我想很多朋友可能都遇到过这样的状况,电脑在 ...

  9. h264视频解码显示花屏问题集

    1. 收到服务器过来的视频码流,使用stream eye播放正常,使用自己的设备来解码播放时,出现严重的花屏. 原因:码流中有部分帧,如I帧的slice数目过大,大于解码器设定的最大slice数目,解 ...

最新文章

  1. 深入理解ceph-disk activate 源码逻辑
  2. day09_读写分离_组件介绍
  3. Android DDMS应用
  4. How is javascript asynchronous AND single threaded?
  5. SAP HANA CLOUD和aws一个实际项目中的性能比较
  6. python 类、模块、包的区别
  7. 2020年10月抖音小红书美妆营销报告
  8. matlab编译dll vb调用,用matlab的deploytool生成DLL,VB无法调用的问题
  9. Momenta 陈凯:从人才角度看 L4 无人驾驶的实现 | AI 研习社职播间第 4 期(附 Momenta 招聘解读)...
  10. Java Web之MySQL在项目中的使用
  11. 无锁并发和无等待并发的对比分析
  12. Qt 实现Windows系统Win10 c++音量调节
  13. 来一起学怎么攻击服务器吧!!!
  14. 【文件处理】python 在线预览文件_OFFICE 文档转换为html在线预览
  15. 计算机科学与技术陈梦如,淮南师范学院马克思主义学院文件.doc
  16. 你问我答:小匠,如何像你一样,做一个订阅号挣它 100 W?
  17. 以太坊数字资产的发行和流通:以太坊上的数字资产定义、ERC 20代币合约标准、ERC 20标准接口、ERC 721代币合约标准、
  18. 台式计算机硬盘的安装位置,台式电脑硬盘怎么安装_台式电脑硬盘安装方法-win7之家...
  19. dns 解析,一个域名解析到多个ip地址
  20. elasticsearch的使用

热门文章

  1. 让Windows系统 强制关机的方法 shutdown.....
  2. 原来JAVA对象转JSON格式的字符串如此简单,返回来暂时不会做,留下纪念下
  3. Windows应用程序简介
  4. c语言课时作业,奥鹏东大21年春学期《C语言及程序设计X》在线平时作业题目及答案...
  5. Origin学习分享——图形绘制
  6. python爬虫基本框架代码(入门)
  7. 一款“智能”激光雷达的量产,智能汽车驶入中国时代
  8. 微型计算机原理及应用马义德,微型计算机原理及应用.doc
  9. 你还不知道中国有多少人口?
  10. 人生之路 — 如何处理矛盾