2020-08-06 display 各種場(chǎng)景流程 --顯示異常問(wèn)題處理指導(dǎo)手冊(cè) <一>

基本思路

每個(gè)項(xiàng)目QC過(guò)程都會(huì)遇到一定數(shù)量的顯示異常問(wèn)題,這種問(wèn)題常常較難排查原因,因?yàn)闋可娴哪K比較多,想要理清是哪一模塊出問(wèn)題,需要對(duì)整個(gè)display

flow 有所了解。根據(jù)經(jīng)驗(yàn),敝司整理出簡(jiǎn)單的排查flow,可以根據(jù)異常的現(xiàn)象,對(duì)號(hào)入座,初步篩查出哪個(gè)模塊的問(wèn)題,在進(jìn)行深入分析。

首先可找對(duì)比機(jī)平臺(tái)是否復(fù)現(xiàn),如果對(duì)比平臺(tái)復(fù)現(xiàn),請(qǐng)客戶自行找app vendor 解決。

? ? ? 如果對(duì)比機(jī)不復(fù)現(xiàn),可以先勾選Setting -> Developer options -> Disable HW overlays后看問(wèn)題是否復(fù)現(xiàn)。

? ? (1)如果不復(fù)現(xiàn),表示推給GPU疊圖后,顯示正常,就需要找HWC owner進(jìn)一步check 原因,這時(shí)候往往需要HWC log。HWC log 會(huì)打印在ged.log中,cat log 后提供給MTK進(jìn)行分析。

adb shell cat /d/ged/gedlog > ged.log

? ? (2)如果還復(fù)現(xiàn),表示無(wú)論GPU 或者HWC 疊圖,都可以復(fù)現(xiàn)問(wèn)題,需要往前看哪一步異常。通常會(huì)先做BQ dump,BQ dump

是dump 所有給surfaceflinger 前BufferQueue中的數(shù)據(jù),具體哪些flow

經(jīng)過(guò)bufferqueue,后面一章的data flow有show 出,可以參考。

? ? ? 1) dump的圖片異常,如是普通UI,請(qǐng)先check SF_bqdump_all.log 中該圖層對(duì)應(yīng)layer的mConnectedApi訊息,1表示GPU 繪制,2表示用CPU繪制,其余兩種很少碰見(jiàn)。

NATIVE_WINDOW_API_EGL = 1,

NATIVE_WINDOW_API_CPU = 2,

NATIVE_WINDOW_API_MEDIA = 3,

NATIVE_WINDOW_API_CAMERA = 4,

如果mConnectedApi=2,直接找skia onwer分析CPU為何畫錯(cuò);

如果mConnectedApi=1,由于某些app是適配某一種GPU去開(kāi)發(fā)的,所以可以先rename GPU的name看是否正常。如在高通不復(fù)現(xiàn),mali GPU 復(fù)現(xiàn),可以rename成高通的,如下是rename成高通308的CMD,

adb shell setprop debug.gpu.fake_gpu_vendor 'Qualcomm'

adb shell setprop debug.gpu.fake_gpu_renderer 'Adreno (TM) 308'

如果rename成對(duì)比平臺(tái)GPU依然復(fù)現(xiàn),鑒于P版本render

pipeline 改版,由O版本默認(rèn)的HWUI改成skiaGL,所以可以切換成和O版本一樣看問(wèn)題是否復(fù)現(xiàn)。如不復(fù)現(xiàn),找skiaGL owner

check,如復(fù)現(xiàn)就找GPU owner check,GPU

onwer通常會(huì)抓MGD或者pvrtrace或者Gapid去看怎么畫錯(cuò)的,具體如何抓取和如何初步分析,后面第三章會(huì)具體介紹。

切Opengl:adb shell "setprop debug.hwui.renderer opengl"

切回去: adb shell "setprop debug.hwui.renderer ''"

如果是camera 或者video 場(chǎng)景的畫面異常,

有一層layer通常是surfacetexture,這是一個(gè)raw

data,需要用特殊的工具解析出圖片是否正常。如異常,直接找camera或者video owner check。如正常,還要看另外一層layer

surfaceview是否正常,這層layer是surfacetexture 經(jīng)過(guò)GPU

render后的結(jié)果,通常使用glSurfaceview實(shí)現(xiàn)。如果surfaceview正常,就走dump

圖片正常的flow,如果異常,可以先找GPU owner,不過(guò)也有例外,即不是GPU的問(wèn)題,要具體問(wèn)題具體對(duì)待。

2) dump的圖片正常,可以錄screenrecord看錄出來(lái)的視頻是正常,如正常,極有可能是display driver的問(wèn)題,如不正常,找HWC owner check HWC flow。

下面是具體的flow,如果比較熟悉或經(jīng)驗(yàn)比較豐富,也可不按照該步驟check,直接分析即可。


Classic Multimedia Data Path

? ? ? 結(jié)合第一章顯示異常的Guildline,在了解常見(jiàn)場(chǎng)景的data path,這對(duì)于分析問(wèn)題很有幫助。下面介紹幾種常見(jiàn)場(chǎng)景的data flow。由于app寫法不一,這里介紹的是最常見(jiàn)的,如遇復(fù)雜場(chǎng)景,可以通過(guò)抓取systrace了解其flow。

1,?普通UIdata flow

普通UI 的flow 很簡(jiǎn)單,一般情況下硬件加速都默認(rèn)開(kāi)啟,所以大部分UI都是通過(guò)GPU 繪制后給surfaceflinger 疊圖。如果關(guān)掉硬件加速,會(huì)推給CPU skia 繪制,遇到這種問(wèn)題,根據(jù)第一章Guildline下即可知道哪個(gè)模塊有問(wèn)題。


2,?Video播放的data flow

Video 播放的data flow 分為兩種類型,surfacetexture和surfaceview ,兩者的異同點(diǎn)網(wǎng)上有很多,可以自行搜尋了解。

除了做BQ Dump,也可以dump decode output

直接看給surfacefliger或者GPU的surfacetexture是否正常,如果有過(guò)MDP,也可以看MDP input 和 output

是否正常。Dump的方法不同平臺(tái)和android 版本不同,可咨詢相應(yīng)的onwer。

i. surfaceview


ii.?surfacetexure


3,?Camera data flow

? ? ?Camera 場(chǎng)景同video,preview data

分surfacetexture和surfaceview。如video場(chǎng)景一樣,如果不抓BQ dump,可抓camera output

看camera送出來(lái)的數(shù)據(jù)是否正常。注意:camera output 是已經(jīng)過(guò)了MDP以后的數(shù)據(jù)。

i. surfaceview


ii.?surfacetexure


4, Recording

i. Camera Recording

? ? ?這里以camera preview出surfacetexture為例介紹camera 錄屏的data flow,如果是surfaceview,給sf的一路換成3中surfaceview的data flow即可。

? ? ?因?yàn)槭卿浧?,所以這里codec為encode。一般錄出來(lái)的視頻不帶特效,所以camera data直接送給encode 編碼,但是不少三方app 錄出來(lái)的視頻都加了特效,所以會(huì)在過(guò)GPU 給encode。


ii.?Common Recording




i

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者。

友情鏈接更多精彩內(nèi)容