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

在如下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绘制的问题;
MTK平台如何定位显示花屏和界面错乱等绘制异常的问题?的更多相关文章
- 痞子衡嵌入式:降低刷新率是定位LCD花屏显示问题的第一大法(i.MXRT1170, 1280x480 LVDS)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1170上LCD花屏显示问题的分析解决经验. 痞子衡最近这段时间在参与一个基于i.MXRT1170的大项目(先保个密),需要 ...
- 使用Vitamio插件显示花屏
Vitamio是一款 Android 与 iOS 平台上的全能多媒体开发框架,全面支持硬件解码与 GPU 渲染. 使用vitamio进行播放器的开发非常便捷,使用vitamio的解码,自己编写播放器界 ...
- (原)在firefly_rk3288开发板上解决openGL在设置32位色深以后出现花屏的问题
转载请注明出处:http://www.cnblogs.com/lihaiping/p/5567141.html 在做openGL测试的过程中,根据论坛上的帖子,在使用/bin/fbset -a -no ...
- LCD显示异常分析——开机闪现花屏【转】
转自LCD显示异常分析--开机闪现花屏 最近在工作中,有同事遇到LCD开机瞬间会闪现雪花屏的问题,而这类问题都有个共同点,那就是都发生在带GRAM的屏上,同样的问题,在休眠唤醒时也会出现. 其实这类问 ...
- Android8.1 MTK平台 SystemUI源码分析之 网络信号栏显示刷新
SystemUI系列文章 Android8.1 MTK平台 SystemUI源码分析之 Notification流程 Android8.1 MTK平台 SystemUI源码分析之 电池时钟刷新 And ...
- Android使用百度地图出现闪退及定位时显示蓝屏问题
目录 1.Android使用百度地图出现闪退 2.Android使用百度地图定位出现蓝屏问题 1.Android使用百度地图出现闪退 一般情况下出现闪退是在AndroidManifest.x ...
- Android8.1 MTK平台 截屏功能分析
前言 涉及到的源码有 frameworks\base\services\core\java\com\android\server\policy\PhoneWindowManager.java vend ...
- udp 视频包网络传输花屏
视频数据传输在传输层可以选择TCP或者UDP,TCP面向连接,传输中断,发送端是知道的.TCP传输的好处是不丢包,坏处是网络不太好的情况下会越堵越严重.UDP非面向连接,发送端只管发送数据,接收端有没 ...
- 各种RTMP直播流播放权限_音视频_数据花屏_问题检测与分析工具EasyRTMPClient
之前的一篇博客<网络摄像机IPCamera RTSP直播播放网络/权限/音视频数据/花屏问题检测与分析助手EasyRTSPClient>,我们介绍了RTSP流的检测和分析工具EasyRTS ...
随机推荐
- 451 Sort Characters By Frequency 根据字符出现频率排序
给定一个字符串,请将字符串里的字符按照出现的频率降序排列.示例 1:输入:"tree"输出:"eert"解释:'e'出现两次,'r'和't'都只出现一次.因此' ...
- javaweb-JSP action中附件下载的写法
附件下载(包括图片,exl,word)在前台必须给出一个iframe 或者类似于window的窗口,另外,Java文件下载不能通过ajax进行请求,必须添加src属性首选,前台的链接拼接html如下 ...
- suricata.yaml (一款高性能的网络IDS、IPS和网络安全监控引擎)默认配置文件(图文详解)
不多说,直接上干货! 前期博客 基于CentOS6.5下Suricata(一款高性能的网络IDS.IPS和网络安全监控引擎)的搭建(图文详解)(博主推荐) 或者 基于Ubuntu14.04下Suric ...
- laravel 学习
解决办法:没有开启PHP.ini的fileinfo扩展
- fullpagejs实现的拥有header和foooter的全屏滚动demo/fullpage footer
fullpagejs实现的拥有header和foooter的全屏滚动, 技术要点:给section元素加fp-auto-height类, <!DOCTYPE html> <html ...
- LoadRunner10自带的WEBTOURS,无法显示Flights页面问题解决办法
[问题描述] 安装LoadRunner10之后,尝试打开自带的webTours页面学习.第一次可以打开,之后安装了一RFT.Oracle等软件,就出现页面无法显示问题.一直以为是Java的问题,尝试各 ...
- Java的知识储备及面试-几个方面
1.Java本身语法基础 https://github.com/Snailclimb/JavaGuide/blob/master/Java%E7%9B%B8%E5%85%B3/Java%E5%9F%B ...
- OC语言Block 续
OC语言 Block 转载:http://blog.csdn.net/weidfyr/article/details/48138167 1.Block对象中的变量行为 结论: 在block代码块内部可 ...
- 源代码管理SVN的使用
SVN 全称是Subversion,集中式版本控制之王者 SVN 版本控制,需要自己搭建一个管理代码的服务器,提供开发人员,上传和下载 1.基本介绍 使用环境 要想利用SVN管理源代码,必须得有2套环 ...
- zookeeper启动
Zookeeper启动总结1.实际项目用的是Linux,问题不大,本地开发学习用Windows,问题多多.2.Zookeeper3.5.1-alpha,和本地JDK1.7,有冲突,无法正常启动.3.Z ...