![](https://img-blog.csdnimg.cn/direct/cb8ec90306104ddcb9da3ba957cd2303.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Android SurfaceFlinger
文章平均质量分 91
Android SurfaceFlinger相关知识学习笔记。源码部分主要使用的是 Android 13 的源码。
优惠券已抵扣
余额抵扣
还需支付
¥39.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
c小旭
Android Framework车载智能座舱开发工程师
展开
-
Android SurfaceFlinger——创建EGLContext(二十五)
上一篇文章我们介绍了初始化 EGL 显示连接(EGLDisplay)和着色器缓存,这里我们介绍往下介绍其中的第 8 步,从 EGL 显示连接中选择一个合适的 EGL 配置。1)getInternalDisplayToken:获取显示屏的 SurfaceControl 令牌(Token)。2)getActiveDisplayMode:获取当前激活(正在使用中)的显示模式信息。3)createSurface:通过 Client 创建绘制平面控制中心(SurfaceControl)。原创 2024-07-04 08:43:55 · 197 阅读 · 0 评论 -
Android SurfaceFlinger——本地窗口连接EGL API(二十四)
通过前面的文章我们属性了 Surface 和 EGLSurface 的相关内容,这里我们继续分析让两者相关联的函数 native_window_api_connect()。原创 2024-07-04 08:43:18 · 50 阅读 · 0 评论 -
Android SurfaceFlinger——创建EGLSurface(二十三)
在 Android 系统中,Surface 是一个非常核心的概念,它是用于显示图像的生产者-消费者模型中的生产端,代表一个可以被绘图操作直接写入的缓冲区集合。简单来说,Surface 是一个抽象概念,提供了将图像数据输出到屏幕或其他地方(如视频编码器、另一个 Surface 等)的能力。它是 Android 图形系统中的基本构建块之一,广泛应用于UI渲染、视频播放、屏幕截图、屏幕录像等多种场景。原创 2024-07-03 08:54:19 · 1055 阅读 · 0 评论 -
Android SurfaceFlinger——屏幕状态初始化(二十二)
对于开机启动动画前期准备的相关步骤,我们已经分析了前 5 个,对于第 6 步调用 eglGetDisplay() 函数对 OpenGL ES 初始化并获取默认屏幕,我们在介绍 OpenGL ES 的时候也进行了详细的分析,下一步我们我们来分析对屏幕的状态进行初始化。1)getInternalDisplayToken:获取显示屏的 SurfaceControl 令牌(Token)。2)getActiveDisplayMode:获取当前激活(正在使用中)的显示模式信息。原创 2024-07-03 08:53:58 · 511 阅读 · 0 评论 -
Android SurfaceFlinger——创建Surface(二十一)
其实整个过程就是图元缓冲队列的初始化流程。在这个初始化流程中,初步的搭建了整个生产者-消费者模型。剩下的步骤就是生产图元,写入生产者,生产者把数据写进缓冲队列,通知消费者进行消费。createSurface 通过 SurfaceFlinger 的 Client 对象创建了一个图元生产者,并且赋值给 SurfaceControl 中。setLayer 设置 layer 图层在 Z 轴上的层级。原创 2024-07-02 11:16:54 · 687 阅读 · 0 评论 -
Android SurfaceFlinger——创建Layer(二十)
上一篇文章介绍到,SurfaceComposerClient 中的 createSurface() 方法最终创建的是一个 Layer,这里我们接着看 Layer 的创建。原创 2024-07-02 11:16:29 · 517 阅读 · 1 评论 -
Android SurfaceFlinger——Surface和Layer介绍(十九)
在 Android 系统中,SurfaceFlinger 是负责屏幕合成的核心组件,它管理并组合来自不同应用程序和服务的图形输出,最终将这些输出呈现到物理屏幕上。Surface 是 Android 图形系统中的一个核心概念,它是应用程序与 SurfaceFlinger 之间交互的基础。图形缓冲区:Surface 本质上是一个共享的、可被多个进程访问的图形缓冲区,它代表了用于绘制图形的内存区域。每个 Surface 都可以看作是一个可以被绘制到的“画布”。窗口与界面。原创 2024-07-01 17:23:21 · 387 阅读 · 0 评论 -
Android SurfaceFlinger ——获取显示屏信息(十八)
经过前面文章对开机启动动画的流程梳理,引出了实际上在开机启动动画中,并没有Activity,而是通过 OpenGL es 进行渲染,最后通过某种方式,把数据交给 Android 渲染系统。让我们回忆一下开机动画前期准备的相关步骤,大致分为如下几个:1)getInternalDisplayToken:获取显示屏的 SurfaceControl 令牌(Token)。2)getActiveDisplayMode:获取当前激活(正在使用中)的显示模式信息。原创 2024-07-01 17:23:00 · 351 阅读 · 0 评论 -
Android SurfaceFlinger——动画进程销毁(十七)
在动画播放完成后,对动画相关资源释放的同时还需要销毁动画进程。这里我们就来分析一下动画进程的销毁流程。原创 2024-06-27 08:57:14 · 860 阅读 · 1 评论 -
Android SurfaceFlinger——动画播放流程(十六)
loadAnimation:解析 zip 包的动画数据。初始化纹理设置。playAnimation:播放解析好的纹理数据。releaseAnimation:播放完毕释放资源。原创 2024-06-27 08:56:50 · 326 阅读 · 0 评论 -
Android SurfaceFlinger——动画播放准备(十五)
在车载设备开发中,大都是需要实现自定义动画的,所以这里我们就去解析 Android 自定义动画的核心原理。原创 2024-06-26 08:58:08 · 793 阅读 · 0 评论 -
Android SurfaceFlinger——系统动画服务启动(十四)
在了解了 SurfaceFlinger、HWC、OpenGL ES 和 EGL 等相关概念和基础信息后,我们通过系统动画的调用流程引入更多的内容。原创 2024-06-26 08:57:39 · 749 阅读 · 0 评论 -
Android SurfaceFlinger——OpenGL ES初始化(十三)
上一篇文章我们对 OpenGL ES 相关知识有了一定的了解,并知道在使用 OpenGL ES 是需要先通过 eglGetDisplay() 方法获取 EGLDisplay 默认主屏幕句柄。这里就分析一下 eglGetDisplay() 中的 egl_init_drivers() 初始化 OpenGL ES 的对应流程。原创 2024-06-25 10:09:42 · 974 阅读 · 0 评论 -
Android SurfaceFlinger——OpenGL ES基础介绍(十二)
OpenGL ES(Open Graphics Library for Embedded Systems)是一种针对嵌入式设备的图形 API,广泛用于 Android 设备上的 2D 和 3D 图形渲染。它允许开发者直接与 GPU 交互,实现复杂的图形效果和高效的渲染。在 Android 应用开发中,当需要进行定制化的图形渲染,如游戏、复杂的 UI 动画或特定视觉效果时,开发者可能会直接使用 OpenGL ES 来绘制内容。原创 2024-06-25 10:09:26 · 811 阅读 · 0 评论 -
Android SurfaceFlinger——图形内存分配器(十一)
android.hardware.graphics.allocator@2.0 是 Android 系统中硬件抽象层(HAL)的一个组件,专门用于图形内存的分配和管理。它是 SurfaceFlinger 在处理图形数据时所依赖的关键服务之一,确保了高效、安全地为屏幕显示、图形渲染等操作提供所需的内存资源。原创 2024-06-24 08:46:51 · 648 阅读 · 1 评论 -
Android SurfaceFlinger——无效化和同步信号回调(十)
上一篇文章分析了回调注册监听的调用流程,对于数据的回调正好是注册监听的逆向调用。首先前面提到过在 HWC2On1Adapter 中就会直接转型为每一个回调到上层,此时就是 HwcHalImpl 中的 refreshHook、hotplugHook 和 vsyncHook。原创 2024-06-24 08:46:27 · 911 阅读 · 0 评论 -
Android SurfaceFlinger——屏幕热插拔回调(九)
Composer 其实最重要的行为就是 createClient,创建一个 ComposerClient。ComposerClient 会持有 HwcHalImpl,该类因为持有 hw2_device_t,所以拥有了和硬件通信的能力。ComposerResource 中持有 ComposerInputHandler 这个对象负责图元服务的控制。ComposerCommandEngine 则是处理一些来自上层的命令。原创 2024-06-22 16:10:09 · 501 阅读 · 0 评论 -
Android SurfaceFlinger——注册监听底层调用(八)
通过上一篇文章的分析,能够发现其实 registerCallback 在 HWC2On1Adapter(也是 hwc2_device_t)中做的事情仅仅只是把当前的方法指针和回调类型存储起来,同时让刚注册进来的监听消费掉还没有回调上去的消息。其实真正从硬件回调上来的地方其实是 HWC2On1Adapter::Callback 中的回调。他是在hwc_device_t 的 registerProcs 的时候注册进去的。原创 2024-06-22 16:09:48 · 850 阅读 · 0 评论 -
Android SurfaceFlinger——注册监听调用流程(七)
这一篇我们介绍一下 IComposer 中的另一个比较重要的方法,通过注册监听 Hal 层实现监听驱动的关键动作。原创 2024-06-21 13:36:57 · 559 阅读 · 0 评论 -
Android SurfaceFlinger——SF与HWC交互流程(六)
在上一篇 HWC2On1Adapter 初始化完成后,调用 initWithDevice() 实例化 HwcHal 对象,然后创建高级接口(IComposer),使得调用者能够通过这个接口与硬件进行交互。这里我们就来看一下 HwcHal 和 IComposer 的初始化流程。原创 2024-06-21 13:36:31 · 771 阅读 · 0 评论 -
Android SurfaceFlinger——HWC Adapter初始化(五)
上一篇文章对 HWC 硬件加载流程进行了分析,在加载完成后开始创建 HAL 实例时,首先需要对 hwc2_device_t 的适配器进行初始化,这里我们主要分析 HWC Adapter 的创建流程。原创 2024-06-20 08:44:58 · 611 阅读 · 0 评论 -
Android SurfaceFlinger——HWC图层合成器加载(四)
HWC,全称为 Hardware Composer,是 Android 系统中一个至关重要的组件,位于硬件抽象层(HAL)。它的主要职责是利用图形处理器(GPU)和其他硬件资源来高效地合成和显示屏幕上的多个图层(Layers)。HWC 的设计目标在于减轻 CPU 和 GPU 的负担,提升显示性能并降低功耗。原创 2024-06-20 08:44:28 · 685 阅读 · 0 评论 -
Android SurfaceFlinger——服务的初始化(三)
SurfaceFlinger 作为 Android 整个进程最为核心进程之一,它并非像 APP 一样前台显示,而是在后台运行,那么保证这个服务不被系统杀掉,让 CPU 不断的优先把资源让渡给 SurfaceFlinger 保证渲染任务在 16ms 完成呢?这就需要了解一下进程调度策略。原创 2024-06-19 08:50:49 · 896 阅读 · 0 评论 -
Android SurfaceFlinger——服务启动流程(二)
由 init 进程启动:SurfaceFlinger 服务作为 Android 系统中的一个关键服务,是由 init 进程根据 init.rc 配置文件启动的。在这个阶段,init 进程会 fork 出一个新的进程来运行 SurfaceFlinger 服务。原创 2024-06-19 08:50:17 · 877 阅读 · 0 评论 -
Android SurfaceFlinger——概述(一)
对于系统渲染流程的理解是指导 SurfaceFlinger 设计的核心思想,从 Android 4.1 一直到 Android 9.0 都没有太大的变化。只要抓住这五个核心思想,我们阅读 SurfaceFlinger 的难度就会下降不少。下面看一下 SurfaceFlinger 的体系和 Skia 以及 View的绘制流程的关系。framework 面向开发者所有的 View 是便于开发的控件,里面仅仅只是提供了当前 View 各种属性以及功能。原创 2024-06-18 08:48:31 · 294 阅读 · 0 评论