亚洲精品久久久久久第一页-人妻少妇精彩视品一区二区三区-91国产自拍免费视频-免费一级a在线播放视频正片-少妇天天日天天射天天爽-国产大屁股喷水视频在线观看-操美女骚穴抽插性爱视频-亚洲 欧美 中文字幕 丝袜-成人免费无码片在线观看

一文讀懂直播卡頓優(yōu)化那些事兒 如何解決直播卡頓( 三 )


2.5 再看卡頓的成因經(jīng)過上面的討論 , 我們得出一個卡頓分析的核心理論支撐:渲染機制中的任何流轉(zhuǎn)過程發(fā)生異常 , 均會造成卡頓 。
那么接下來 , 我們逐個分析 , 看看都會有哪些原因可能造成卡頓 。
2.5.1 渲染流程

  1. Vsync 調(diào)度:這個是起始點 , 但是調(diào)度的過程會經(jīng)過線程切換以及一些委派的邏輯 , 有可能造成卡頓 , 但是一般可能性比較小 , 我們也基本無法介入;
  2. 消息調(diào)度:主要是 doframe Message 的調(diào)度 , 這就是一個普通的 Handler 調(diào)度 , 如果這個調(diào)度被其他的 Message 阻塞產(chǎn)生了時延 , 會直接導致后續(xù)的所有流程不會被觸發(fā) 。這里直播建立了一個 FWtachDog 機制 , 可以通過優(yōu)化消息調(diào)度達到插幀的效果 , 使得界面更加流暢;
  3. input 處理:input 是一次 Vsync 調(diào)度最先執(zhí)行的邏輯 , 主要處理 input 事件 。如果有大量的事件堆積或者在事件分發(fā)邏輯中加入大量耗時業(yè)務邏輯 , 會造成當前幀的時長被拉大 , 造成卡頓 。抖音基礎技術同學也有嘗試過事件采樣的方案 , 減少 event 的處理 , 取得了不錯的效果;
  4. 動畫處理:主要是 animator 動畫的更新 , 同理 , 動畫數(shù)量過多 , 或者動畫的更新中有比較耗時的邏輯 , 也會造成當前幀的渲染卡頓 。對動畫的降幀和降復雜度其實解決的就是這個問題;
  5. view 處理:主要是接下來的三大流程 , 過度繪制、頻繁刷新、復雜的視圖效果都是此處造成卡頓的主要原因 。比如我們平時所說的降低頁面層級 , 主要解決的就是這個問題;
  6. measure/layout/draw:view 渲染的三大流程 , 因為涉及到遍歷和高頻執(zhí)行 , 所以這里涉及到的耗時問題均會被放大 , 比如我們會降不能在 draw 里面調(diào)用耗時函數(shù) , 不能 new 對象等等;
  7. DisplayList 的更新:這里主要是 canvas 和 displaylist 的映射 , 一般不會存在卡頓問題 , 反而可能存在映射失敗導致的顯示問題;
  8. OpenGL 指令轉(zhuǎn)換:這里主要是將 canvas 的命令轉(zhuǎn)換為 OpenGL 的指令 , 一般不存在問題 。不過這里倒是有一個可以探索的點 , 會不會存在一類特殊的 canvas 指令 , 轉(zhuǎn)換后的 OpenGL 指令消耗比較大 , 進而導致 GPU 的損耗?有了解的同學可以探討一下;
  9. buffer 交換:這里主要指 OpenGL 指令集交換給 GPU , 這個一般和指令的復雜度有關 。一個有意思的事兒是這里一度被我們作為線上采集 GPU 指標的數(shù)據(jù)源 , 但是由于多緩沖的因素數(shù)據(jù)準確度不夠被放棄了;
  10. GPU 處理:顧名思義 , 這里是 GPU 對數(shù)據(jù)的處理 , 耗時主要和任務量和紋理復雜度有關 。這也就是我們降低 GPU 負載有助于降低卡頓的原因;
  11. layer 合成:這里主要是 layer 的 compose 的工作 , 一般接觸不到 。偶爾發(fā)現(xiàn) sf 的 vsync 信號被 delay 的情況 , 造成 buffer 供應不及時 , 暫時還不清楚原因;
  12. 光柵化/Display:這里暫時忽略 , 底層系統(tǒng)行為;
  13. Buffer 切換:主要是屏幕的顯示 , 這里 buffer 的數(shù)量也會影響幀的整體延遲 , 不過是系統(tǒng)行為 , 不能干預 。


    以上關于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關的問題,請您及時就醫(yī)或請專業(yè)人士給予相關指導!

    「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助: