繪制相關systrace

HwUI繪制

image.png

硬件加速繪制流程

每次硬件加速繪制都會調用Surface.unlockCanvasAndPost
Surface.unlockCanvasAndPost()
-> HwuiContext::unlockAndPost()
->HardwareRenderer::syncAndDraw()
->RenderProxy.cpp ::syncAndDrawFrame()
-> DrawFrameTask::drawFrame()
-> DrawFrameTask::run() \color{red}{(1)打印trace : DrawFrames } \color{red}{vsyncId} 渲染線程開始執(zhí)行繪制操作
-> DrawFrameTask::syncFrameState \color{red}{(2)打印trace : syncFrameState }與主線程同步數(shù)據(jù)腰涧,這個階段在用AutoMutex加鎖糠亩,主線程等待
->CanvasContext::prepareTree \color{red}{(3)打印trace }
-> CanvasContext::draw 通過調用OpenGLPipeline方法開始繪制
->SkSurface::flushAndSubmit() \color{red}{(4)提交繪制請求到GPU}
->SkiaOpenGLPipeline::swapBuffers (CanvasContext::draw()中調用)交換buffer 到SurfaceFlinger\color{red}{(5)trace:eglSwapBuffersWithDamageKHR }
->eglSwapBuffersWithDamageKHR()該方法執(zhí)行完成后,將回調ANativeWindow::queueBuffer進一步回調到Surface::hook_queueBuffer()\color{red}{(6)trace:queueBuffer} 到現(xiàn)在應用進程繪制完成

SurfaceFlinger 合成

image.png
  • handleMessageInvalidate
    -> handlePageFlip獲取Predictor queue 進來的Buffer鸭你,更新可見臟區(qū) mVisibleRegionsDirty
    -> acquireBuffer拿到Buffer后,將Buffer保存在mSlots[item->mSlot].mGraphicBuffer中霉猛。同時更新mFrameNumber和mFence
  • onMessageRefresh
    1. prepareFrame
      和Hwbinder 通信選擇合成策略,需要顯示的數(shù)據(jù)已經送到HWC,且每一層Layer的合成方式已經確定刺下,Buffer也只是將Buffer的handle傳給底層的HWC姥份,并沒有傳Buffer里面的內容,這里創(chuàng)建底層HWCLayer
    2. finishFrame
      finishFrame 主要處理需要GPU合成的layer郭脂,將Client端的Layer渲染到FBTarget(GPU 作為client dequeueBuffer進行渲染,然后通過queueBuffer到BufferQueue,再acquireBuffer 澈歉,將各layer 合成后的數(shù)據(jù)保存在FBTarget展鸡,通過setClientTarget給HWC設置Client端的合成結果,傳給底層進行顯示)
    3. postFramebuffer
      告訴HWC開始做最后的合成了埃难,包括client和device合成
    4. postComposition
      到此一次合成處理完成莹弊,REFRESH處理完成涤久。下一個Vsync到來時,新的一次合成
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末忍弛,一起剝皮案震驚了整個濱河市拴竹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌剧罩,老刑警劉巖栓拜,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異惠昔,居然都是意外死亡幕与,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門镇防,熙熙樓的掌柜王于貴愁眉苦臉地迎上來啦鸣,“玉大人,你說我怎么就攤上這事来氧〗敫” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵啦扬,是天一觀的道長中狂。 經常有香客問我,道長扑毡,這世上最難降的妖魔是什么胃榕? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮瞄摊,結果婚禮上勋又,老公的妹妹穿的比我還像新娘。我一直安慰自己换帜,他們只是感情好楔壤,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著惯驼,像睡著了一般蹲嚣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上跳座,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天端铛,我揣著相機與錄音,去河邊找鬼疲眷。 笑死禾蚕,一個胖子當著我的面吹牛,可吹牛的內容都是我干的狂丝。 我是一名探鬼主播换淆,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼哗总,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了倍试?” 一聲冷哼從身側響起讯屈,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎县习,沒想到半個月后涮母,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡躁愿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年叛本,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片彤钟。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡来候,死狀恐怖,靈堂內的尸體忽然破棺而出逸雹,到底是詐尸還是另有隱情营搅,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布梆砸,位于F島的核電站转质,受9級特大地震影響,放射性物質發(fā)生泄漏辫樱。R本人自食惡果不足惜峭拘,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望狮暑。 院中可真熱鬧,春花似錦辉饱、人聲如沸搬男。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缔逛。三九已至,卻和暖如春姓惑,著一層夾襖步出監(jiān)牢的瞬間褐奴,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工于毙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留敦冬,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓唯沮,卻偏偏與公主長得像脖旱,于是被迫代替她去往敵國和親堪遂。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內容