首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • SurfaceFlinger 做了什么事?

    收集图层信息: 每个 Surface 都通过 BufferQueue 提交图像帧(比如你绘制完一帧 UI 后,会传给 SurfaceFlinger)。

    35210编辑于 2025-08-13
  • 来自专栏王小二的Android站

    SurfaceFlinger是什么东西

    前言 很多人都听过SurfaceFlinger,但是不清楚Surfaceflinger到底是一个什么东西,我接下来用直白的语言讲述一下SurfaceFlinger,这里更多的讨论是大体框架,而不是代码 SurfaceFlinger = Surface + Flinger SurfaceFlinger是一个特殊进程,主要负责合成所有Surface到Framebuffer,然后屏幕去读取这个Framebuffer ,负责用OpenGL的将所有的Surface重新绘制到FrameBuffer 美术馆 美术馆就是手机屏幕,每天展示SurfaceFlinger准备好的FrameBuffer 看下面一个图 ? 屏幕快照 2019-08-09 下午1.54.50.png 深入思考一个问题 如何实现锤子手机到TNT上,类似PC桌面一样的系统 这个问题其实并没有想象中那么难,只要我们去修改SurfaceFlinger ,如果看过了SurfaceFlinger,你会感叹发明图形计算机的人是真的牛逼。

    3.3K20发布于 2020-06-08
  • 来自专栏王小二的Android站

    HWC在SurfaceFlinger中的角色

    Hardware Composer的开关选项 举个栗子 在[009]SurfaceFlinger是什么东西中提到,王老师每天要临摹三个贴纸上房子,小河,山到了一张固定尺寸的白纸上,每天将当天画的美术作品给美术馆 HWC在SurfaceFlinger中就好比王老师直接把那座山贴上去的行为 理解一下HWC在SurfaceFlinger的作用 看下图 在关闭HWC的情况下,状态栏,当前Activity,导航栏的三个 HWC在SurfaceFlinger的作用 HWC的好处 1.提升每一帧画面的合成速度,提升用户界面的流畅度 2.相比OpenGL使用GPU来合成,HWC的合成,相对来说更加省电 总结 HWC是SurfaceFlinger

    2.4K20发布于 2020-06-08
  • 来自专栏全栈程序员必看

    android的surfaceflinger原理学习「建议收藏」

    SurfaceFlinger 现 在就来看看最复杂的SurfaceFlinger,首先要明确的是SurfaceFlinger只是负责merge Surface的控制,比如说计算出两个Surface重叠的区域 b、就是画图以后如何通知 SurfaceFlinger 来进行 flip ? c、除了画图之外,如果我们移动窗口以及改变窗口大小的时候,如何告诉 SurfaceFlinger 来进行处理呢 ? 在明白这些问题之前,首先我们要了解 SurfaceFlinger 这个服务是如何运作的: 从类图中可以看到 SurfaceFlinger 是一个线程类,它继承了 Thread 类。 当创建 SurfaceFlinger这个服务的时候会启动一个 SurfaceFlinger 监听线程,这个线程会一直等待事件的发生,比如说需要进行 sruface flip ,或者说窗口位置大小发生了变化等等 4 、 SurfaceFlinger 的处理过程 了解了 Flinger 和客户端的交互,我们再来仔细看看 SurfaceFlinger 的处理过程,前面已经说过了SurfaceFlinger 这个服务在创建的时候会启动一个监听的线程

    2.9K10编辑于 2022-08-02
  • 来自专栏小柔博客园

    SurfaceFlinger浅析之初始化流程(下)

    FrameBufferSurface及两个生产者(IGraphicBufferProducer)和消费者(IGraphicBufferConsumer)的GraphicBufferQuene 代码部分: void SurfaceFlinger

    55610编辑于 2022-10-09
  • 来自专栏小柔博客园

    SurfaceFlinger浅析之初始化流程(上)

    theme: fancy 大致流程: ISurfaceComposer 用于定义访问SurfaceFlinger的Binder IPC接口(应用的DisplayEventReceiver通过该接口向SurfaceFlinger (4); sp<ProcessState> ps(ProcessState::self()); ps->startThreadPool(); //实例化surfaceflinger sp<SurfaceFlinger> flinger = new SurfaceFlinger(); setpriority(PRIO_PROCESS, 0, PRIORITY_URGENT_DISPLAY 初始化(调用init函数) 将SurfaceFliger添加到到Service Manager中 调用SurfaceFliger的run方法 SurfaceFlinger的init 大体流程: void SurfaceFlinger::init() { Mutex::Autolock _l(mStateLock); //初始化EGL,作为默认的显示 mEGLDisplay =

    86330编辑于 2022-10-09
  • 来自专栏linux驱动个人学习

    Android应用程序与SurfaceFlinger服务的连接过程分析

    在前面Android应用程序与SurfaceFlinger服务的关系概述和学习计划一文中提到,类型为Client的Binder本地对象是由SurfaceFlinger服务来负责创建的,并且运行在SurfaceFlinger 服务创建的一块用来传递UI元数据的匿名共享内存,而成员函数createSurface用来请求SurfaceFlinger服务创建一个Surface.从前面Android应用程序与SurfaceFlinger 回到SurfaceComposerClient类的成员函数onFirstRef中,由于SurfaceFlinger服务实现了ISurfaceComposer接口,因此,我们可以将前面获得的SurfaceFlinger SurfaceFlinger::createConnection sp<ISurfaceComposerClient> SurfaceFlinger::createConnection() { 类的成员函数createConnection实现在文件frameworks/base/services/surfaceflinger/SurfaceFlinger.cpp中,它的实现很简单,只是创建了一个类型为

    1.4K20发布于 2020-03-18
  • 来自专栏program

    Android开机动画启动流程

    启动流程 而surfaceflinger.rc文件中,可以清楚看到Service name为surfaceflinger,执行程序路径为:/system/bin/surfaceflinger,类名:core 源码路径:frameworks/native/services/surfaceflinger/surfaceflinger.rc service surfaceflinger /system/bin/surfaceflinger . // instantiate surfaceflinger sp<SurfaceFlinger> flinger = surfaceflinger::createSurfaceFlinger /SurfaceFlinger.cpp void SurfaceFlinger::init() { ... 在init进程启动过程中,SurfaceFlinger也被启动,SurfaceFlinger是Android中的显示系统服务,负责管理屏幕显示和图形渲染。

    1.3K30编辑于 2023-11-14
  • 来自专栏ADAS性能优化

    Android--Vsync代码分析(一)

    \DispSync.cpp frameworks\native\services\surfaceflinger\SurfaceFlinger.cpp frameworks\native\services \surfaceflinger\SurfaceFlinger.cpp@DispSyncSource frameworks\native\services\surfaceflinger\EventThread.cpp requestnextVsync()请求,当SW-VSYNCevent触发时,EventThread线程通过BitTube通知App或SurfaceFlinger.App 开始drawview,SurfaceFlinger MessageQueue.cpp MessageQueue 主要处理surfaceflinger的Vsync请求和发生Vsync事件给surfaceFlinger. EventThread会把Vsync-sf或Vsync-app event通知到App或surfaceFlinger当Vsync-sfevent 产生时(callonDispSyncEvent),surfaceflinger

    86320编辑于 2022-05-13
  • native 层 是什么意思?

    消费者(Consumer):通常是 SurfaceFlinger(系统合成器)、相机 HAL、视频编码器等。 SurfaceFlinger 会判断哪些图层由 HWC 合成,哪些还需要 GPU,然后进行最终合成输出。 ✅ 3. native 层的含义? native 层 指的是使用 C/C++ 编写的 Android 系统底层代码,包括: SurfaceFlinger BufferQueue HWC OpenGL/Skia 相机 SurfaceFlinger 调用 HWC 或 GPU 合成所有图层 显示在屏幕上 举例: 你打开一个视频播放器应用: 视频帧由解码器写入 BufferQueue(Producer ) BufferQueue 把图像交给 SurfaceFlinger(Consumer) SurfaceFlinger 判断用 HWC 合成视频图层和 UI 图层 最终通过合成后的结果显示在屏幕上

    34600编辑于 2025-08-13
  • 来自专栏字节流动

    Android 图形系统概述

    SurfaceFlinger合成所有图层的图形数据,Display显示合成结果。 Surface 与 SurfaceFlinger Surface 表示 APP 进程的一个窗口,承载了窗口的图形数据,SurfaceFlinger 是系统进程合成所有窗口(Layer)的系统服务,负责合成所有 SurfaceFlinger 既是上层应用的消费者,又是 Display 的生产者,起到了承上启下的作用。官方提供了一个架构图,如下所示: ? 我们可以通过adb shell dumpsys SurfaceFlinger查看该界面包含几个窗口(Surface): ? SurfaceFlinger会合成上述所有图层(Layer),并送显到内嵌的Display 0。

    2.1K30发布于 2020-11-04
  • 来自专栏进击的多媒体开发

    Android 图形架构之一 ——概述

    SurfaceFlinger创建一个Surface。 (在SurfaceFlinger中Surface 是用Layer来体现的,也就是说App中的一个Surface ,对应SurfaceFlinger的一个Layer),这个layer的核心即是一个BufferQueue 而app的UI部分对应的layer 是由它自己去处理(通知SurfaceFlinger处理),最后需要把这些layer合成 。 图像消费者 例如:SurfaceFlinger 或显示 OpenGL ES 流的另一个应用,如显示相机取景器的相机应用。 SurfaceFlinger可以使用OpenGL ES合成Layer,这需要占用并消耗GPU资源。

    2.8K20编辑于 2022-10-31
  • 来自专栏王小二的Android站

    [075]WinScope简介和使用

    hl=cn 一、简介 WinScope 提供了用于在窗口转换期间和转换后记录和分析 WindowManager 状态和 SurfaceFlinger 状态的基础架构和工具。 2.2 adb 通过 adb 捕获跟踪记录时,请分别捕获 WindowManager 和 SurfaceFlinger 的跟踪记录。 跟踪 要记录 SurfaceFlinger 的跟踪情况,请执行以下操作: 启用跟踪: adb shell su root service call SurfaceFlinger 1025 i32 1 call SurfaceFlinger 1020 i32 1 停用跟踪: adb shell su root service call SurfaceFlinger 1020 i32 0 获取跟踪文件 dumpsys SurfaceFlinger --proto > sf_dump.winscope 三、分析轨迹 如需分析轨迹文件,请使用 WinScope Web 应用。

    3.7K31编辑于 2022-05-13
  • 来自专栏linux驱动个人学习

    android的hwc浅析【转】

    1、从广义的角度来分析,有几个概念需要精确定义(注意字母大小写差异) (1)hwc:利用硬件完成图像数据组合并显示的功能(能力),具体到代码级别它是由多个类如SurfaceFlinger、HWComposer (2)HWComposer:硬件组合抽象层,介于SurfaceFlinger和HAL之间,具体到代码级别就是一个类,封装对于Hwcomposer HAL和Gralloc HAL的使用。 它的实现版本经历了1.0到1.3的演变,在Jellybean MR1(4.2)实现的1.1版本,引入了硬件组合抽象层(HWComposer)的概念,向上对SurfaceFlinger完全隐藏了平台显示硬件特性 ,工作方式也修改成如下官方描述: (1)SurfaceFlinger provides the HWC with a full list of layers, and asks, "how do you SurfaceFlinger提供所有软图层信息给HWComposer,询问其处理方式 (2)The HWC responds by marking each layer as "overlay" or

    3.8K70发布于 2018-06-14
  • 来自专栏构建FFmpeg Android播放器

    Android框架简介--启动过程--大体流程

    frameworks/native/services/surfaceflinger/main_surfaceflinger.cpp frameworks/native/services/surfaceflinger /native/cmds/servicemanager/servicemanager.rc 注册binder的服务 这些服务启动的方式都差不多,以surfaceflinger为例: LOCAL_INIT_RC 在frameworks/native/services/surfaceflinger/Android.mk中有如下的变量 LOCAL_INIT_RC := surfaceflinger.rc 编译宏LOCAL_INIT_RC 上面的Android.mk通过LOCAL_INIT_RC将对应的surfaceflinger.rc编译到/system/etc/init目录中 解析对应的rc文件 是在system\core\init\ 的定义 service surfaceflinger /system/bin/surfaceflinger class core animation user system group

    1.1K50编辑于 2022-04-02
  • 来自专栏小柔博客园

    Android渲染流程

    对应一个PhoneWindow,Dialog等也是一个PhoneWindwo 每个Window都有一块Surface用来显示布局(特殊:当SutfaceView可见时会通过SurfaceControl像SurfaceFlinger Surface可以理解为就是Layer Surface处理完成之后,通过WindwoManager统一提交给SurfaceFlinger进行处理(利用缓冲区实现) Surface对应一块画布canvas 的合成 Acquired:被获取 代表当前缓冲区正在被下层使用SurfaceFlinger正在合成Layer也就是Surface合成,合成完之后又会回到Free状态往复 因此 发送给SurfaceFlinger 的数据是 通过WindowManager将当前所有Window的元数据一起发送,SurfaceFlinger获取到Layer后一起合成 SurfaceFlinger进程用于响应Vsync信号(又分为Vsync-app 数据是通过统一的Vsync调用 onDraw获取的canvas的数据;还有通过SurfaceView【其通过SurfaceControl申请的缓冲区】 ViewRootImpl: 控制窗口渲染:链接WMS和SurfaceFlinger

    1K20编辑于 2022-10-09
  • 来自专栏ADAS性能优化

    Understanding Systrace

    A second EventThread in SurfaceFlinger wakes SurfaceFlinger to trigger composition and display output SurfaceFlinger handles composition via HWC/HWC2 or GL. SurfaceFlinger first latches the older pending buffer. SurfaceFlinger wakes and immediately goes to sleep. In addition, SurfaceFlinger is waking at the correct time, so it's not a SurfaceFlinger issue.

    71830编辑于 2022-05-13
  • 来自专栏Android 进阶

    UI 刷新

    屏幕刷新机制 与屏幕刷新相关的有很多,比如刷新流程,屏幕缓存,周期刷新,vsync信号,SurfaceFlinger。 请求下一个vsync信号,调用的就是requestNextVsync函数,然后SurfaceFlinger就会在下一个vsync信号来的时候,通过postSyncEvent向choreographe发送一个通知 ,choreographe收到通知,就会处理消息队列中的消息,调用performTraversal进行重绘 总结 屏幕刷新流程,屏幕图像缓存,周期性刷新都讨论过了,还剩下vsync信号与SurfaceFlinger SurfaceFlinger。 主要是因为一方面通知应用进行绘制UI,另一个方面通知SurfaceFlinger对图像进行合成与渲染操作。

    2.5K30发布于 2020-04-25
  • 来自专栏ADAS性能优化

    Android--Vsync代码分析(二)

    我们来看看其代码的实现. void SurfaceFlinger::init() { … // start the EventThread sp<VSyncSource>vsyncSrc mSFEventThread= new EventThread(sfVsyncSrc); mEventQueue.setEventThread(mSFEventThread); } 当surfaceFlinger 初始化时,其创建了两个DispSyncSource 和两个EventThread.一个用于APP, 而另一个用于SurfaceFlinger 本身.我们知道DispSyncSource和DispSync 协同工作, 共同完成Vsyncevent的fire.而EventThread会triggerApp draw frame和surfaceFlinger合成”dirty”layer当SW-VSYNCevent 对Vsyncevent 事件的请求(通过requestNextVsync())和EventThread把SW-Vsyncevent callback 到其感兴趣的client.需要注意的是App是通过SurfaceFlinger

    75720编辑于 2022-05-13
  • 来自专栏全栈程序员必看

    Android 开机动画源码分析

    return NO_ERROR; } 通过调用SurfaceFlinger::instantiate()函数来启动SurfaceFlinger服务,SurfaceFlinger类继承于BinderService 服务来说,就是首先构造SurfaceFlinger对象,然后通过调用ServiceManger的远程Binder代理对象的addService函数来注册SurfaceFlinger服务。 由于SurfaceFlinger同时继承于线程Thread类,而且SurfaceFlinger并没有重写Thread类的run方法,因此这里调用SurfaceFlinger的run函数,其实调用的就是其父类 作为Thread类的子类SurfaceFlinger重写了这两个方法,因此创建的SurfaceFlinger线程在执行前会调用SurfaceFlinger的readyToRun()函数完成初始化任务,然后反复执行 SurfaceFlinger的threadLoop()函数。

    89730编辑于 2022-08-28
领券