BBQ 機制介紹:http://www.lxweimin.com/p/50a30fa6952e
BBQ 原理解讀:http://www.lxweimin.com/p/cdc60627df90
BBQ 運用場景:http://www.lxweimin.com/p/384a5cd2e304
一、背景
Android S版本之前,關于應用顯示方面面臨幾個問題:應用程序在緩沖區的提交中靈活性不足,窗口與應用繪制之間無法做到同步,多進程數據無法做到同步。BLAST 旨在解決這兩個問題,同時簡化 SF 中的模型。
1、Android S 版本之前
- 應用繪制緩沖區僅能通過 BufferQueue IGBP(IGraphicBufferProducer) 提交;
- 應用窗口Geometry的改變僅能通過事務(Transaction)提交;
- 通過合并事務(Transaction.merge())或延遲事務來更改應用窗口間的Geometry;
- 多進程緩沖區之間無法做到同步。
2、Android S 或更高版本
- 應用繪制緩沖區可以通過事務Transaction.setBuffer()進行提交;
- 應用窗口Geometry的改變可以通過BlastBufferQueue進行提交;
- 應用繪制的緩沖區和應用窗口Geometry可以進行同步;
- 多應用繪制的緩沖區之間可以進行同步。
二、優化場景
1、優化SF進程處理邏輯,將BufferQueue組件架構移到客戶端,由客戶端自行管理,增強了客戶端緩沖區操作的靈活性,利用BlastBufferQueue機制,通過事務提交圖形緩沖區:
應用進程提交合成
2、提供了應用繪制與WMS窗口管理之間進行同步的渠道。
之前的Android版本并不具備多進程之間的緩沖區與窗口幾何屬性之間的同步,Android 12版本上,利用BBQ機制,將應用準備提交合成的緩沖區交給事務,同時可以將事務跨進程傳遞給系統服務,系統服務會根據需要將任意窗口的幾何修改融入到該事務一并提交,保證在同一幀下生效:
應用繪制數據交由WMS進行提交
3、通過System Process控制多個Client Process之間繪制的同步。
系統服務可以是所有進程之間的中介,利用這點,各應用進程之間的圖像緩沖區也可以通過BBQ機制來進行同步:
多進程數據同步提交
三、總結
BBQ 機制打通了進程已進程、Buffer 與 Geometry 之間的聯系,使得顯示各模塊之間自由度更高,利用該機制系統服務的很多邏輯也得到了進一步優化。