在上一篇Android Project Butter分析中介绍了Android4.1通过引入VSync机制来改善显示效果,并分析了VSync机制的原理。本文主要分析VSync信号的产生过程。VSync信号产生有两种方式,一种是硬件中断产生,另一种是使用软件模拟产生,至于使用何种方式产生VSync信号,就和硬件系统配置有关。在Android4.1以后的版本中,定义了HWComposer硬件抽象模块来负责产生VSync信号。HWComposer硬件抽象层定义: hardware\libhardware\modules\…

2013年11月26日 0条评论 9点热度 阅读全文

在Android SurfaceFlinger服务启动过程源码分析中详细分析了SurfaceFlinger的整个启动过程,我们知道,在SurfaceFlinger线程执行过程中,循环调用waitForEvent()函数等待消息事件的到来 bool SurfaceFlinger::threadLoop() { waitForEvent(); return true; } 而waitForEvent函数则是调用SurfaceFlinger中的消息队列的waitMessage()函数来等待消息事件 void Surfac…

2013年11月9日 0条评论 8点热度 阅读全文

在上一篇 Android远程代理对象BpSurface的获取过程源码分析文章中,介绍了应用程序在SurfaceFlinger服务端创建对应的Layer对象过程,同时返回BpSurface远程代理对象给应用程序端,应用程序得到BpSurface代理对象后,将构造SurfaceControl对象: sp<ISurface> surface = mClient->createSurface(&data, name,display, w, h, format, flags); if (surfac…

2013年10月9日 0条评论 7点热度 阅读全文

Binder进程间通信机制在Android系统中无处不在,SurfaceFlinger服务依然采用Binder通信方式,每个应用程序进程在请求SurfaceFlinger服务时,首先需要获取SurfaceFlinger服务的代理对象,通过该 代理对象请求SurfaceFlinger为该应用程序进程在SurfaceFlinger服务端创建一个Client对象,该 对象专门接收处理当前应用程序的请求。Android系统中SurfaceFlinger的设计框架如下: 在Android SurfaceFlinger服务启动…

2013年10月3日 0条评论 7点热度 阅读全文

Android图形缓冲区分配过程源码分析中介绍了图形buffer的分配过程,图形buffer可以从系统帧缓冲区分配也可以从内存中分配,分配一个图形buffer后还需要将该图形缓冲区映射到分配该buffer的进程地址空间来,在Android系统中,图形buffer的管理由SurfaceFlinger服务来负责,在Android SurfaceFlinger服务启动过程源码分析中我们了解到SurfaceFlinger可以以服务进程的方式启动也可以以服务线程的方式在SystemServer进程中启动,如果是以服务进程的方…

2013年10月2日 0条评论 11点热度 阅读全文

在上一篇文章Android图形显示之硬件抽象层Gralloc介绍了Gralloc模块的定义,Gralloc模块中的fb设备的打开过程及gpu设备的打开过程。关于Gralloc模块的加载过程在Android硬件抽象Hardware库加载过程源码分析中已经详细介绍过了,通过Android图形显示之硬件抽象层Gralloc的介绍,相信大家对Gralloc模块的设计有了大概的了解,本文在前文的基础上继续分析Android系统的图形显示内容。我们知道在Gralloc模块中定义了gpu设备来分配图形缓冲区,同时在上一篇文章中已…

2013年10月2日 0条评论 9点热度 阅读全文

Android系统采用OpenGL绘制3D图形,使用skia来绘制二维图形;OpenGL源码位于: frameworks/native/opengl frameworks/base/opengl 本文简单介绍OpenGL库的加载过程。OpenGL以动态库的方式提供,因此在使用OpenGL的接口函数绘图前,需要加载OpenGL库,并得到接口函数指针。函数EGLBoolean egl_init_drivers()就是负责OpenGL库的加载。 EGLBoolean egl_init_drivers() { EGLBoo…

2013年9月24日 0条评论 5点热度 阅读全文

Android系统的SurfaceFlinger服务有两种启动方式:1)在SystemServer进程中以服务线程的方式提供服务;2)启动SurfaceFlinger独立的进程通过服务。第一种方式是在SystemServer进程启动过程中启动SurfaceFlinger服务的,而第二中方式是在Android启动脚本init.rc中配置SurfaceFlinger服务,通过init进程来启动的。下面就分别介绍SurfaceFlinger的两种启动方式。 1 服务线程启动方式 在 Android 开关机动画显示源码分析…

2013年9月24日 0条评论 7点热度 阅读全文