iOS圖像撕裂和掉幀問題分析

1. 什么是圖像撕裂

圖像撕裂是我們所觀看到的一張圖片發(fā)生上下錯位拾枣,出現(xiàn)了明顯的斷層沃疮,如下圖:


image.png

GPU進行渲染到顯示的過程大致是一下這幾步:
GPU進?渲染->幀緩存區(qū)? ->視頻控制器->讀取幀緩存區(qū)信息(位圖) -> 數(shù)模轉(zhuǎn)化(數(shù)字信號處->模 擬型號) ->(逐?掃描)顯示,
當?shù)谝粠瑘D像掃描到某個位置時梅肤,GPU拿到新的數(shù)據(jù)并存到幀緩沖區(qū)司蔬,這個時候視頻控制器從幀緩沖區(qū)掃描的是新拿到的一幀的圖像,最后就形成了在我們?nèi)庋劭吹降臄鄬蝇F(xiàn)象姨蝴,即我們看到的一張圖片其本質(zhì)是兩張圖片組合而來(舊圖片和新圖片)俊啼,究其原因就是視頻控制器顯示速度大于了GPU處理圖形的速度。

2. 如何解決撕裂

雙緩沖區(qū)

雙緩沖區(qū)是在幀緩存區(qū)中開辟兩個緩沖區(qū)左医,一個緩沖區(qū)通過視頻控制器進行當前幀數(shù)據(jù)的讀取顯示授帕,另一個緩沖區(qū)進行接收下一幀GPU渲染的圖像。兩個緩沖區(qū)都執(zhí)行結(jié)束浮梢,然后再交換緩沖區(qū)跛十。

這里解釋一下什么是垂直同步Vsync

電子槍從上到下逐行掃描,掃描完成后顯示器就呈現(xiàn)一幀畫面秕硝。然后電子槍回到初始位置進行下一次掃描芥映。為了同步顯示器的顯示過程和系統(tǒng)的視頻控制器,顯示器會用硬件時鐘產(chǎn)生一系列的定時信號远豺。當電子槍換行進行掃描時奈偏,顯示器會發(fā)出一個水平同步信號(horizonal synchronization),簡稱 HSync躯护;而當一幀畫面繪制完成后惊来,電子槍回復到原位,準備畫下一幀前榛做,顯示器會發(fā)出一個垂直同步信號(vertical synchronization)唁盏,簡稱 VSync内狸。顯示器通常以固定頻率進行刷新检眯,這個刷新率就是 VSync 信號產(chǎn)生的頻率。雖然現(xiàn)在的顯示器基本都是液晶顯示屏了昆淡,但其原理基本一致锰瘸。


image.png

為了解決撕裂,APPLE引入了: 垂直同步Vsync + 雙緩存區(qū) DoubleBuffering

(1)垂直同步Vsync:幀緩存區(qū)加鎖 防?出現(xiàn)撕裂情況 昂灵。

(2)雙緩存區(qū) DoubleBuffering :就是GPU開辟AB兩個幀緩沖區(qū)避凝,顯示到屏幕上的叫屏幕緩沖區(qū)舞萄,未顯示到屏幕上的叫離屏緩沖區(qū),圖片渲染的時候管削,在離屏緩沖區(qū)渲染倒脓,渲染完成后,兩個緩沖區(qū)交換含思。這樣渲染完成的圖片就可以顯示出一張完整的圖片了崎弃。從而去解決撕裂問題。

執(zhí)行流程就是當A幀緩沖區(qū)拿到第一幀數(shù)據(jù)含潘,給A緩沖區(qū)加上一把鎖饲做,屏幕控制器從A拿到數(shù)據(jù)并逐行掃描完成,A幀緩沖區(qū)解鎖遏弱,并且屏幕控制器指向B幀緩沖區(qū)盆均,B幀緩沖區(qū)加鎖并逐行掃描顯示,在屏幕控制器掃描B幀緩沖區(qū)的時候漱逸,A幀緩沖區(qū)拿到GPU傳過來的新一幀數(shù)據(jù)泪姨,以此類推,解決撕裂問題饰抒。

3. 掉幀

