BBQ 機制介紹:http://www.reibang.com/p/50a30fa6952e
BBQ 原理解讀:http://www.reibang.com/p/cdc60627df90
BBQ 運用場景:http://www.reibang.com/p/384a5cd2e304
一、背景
Android S版本之前妆档,關(guān)于應用顯示方面面臨幾個問題:應用程序在緩沖區(qū)的提交中靈活性不足拨黔,窗口與應用繪制之間無法做到同步漓踢,多進程數(shù)據(jù)無法做到同步杆逗。BLAST 旨在解決這兩個問題午乓,同時簡化 SF 中的模型磅摹。
1沪铭、Android S 版本之前
- 應用繪制緩沖區(qū)僅能通過 BufferQueue IGBP(IGraphicBufferProducer) 提交壮池;
- 應用窗口Geometry的改變僅能通過事務(Transaction)提交;
- 通過合并事務(Transaction.merge())或延遲事務來更改應用窗口間的Geometry杀怠;
- 多進程緩沖區(qū)之間無法做到同步椰憋。
2、Android S 或更高版本
- 應用繪制緩沖區(qū)可以通過事務Transaction.setBuffer()進行提交赔退;
- 應用窗口Geometry的改變可以通過BlastBufferQueue進行提交橙依;
- 應用繪制的緩沖區(qū)和應用窗口Geometry可以進行同步;
- 多應用繪制的緩沖區(qū)之間可以進行同步硕旗。
二窗骑、優(yōu)化場景
1、優(yōu)化SF進程處理邏輯漆枚,將BufferQueue組件架構(gòu)移到客戶端创译,由客戶端自行管理,增強了客戶端緩沖區(qū)操作的靈活性墙基,利用BlastBufferQueue機制软族,通過事務提交圖形緩沖區(qū):
2、提供了應用繪制與WMS窗口管理之間進行同步的渠道残制。
之前的Android版本并不具備多進程之間的緩沖區(qū)與窗口幾何屬性之間的同步立砸,Android 12版本上,利用BBQ機制初茶,將應用準備提交合成的緩沖區(qū)交給事務颗祝,同時可以將事務跨進程傳遞給系統(tǒng)服務,系統(tǒng)服務會根據(jù)需要將任意窗口的幾何修改融入到該事務一并提交恼布,保證在同一幀下生效:
3螺戳、通過System Process控制多個Client Process之間繪制的同步。
系統(tǒng)服務可以是所有進程之間的中介折汞,利用這點温峭,各應用進程之間的圖像緩沖區(qū)也可以通過BBQ機制來進行同步:
三、總結(jié)
BBQ 機制打通了進程已進程字支、Buffer 與 Geometry 之間的聯(lián)系凤藏,使得顯示各模塊之間自由度更高,利用該機制系統(tǒng)服務的很多邏輯也得到了進一步優(yōu)化堕伪。