Android图形图像显示-Display-Surfaceflinger-Fence-DRM-SKIA/OpenGL/Vulkan
Android图形显示系统——概述
https://blog.csdn.net/jxt1234and2010/article/details/44164691
Android图形显示系统——一张图片的显示流程
https://blog.csdn.net/jxt1234and2010/article/details/50524213
Android图形显示系统——上层显示1:界面绘制大纲
https://blog.csdn.net/jxt1234and2010/article/details/47326411
Android图形显示系统——下层显示1:基础知识与相关文件
https://blog.csdn.net/jxt1234and2010/article/details/44503019
Android图形显示系统——上层显示2:硬件加速实现
https://blog.csdn.net/jxt1234and2010/article/details/48649323
Android图形显示系统——下层显示2:图形内存的申请与显示
https://blog.csdn.net/jxt1234and2010/article/details/44507197
Android图形显示系统——上层显示2:硬件加速实现
Android图形显示系统——下层显示3:窗口系统
https://blog.csdn.net/jxt1234and2010/article/details/44821227
Android图形显示系统——下层显示4:图层合成上(合成原理与3D合成)
https://blog.csdn.net/jxt1234and2010/article/details/46057267
Android图形显示系统——下层显示4:图层合成下(硬件合成器)
https://blog.csdn.net/jxt1234and2010/article/details/46407383
DRM(Direct Rendering Manager)学习简介
https://blog.csdn.net/hexiaolong2009/article/details/83720940
DRM (Direct Rendering Manager) 的发展历史
https://blog.csdn.net/hexiaolong2009/article/details/88075520
DRM应用程序进阶 (atomic-crtc)
https://blog.csdn.net/hexiaolong2009/article/details/87392266
DRM应用程序进阶 (atomic-plane)
https://blog.csdn.net/hexiaolong2009/article/details/87824581
DRM应用程序进阶 (Property)
https://blog.csdn.net/hexiaolong2009/article/details/87211230
最简单的DRM应用程序 (plane-test)
https://blog.csdn.net/hexiaolong2009/article/details/84934294
最简单的DRM应用程序 (page-flip)
https://blog.csdn.net/hexiaolong2009/article/details/84674127
最简单的DRM应用程序 (double-buffer)
https://blog.csdn.net/hexiaolong2009/article/details/84452020
最简单的DRM应用程序 (single-buffer)
https://blog.csdn.net/hexiaolong2009/article/details/83721242
DRM 驱动程序开发(开篇)
https://blog.csdn.net/hexiaolong2009/article/details/89810355
DRM 驱动程序开发(VKMS)
https://blog.csdn.net/hexiaolong2009/article/details/105180621
DRM GEM 驱动程序开发(dumb)
https://blog.csdn.net/hexiaolong2009/article/details/106532966
DRM 驱动 mmap 详解:(一)预备知识
https://blog.csdn.net/hexiaolong2009/article/details/107592704
DRM 驱动 mmap 详解:(二)CMA Helper
https://blog.csdn.net/hexiaolong2009/article/details/108655052
关于 DRM 中 DUMB 和 PRIME 名字的由来
https://blog.csdn.net/hexiaolong2009/article/details/105961192
Skia深入分析1——skia上下文
https://blog.csdn.net/jxt1234and2010/article/details/42572559
Skia深入分析2——skia渲染架构
https://blog.csdn.net/jxt1234and2010/article/details/42796449
Skia深入分析3——skia图片绘制的实现(1)
https://blog.csdn.net/jxt1234and2010/article/details/43077189
Skia深入分析4——skia路径绘制的实现
https://blog.csdn.net/jxt1234and2010/article/details/43683143
Skia深入分析5——skia文字绘制的实现
https://blog.csdn.net/jxt1234and2010/article/details/43878107
Skia深入分析6——skia中图像编解码代码概述
https://blog.csdn.net/jxt1234and2010/article/details/43958293
Skia深入分析7——区域解码
https://blog.csdn.net/jxt1234and2010/article/details/43973345
Skia深入分析8——Skia的GPU绘图
https://blog.csdn.net/jxt1234and2010/article/details/44006481
Skia深入分析9——延迟渲染和显示列表
https://blog.csdn.net/jxt1234and2010/article/details/44009159
Skia深入分析10——Skia库的性能与优化潜力
https://blog.csdn.net/jxt1234and2010/article/details/44088137
Android中的GraphicBuffer同步机制-Fence
https://blog.csdn.net/jinzhuojun/article/details/39698317
Android SurfaceFlinger中Fence机制--个人理解整理
https://blog.csdn.net/bruce_zhang123/article/details/124848001
Android卡顿掉帧问题分析之原理篇
https://www.jianshu.com/p/386bbb5fa29a
Android卡顿掉帧问题分析之工具篇
https://www.jianshu.com/p/cf531a3af828
Android卡顿掉帧问题分析之实战篇
https://www.jianshu.com/p/f1a777551b70
android graphic(16)—fence(简化)
https://blog.csdn.net/lewif/article/details/51007148
Android中的GraphicBuffer同步机制-Fence
https://blog.csdn.net/jinzhuojun/article/details/39698317
Android触控事件处理机制(基于Android 11)
https://juejin.cn/post/6956500920108580878
Fence的作用
基于同步对象的Fence机制
Fence是一种同步机制,在Android里主要用于图形系统中GraphicBuffer的同步。
GraphicBuffer被上一个使用者用完的信号就是由Fence完成的。Fence的存在非常单纯,从诞生开始就是为了在合适的时间发出一个信号。
如果用Fence的话就可以等这个GraphicBuffer真正要被消费者用到时再阻塞,而那之前CPU和GPU是可以并行工作的。这样相当于实现了临界资源的lazy passing。
Fence的实现
Fence,顾名思义就是把先到的拦住,等后来的,两者步调一致了再往前走。抽象地说,Fence包含了同一或不同时间轴上的多个时间点,只有当这些点同时到达时Fence才会被触发。更详细的介绍可以参考这篇文章(http://netaz.blogspot.com/2013/10/android-fences-introduction-in-any.html)。
Fence在Android中的具体用法。它主要的作用是GraphicBuffer在App, GPU和HWC三者间传递时作同步。
Android还进一步丰富了Fence的software stack。主要分布在三部分:
C++ Fence类位于/frameworks/native/libs/ui/Fence.cpp
C的libsync库位于/system/core/libsync/sync.c
Kernel driver部分位于/drivers/base/sync.c
总得来说,kernel driver部分是同步的主要实现,libsync是对driver接口的封装,Fence是对libsync的进一步的C++封装。Fence会被作为GraphicBuffer的附属随着GraphicBuffer在生产者和消费间传输。另外Fence的软件实现位于/drivers/base/sw_sync.c。SyncFeatures用以查询系统支持的同步机制:/frameworks/native/libs/gui/SyncFeatures.cpp。
硬件合成器-HwComposer
使用3D合成,需要大面积的像素混合计算和大量的内存传输(GPU读写GraphicBuffer所需),对GPU和DDR来说是一个巨大的负担。在GPU/DDR重度使用的场景(比如玩游戏),会造成发热、卡顿等。
为了提升性能,减少功耗,可以将合成这个过程交由另一个芯片完成,减轻GPU负担。进一步,直接让这个芯片连LCD,在LCD需要显示某一行时在线合成。
HwComposer便是这一个/多个专用合成芯片的驱动HAL层。
驱动由集成芯片系统的厂商自行设计,但需要遵循一定的标准,这个标准就是Android规定的HwComposer接口。
接口定义
hwcomposer的接口定义位于此文件:
hardware/libhardware/include/hardware/hwcomposer.h
其中部分宏定义在:
hardware/libhardware/include/hardware/hwcomposer_defs.h