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

 

posted @ 2023-08-28 17:31  petercao  阅读(422)  评论(0编辑  收藏  举报