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的结果不再被需要的时候。