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

[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的各项属性。

时间: 2024-11-05 18:07:36

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

android 部分韩国手机采用KSC5601编码保存联系人,MTK平台手机无法显示联系人姓名

按照spec的明确规定,SIM卡上姓名采用的编码方式应该是gsm8 ucs80 81 82这些. 而韩国部分手机(如较早的功能机器以及galaxy S等)采用的却是KSC5601编码,在spec支持之外. 现在MTK的design则是遵守spec的: 1.在modem层判断到编码方式不在spec之列后,不去上报数据给APP(这就导致了姓名栏位显示为空) 2.spec范围内的编码数据则在解码转化为utf16,用于显示 因此本问题是对比机没有按照spec来做导致的,下面的解决方案是一种的work a

(原)在firefly_rk3288开发板上解决openGL在设置32位色深以后出现花屏的问题

转载请注明出处:http://www.cnblogs.com/lihaiping/p/5567141.html 在做openGL测试的过程中,根据论坛上的帖子,在使用/bin/fbset -a -nonstd 1 -depth 32 -rgba "8/0,8/8,8/16,8/24"命令以后,会出现显示花屏的问题,当然我这边暂时使用的是hdmi输出进行测试的,vga的设置方法,另外一个网友已经发帖贴出了解决方法:http://developer.t-firefly.com/thread

iPhone5S洗澡的时候进水了不开机了怎么办iphone5S进水了怎么办不显示黑屏维修iphone5c进水了怎么办维修多少钱 (认证商家)

为什么网上的价格差距这么大?为什么打电话问的商家报的价格都不一样?哪种几百块钱的屏幕(芯片)能相信吗?淘宝上面的屏幕(芯片)能相信吗?哪里能找到原装的屏幕呢?哪里的维修点才靠谱呢?北京中关村和深圳那边的维修市场能相信吗? 电子城报的二三百能相信吗?原装的配件和仿的价钱相差多少呢? 当您看到了这里,请您选择飞维智能科技有限责任公司(我们用最真挚的态度来为您服务) 我们在保证质量的前提下用最低的价格来为广大客户服务.我们的原则是(少花钱,买放心,保质量,求口碑) 工程师:罗飞报修热线:158 110

直播疑难杂症排查(7)— 黑屏、花屏、闪屏问题

本文是 <直播疑难杂症排查>系列的第七篇文章,我们来重点看看直播中常见的各种黑屏.花屏.闪屏问题. 首先我们要明白,黑屏.花屏.闪屏等问题,可能是推流端的问题,也可能是播放器的问题,遇到这些现象,我们要第一时间用别的播放器(如 VLC,ffplay)试试,如果都出现同样的问题,那么多半是流本身的问题了,反之,则很可能是播放器的问题. 1.  播放黑屏 现象:画面是黑的,没有图像,但是有声音. 1.1 主播端摄像头权限问题 无论 Android 还是 iOS,App 使用摄像头都是需要申请授权的

Android使用百度地图出现闪退及定位时显示蓝屏问题

 目录 1.Android使用百度地图出现闪退 2.Android使用百度地图定位出现蓝屏问题     1.Android使用百度地图出现闪退 一般情况下出现闪退是在AndroidManifest.xml文件中未在application标签中配置 <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="D9Lh8MrrLMUuXdWMU8tRLtDsta6PoaYN" /> 但是

网络摄像机IPCamera RTSP直播播放网络/权限/音视频数据/花屏问题检测与分析助手EasyRTSPClient

前言 最近在项目中遇到一个奇怪的问题,同样的SDK调用,访问海康摄像机的RTSP流,发保活OPTIONS命令保活,一个正常,而另一个一发就会被IPC断开,先看现场截图: 图1:发OPTIONS,摄像机立马断流 图2:但在另一个程序中发OPTIONS保活包又不断流 在大部分的摄像机上,都没什么问题,单单在海康的这一款摄像机中出现了这种问题,不仔细对比命令行中的输出,根本无法确定问题点,图2中的OPTIONS报文中携带了Authorization的头字段,将认证信息都带入了进来,而图1中只是简单将用

MTK平台LCD驱动框架详解(一)

许多学习嵌入式的进入MTK开发平台,很多东西都会感到很陌生.在MTK平台上你可以简简单单几分钟就点亮一块屏.加上MTK快速开发的节奏,也很少有时间自己整理学习.如果不思进取,不加班加点学习.很容易就慢慢--.这也难怪有些人说MTK造就了一批懒人,毁掉了一批工程师.但其实都是基于linux开发,核心的东西都是一样一样的.我刚入行业,在迷茫之际,自己整理跟踪源码.想慢慢找回自己熟悉的感觉,掌握MTK的整体框架.也希望能给有需要的人带来些帮助.好吧!前话说到这,开始正题. 本文肯定有不少地方会出现错误

MTK平台LCD驱动框架详解(二)

前篇博客链接:http://blog.csdn.net/xuan_h/article/details/38519975 上篇博文说到了mtkfb_probe函数,本文在说mtkfb_probe函数之前.我还是打算在从应用程序的调用开始分析下具体的调用过程.这是我们理解驱动框架的核心,而并不是简单的接受. 一.驱动核心Fbmem.c(alps\kernel\drivers\video\Fbmem.c)分析 下面先摘取一部分源码,源码包括:入口函数.fb_fops.fb_fops中的open函数.用

虚拟机安装windows10系统后花屏了如何解决

很多用户既想要体验新版的win10系统,又担心电脑安装win10后会出现未知的故障.这该怎么办呢?其实,我们可以先使用虚拟机来安装体验下Win10系统.不过,部分用户在Virtual中安装Win10后,打开开始菜单后却遇到了界面出现花屏.动态磁贴不能正确渲染等问题.这该怎么办呢?下面,就随小编看看具体解决方法. 出现这一问题的原因可能是动态磁贴的渲染与虚拟机的2D Video.3D加速不兼容.此时可尝试关闭VirtualBox相关选项来解决: 先关闭365bet虚拟机,打开设置(虚拟机属性),然