當采用垂直同步Vsync + 雙緩存區(qū) DoubleBuffering時又會產(chǎn)生一個新的問題驴娃,出現(xiàn)了一個新的問題--->掉幀

特別說明:掉幀不是因為丟失了一幀的數(shù)據(jù)就叫掉幀!
掉幀指的是重復渲染同?幀數(shù)據(jù)循集,可以理解為我們所說的屏幕卡頓了唇敞。

撕裂和掉幀的取舍?
如果一旦屏幕產(chǎn)生撕裂咒彤,用戶可能會覺得是手機本身的問題疆柔。
掉幀,則只是會使用戶感覺手機產(chǎn)生了卡頓镶柱,何況掉幀的概率也比較小旷档,并不是時時出現(xiàn)卡頓,所以相比于撕裂歇拆,掉幀相對而言是更可取的鞋屈。

image.png

以60fps舉例,每幀畫面的處理時間大概在16.7ms(1s/60 ≈16.7ms)故觅,當超過這個時間就會出現(xiàn)掉幀厂庇,如上圖:當接收接收Vsync ,由于cpu/gpu還沒處理完圖?數(shù)據(jù)(大于了16.7ms) -> 拿不到FrameBuffer ->這個時候屏幕控制器只能顯示同一幀的數(shù)據(jù),即: 掉幀(重復渲染同?幀數(shù)據(jù))输吏。

為了減少掉幀(注意不是解決权旷,掉幀問題只能盡量的減少,而不是解決贯溅,三級緩沖區(qū)也有可能出現(xiàn)掉幀)拄氯,引入三緩存區(qū)躲查,三緩沖區(qū)是為了充分利用CPU/GPU的空余時間,開辟ABC三個幀緩沖區(qū)译柏,A顯示到屏幕上, B也渲染好镣煮,C再從GPU拿取渲染數(shù)據(jù),當屏幕緩沖區(qū)和幀緩沖區(qū)都弄好了鄙麦,然后視頻控制器再指向幀緩沖區(qū)的另外一個怎静,再顯示,這樣交替黔衡,達到減少掉幀的情況蚓聘,這樣做就比二級緩沖區(qū)多了一個確認的操作。

總結(jié):屏幕卡頓原因:

  1. CPU/GPU 渲染流?線耗時過?->掉幀

  2. 垂直同步Vsync + 雙緩存區(qū) DoubleBuffering 以掉幀作為代價->解決屏幕撕裂

  3. 三緩存區(qū): 合理充分使?CPU/GPU 減少掉幀次數(shù);

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末盟劫,一起剝皮案震驚了整個濱河市夜牡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌侣签,老刑警劉巖塘装,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異影所,居然都是意外死亡蹦肴,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門猴娩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來阴幌,“玉大人,你說我怎么就攤上這事卷中∶” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵蟆豫,是天一觀的道長议忽。 經(jīng)常有香客問我,道長十减,這世上最難降的妖魔是什么栈幸? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮帮辟,結(jié)果婚禮上速址,老公的妹妹穿的比我還像新娘。我一直安慰自己织阅,他們只是感情好壳繁,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著荔棉,像睡著了一般闹炉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上润樱,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天渣触,我揣著相機與錄音,去河邊找鬼壹若。 笑死嗅钻,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的店展。 我是一名探鬼主播养篓,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼赂蕴!你這毒婦竟也來了柳弄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤概说,失蹤者是張志新(化名)和其女友劉穎碧注,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體糖赔,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡萍丐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了放典。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逝变。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖奋构,靈堂內(nèi)的尸體忽然破棺而出骨田,到底是詐尸還是另有隱情,我是刑警寧澤声怔,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布态贤,位于F島的核電站,受9級特大地震影響醋火,放射性物質(zhì)發(fā)生泄漏悠汽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一芥驳、第九天 我趴在偏房一處隱蔽的房頂上張望柿冲。 院中可真熱鬧,春花似錦兆旬、人聲如沸假抄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宿饱。三九已至熏瞄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谬以,已是汗流浹背强饮。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留为黎,地道東北人邮丰。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像铭乾,于是被迫代替她去往敵國和親剪廉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353