1.fence概念:acquireFence、releaseFence、retireFence
每一個layer都有一個acquireFence和releaseFence,每一個系列layes都有一個retirefence,注意這邊的是layers!多個layer。acquireFence用於生產者通知消費者生產已完成,releaseFence用於消費者通知生產者消費已完成。
acquireFence:
禁止顯示一個buffer的內容直到該fence被觸發。HWC HAL的set函式被call到的時候並不知道buffer是否真正ready,acquireFence會在buffer內容真正ready的時候被signal,hwc要負責close acquireFenceFd。
releaseFence:
這個意味著屬於這個layer的buffer已經不在被讀取了,在一個buffer不在被讀取的時候將會觸發這個fence。HWC HAL的set函式return之前並不能保證buffer內容已經使用完畢,不再需要,所以hwc需要負責為這個buffer構建一個fence,releaseFence在set函式return之前被set起來,sf會等待releaseFence被signal之後才會把buffer拿去重用,sf要負責close releaseFenceFd。
retireFence:
這個 scene或者 一系列的layers不再被顯示到顯示器上,當完成了一個frame的顯示後觸發這個fence。retire在這裡是撤退、退休的意思。retireFence需要在這次composition retire後被singal,對於physical display來說,retire的概念是:當下個畫面替換掉本次畫面的時候。對於virtual display來說,retire的概念是:當內容被完整的寫進outbuffer,並可以被read的時候.總的來說就是本次composition的結果不再被需要的時候。