![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
【Android 显示模块】
文章平均质量分 97
yangwen123
这个作者很懒,什么都没留下…
展开
-
FrameBuffer驱动程序分析
FrameBuffer通常作为LCD控制器或者其他显示设备的驱动,FrameBuffer驱动是一个字符设备,设备节点是/dev/fbX,主设备号为29,次设备号递增,用户可以将Framebuffer看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以直接进行读写操作,而写操作可以立即反应在屏幕上。这种操作是抽象的,统一的。用户不必关心物理显存的位置、换页机制等等具体细节。这些都是由Framebuffer设备驱动来完成的。Framebuffer设备为上层应用程序提供系统调用,也为下一层的特定硬件驱动提原创 2013-09-28 21:17:32 · 11584 阅读 · 2 评论 -
Android显示系统设计框架介绍
1. Linux内核提供了统一的framebuffer显示驱动,设备节点/dev/graphics/fb*或者/dev/fb*,以fb0表示第一个显示屏,当前实现中只用到了一个显示屏。2. Android的HAL层提供了Gralloc,分为fb和gralloc两个设备。设备fb负责打开内核中的framebuffer以及提供post、setSwapInterval等操作,设备gralloc则负责原创 2014-04-02 08:32:22 · 29987 阅读 · 7 评论 -
Android SurfaceFlinger对VSync信号的处理过程分析
在Android SurfaceFlinger服务的消息循环过程源码分析中分析了SurfaceFlinger的消息循环过程,SurfaceFlinger通过维护一个消息队列来实现消息的异步处理。Android应用程序消息循环源码分析介绍了消息循环定义的Looper对象不仅可以处理Java层和C++层的消息,同时也可以监控用户添加的文件句柄。Android SurfaceFlinger服务的原创 2013-11-28 12:14:35 · 7574 阅读 · 0 评论 -
Android图形显示之硬件抽象层Gralloc
FrameBuffer驱动程序分析文中介绍了Linux系统下的显示驱动框架,每个显示屏被抽象为一个帧缓冲区,注册到FrameBuffer模块中,并在/dev/graphics目录下创建对应的fbX设备。Android系统在硬件抽象层中提供了一个Gralloc模块,封装了对帧缓冲区的所有访问操作。用户空间的应用程序在使用帧缓冲区之间,首先要加载Gralloc模块,并且获得一个gralloc设备和一个fb设备。有了gralloc设备之后,用户空间中的应用程序就可以申请分配一块图形缓冲区,并且将这块图形缓冲区映射原创 2013-09-30 17:06:31 · 19871 阅读 · 4 评论 -
Android帧缓冲区状态监控过程源码分析
SurfaceFlinger服务在启动的时候,会创建一个线程来监控由内核发出的帧缓冲区硬件事件。每当帧缓冲区要进入睡眠状态时,内核就会发出一个睡眠事件,这时候SurfaceFlinger服务就会执行一个释放屏幕的操作;而当帧缓冲区从睡眠状态唤醒时,内核就会发出一个唤醒事件,这时候SurfaceFlinger服务就会执行一个获取屏幕的操作。原创 2013-12-03 11:54:54 · 4267 阅读 · 0 评论 -
Android VSync信号产生过程源码分析
在上一篇Android Project Butter分析中介绍了Android4.1通过引入VSync机制来改善显示效果,并分析了VSync机制的原理。本文主要分析VSync信号的产生过程。VSync信号产生有两种方式,一种是硬件中断产生,另一种是使用软件模拟产生,至于使用何种方式产生VSync信号,就和硬件系统配置有关。在Android4.1以后的版本中,定义了HWComposer硬件抽象模原创 2013-11-26 20:30:08 · 9492 阅读 · 0 评论 -
Android VSync事件分发过程源码分析
在上一篇文章Android VSync信号产生过程源码分析中分别介绍了VSync的两种产生方式,无论是通过硬件中断产生还是通过软件模拟产生,VSync事件最终都会交给EventThread线程来分发给所有VSync事件接收者。VSync事件接收者有很多,SurfaceFlinger就是其中一个重要的VSync事件接收者。那么EventThread线程是如何知道该将VSync分发给谁呢?EventThread线程有是如何将VSync事件分发给所有VSync事件接收者的呢?本文就针对这两个问题展开分析。我们知道原创 2013-11-27 15:27:46 · 6367 阅读 · 0 评论 -
Android GraphicBuffer分配过程
Android系统定义GraphicBuffer数据类型来描述一块图形buffer,该对象可以跨进程传输。IGraphicBufferAlloc是专门用于分配GraphicBuffer对象的工具类,该类是基于Binder进程间通信机制框架设计的,其类继承关系如下:由于IGraphicBufferAlloc是基于Binder进程间通信框架设计的,因此该类的实现分客户端进程和服原创 2013-11-22 19:38:52 · 19553 阅读 · 0 评论 -
Android SurfaceFlinger服务的消息循环过程源码分析
在Android SurfaceFlinger服务启动过程源码分析中详细分析了SurfaceFlinger的整个启动过程,我们知道,在SurfaceFlinger线程执行过程中,循环调用waitForEvent()函数等待消息事件的到来,而waitForEvent函数则是调用SurfaceFlinger中的消息队列的waitMessage()函数来等待消息事件。本文就针对SurfaceFlinger的消息队列MessageQueue展开讨论,分析SurfaceFlinger的消息队列创建过程。由于在Andr原创 2013-11-09 14:19:07 · 6634 阅读 · 0 评论 -
Android应用程序创建Surface过程源码分析
在上一篇 Android远程代理对象BpSurface的获取过程源码分析文章中,介绍了应用程序在SurfaceFlinger服务端创建对应的Layer对象过程,同时返回BpSurface远程代理对象给应用程序端,应用程序得到BpSurface代理对象后,将构造SurfaceControl对象:sp surface = mClient->createSurface(&data, name原创 2013-10-09 20:12:53 · 8482 阅读 · 0 评论 -
Android Project Butter分析
随着时间的推移,Android OS系统一直在不断完善。但直到Android 4.0问世,有关UI显示不流畅的问题也一直未得到根本解决。在整个进化过程中,Android在显示系统这块也下了不少功夫,例如,使用硬件加速等技术,但本质原因似乎和硬件关系并不大,因为iPhone的硬件配置并不比那些价格相近的Android机器的硬件配置强,而iPhone UI的流畅性强却是有目共睹的。从Android 4.1(版本代号为Jelly Bean)开始,Android OS开发团队便力图在每个版本中解决一个重要问题。作原创 2013-11-23 11:16:42 · 6495 阅读 · 2 评论 -
Android图形缓冲区映射过程源码分析
Android图形缓冲区分配过程源码分析中介绍了图形buffer的分配过程,图形buffer可以从系统帧缓冲区分配也可以从内存中分配,分配一个图形buffer后还需要将该图形缓冲区映射到分配该buffer的进程地址空间来,在Android系统中,图形buffer的管理由SurfaceFlinger服务来负责,在Android SurfaceFlinger服务启动过程源码分析中我们了解到SurfaceFlinger可以以服务进程的方式启动也可以以服务线程的方式在SystemServer进程中启动,如果是以服务原创 2013-10-02 15:32:57 · 9262 阅读 · 0 评论 -
Android远程代理对象BpSurface的获取过程源码分析
在上一篇文章Android SurfaceFlinger服务代理对象获取过程源码分析中介绍了应用程序获取SurfaceFlinger中的各种远程Binder代理对象,SurfaceFlinger为每个应用程序创建Client对象来处理应用程序的Binder请求,同时返回Client的Binder代理对象给应用程序,这样应用程序就可以通过该Binder代理对象来请求SurfaceFlinger创建Surface了,本文在前面章节的基础上 分析Surface在服务端创建对应的Layer对象过程,并将BSurfa原创 2013-10-06 14:22:27 · 4187 阅读 · 0 评论 -
Android服务端本地窗口FramebufferNativeWindow
我们知道Android系统采用OpenGL来绘制3D图形,OpenGL ES提供了本地窗口(NativeWindow)的概念,无论是在Android平台中还是其他平台中,只要实现OpenGL ES中的本地窗口定义的接口,就可以利用OpenGL ES来绘制图形。由于Android系统所有服务都建立在C/S模式下,因此Android系统在实现OpenGL ES的本地窗口时仍然包括两种本地窗口,服务进程端的本地窗口定义为FramebufferNativeWindow,该本地窗口直接由SurfaceFlinger管原创 2013-10-25 18:47:31 · 12802 阅读 · 4 评论 -
Android图形缓冲区分配过程源码分析
在上一篇文章Android图形显示之硬件抽象层Gralloc介绍了Gralloc模块的定义,Gralloc模块中的fb设备的打开过程及gpu设备的打开过程。关于Gralloc模块的加载过程在Android硬件抽象Hardware库加载过程源码分析中已经详细介绍过了,通过Android图形显示之硬件抽象层Gralloc的介绍,相信大家对Gralloc模块的设计有了大概的了解,本文在前文的基础上继续分析Android系统的图形显示内容。我们知道在Gralloc模块中定义了gpu设备来分配图形缓冲区,同时在上一篇原创 2013-10-02 12:10:33 · 6818 阅读 · 0 评论 -
Android SurfaceFlinger服务代理对象获取过程源码分析
Binder进程间通信机制在Android系统中无处不在,SurfaceFlinger服务依然采用Binder通信方式,每个应用程序进程在请求SurfaceFlinger服务时,首先需要获取SurfaceFlinger服务的代理对象,通过该 代理对象请求SurfaceFlinger为该应用程序进程在SurfaceFlinger服务端创建一个Client对象,该 对象专门接收处理当前应用程序的请求。Android系统中SurfaceFlinger的设计框架如下:原创 2013-10-03 17:12:45 · 5944 阅读 · 1 评论 -
Android SurfaceFlinger服务启动过程源码分析
Android系统的SurfaceFlinger服务有两种启动方式:1)在SystemServer进程中以服务线程的方式提供服务;2)启动SurfaceFlinger独立的进程通过服务。第一种方式是在SystemServer进程启动过程中启动SurfaceFlinger服务的,而第二中方式是在Android启动脚本init.rc中配置SurfaceFlinger服务,通过init进程来启动的。下面就分别介绍SurfaceFlinger的两种启动方式。原创 2013-09-24 13:21:35 · 10573 阅读 · 0 评论 -
Android OpenGL库加载过程源码分析
本文简单介绍OpenGL库的加载过程。OpenGL以动态库的方式提供,因此在使用OpenGL的接口函数绘图前,需要加载OpenGL库,并得到接口函数指针。函数EGLBoolean egl_init_drivers()就是负责OpenGL库的加载。原创 2013-09-24 20:09:31 · 11219 阅读 · 3 评论 -
Android系统Choreographer机制实现过程
在Android4.1之后增加了Choreographer机制,用于同Vsync机制配合,实现统一调度界面绘图.Choreographer构造过程frameworks\base\core\java\android\view\Choreographer.javapublic static Choreographer getInstance() { return sThreadInsta原创 2014-09-24 09:12:15 · 24206 阅读 · 7 评论