BlastBufferQueue 機制介紹

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 IGBPIGraphicBufferProducer 提交;
  • 應用窗口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 之間的聯系,使得顯示各模塊之間自由度更高,利用該機制系統服務的很多邏輯也得到了進一步優化。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容