android显示系统
文章平均质量分 88
kc专栏
深入探索android Framework层代码,博客持续更新中!!!
展开
-
显示 VSync信号
VSync是垂直同期(Vertical Synchronization)的简称。基本的思路是将你的FPS和显示器的刷新率同期起来。其目的是避免一种称之为"撕裂"的现象。再下面我将详细介绍这些内容。每一台CRT显示器都有自己的刷新率。其单位是HZ.其数值是显示器每秒钟更新画面的次数。不同的显示器支持再不同分辨率下的不同刷新率。它的范围可以从低到60高到100。注意它不是你游戏中所转载 2016-09-28 10:35:12 · 2012 阅读 · 0 评论 -
Android6.0 VSync信号如何到用户进程
在http://blog.csdn.net/kc58236582/article/details/52763534博客的VSync信号的分发过程那节中我们已经详细分析了VSync信号的分发过程,其中EventThread主要就是发送VSync信号。一、DisplayEventReceiver.java这里我们先从DisplayEventReceiver这个java类来分析:我们原创 2016-10-22 15:36:49 · 4792 阅读 · 0 评论 -
Andrdoid6.0 DisplayManagerService
之前在分析power模块的时候,需要设置背光那个时候分析过DisplayManagerService,但是不够详细、系统。前面在分析WMS旋转屏幕的时候,也涉及到了DisplayManagerService,所以我准备详细分析下。一、缺省设备我们先看DisplayManagerService在SystemServer中调用的顺序。先是构造了对象,然后调用了windowManagerAndI原创 2016-12-22 16:44:24 · 4071 阅读 · 0 评论 -
Android6.0 亮屏灭屏流程(DisplayPowerController、WMS)(一)WMS绘制
亮屏、灭屏流程整个流程涉及的模块比较多,包括PowerManagerService、DisplayPowerControl、WMS、AMS。因此在分析完WMS之后,我们把这块也分析下。DisplayPowerControl我们知道灭屏流程的发起是在PowerManagerService中,会通过updatePowerState函数调用updateDisplayPowerStateL原创 2017-01-19 15:22:34 · 7873 阅读 · 1 评论 -
Android 用户进程软件绘制过程
之前在这篇博客中http://blog.csdn.net/kc58236582/article/details/52437855我们分析过应用在ViewRootImpl的drawSoftware函数中完成绘制下面我们来看下这个函数,它先调用了Surface的lockCanvas获取一个Canvas,然后再调用surface.unlockCanvasAndPost来表示绘制结束。 pr原创 2016-10-21 11:07:33 · 4125 阅读 · 1 评论 -
Android6.0 亮屏灭屏流程(DisplayPowerControler、WMS)(二)亮度设置
上一篇博客我们主要分析了在setScreenState中调用PhoneWindowManager的一些流程,在setScreenState中先是调用了DisplayPowerState的setScreenState函数。上篇博客我们没有分析,这篇博客我们先从这个函数开始分析,主要分析下亮度的设置流程。 public void setScreenState(int state) {...原创 2019-01-22 15:09:19 · 4838 阅读 · 3 评论 -
Android6.0 SurfaceControl分析(一)SurfaceControl创建&使用 Surface创建&使用
一、SurfaceControl的创建SurfaceControl的创建是在ViewRootImpl中调用requestLayout,最后到WMS的relayoutWindow函数创建SurfaceControl对象。是通过WindowState的WindowStateAnimator对象调用createSurfaceLocked对象创建的。最后再通过outSurface传给ViewRootI原创 2017-03-22 18:49:15 · 18949 阅读 · 0 评论 -
Android6.0 SurfaceControl分析(二)SurfaceControl和SurfaceFlinger通信
上篇博客我们说到SurfaceControl会调用openTransaction和closeTransaction来一起讲所有SurfaceControl的属性等传给SurfaceFlinger。我们来看下这个过程。一、SurfaceControl我们先来看下SurfaceControl.java中的相关函数,都是调用了JNI函数。 public static void open原创 2017-03-24 10:20:31 · 8468 阅读 · 0 评论 -
CPU和GPU的设计区别
转载地址:http://www.cnblogs.com/biglucky/p/4223565.htmlCPU和GPU之所以大不相同,是由于其设计目标的不同,它们分别针对了两种不同的应用场景。CPU需要很强的通用性来处理各种不同的数据类型,同时又要逻辑判断又会引入大量的分支跳转和中断的处理。这些都使得CPU的内部结构异常复杂。而GPU面对的则是类型高度统一的、相互无依赖的大规模数据和不需转载 2017-03-24 10:40:53 · 992 阅读 · 0 评论 -
Android中的GraphicBuffer同步机制-Fence
转载地址:http://blog.csdn.net/jinzhuojun/article/details/39698317Fence是一种同步机制,在Android里主要用于图形系统中GraphicBuffer的同步。那它和已有同步机制相比有什么特点呢?它主要被用来处理跨硬件的情况,尤其是CPU,GPU和HWC之间的同步,另外它还可以用于多个时间点之间的同步。GPU编程和纯CPU编程一个很大的转载 2017-04-12 11:32:21 · 1890 阅读 · 0 评论 -
显示Gralloc模块分配内存(buffer_handle_t、private_handle_t数据结构的关系)
这篇文章我们主要分析下显示中gralloc模块分配内存以及一些数据结构的介绍。在博客http://blog.csdn.net/kc58236582/article/details/52681363中,我们分析过了从BufferQueueProducer的dequeueBuffer函数开始分配内存的流程。我们直接从如下开始分析。分配内存流程我们是调用了GraphicBufferAlloc原创 2017-04-13 10:59:50 · 7678 阅读 · 0 评论 -
Android6.0 显示系统(一) Surface创建
之前在分析Activity的时候,我们分析过Surface创建。这个系列的博客是讲述显示系统,这里再系统的分析下Surface创建过程。之前我们分析在Activity在调用attach方法时,建立ViewRootImpl,以及创建其Surface过程,还有在WMS中创建Surface的过程。这篇博客我们通过另外一个方式分析,但是其实质是一样的。一、应用层创建Surface应原创 2016-09-27 10:58:59 · 12784 阅读 · 1 评论 -
Android6.0 显示系统(二) SurfaceFlinger创建Surface
接上篇博客分析到SurfaceComposerClient中调用createSurface函数会最后调用到SurfaceFlinger的Client的createSurface函数。我们来看下这个函数,其handle和gbp都是Binder对象,gbp就是图像缓冲区对象。这个handle对象的作用和前面介绍Activity中的token作用类似,也是利用Binder的唯一性为Surface生成原创 2016-09-27 15:17:04 · 6453 阅读 · 0 评论 -
android gralloc 流程分析
Android 中 lcd 是一个帧缓冲设备,驱动程序通过处理器的 lcd 控制器将物理内存的一段区域设置为显存,如果向这段内存区域写入数据就会马上在 lcd 上显示出来。Android 在 HAL 中提供了gralloc 模块,封装了用户层对帧缓冲设备的所有操作接口,并通过 SurfaceFlinger 服务向应用提供显示支持。在启动过程中系统会加载 gralloc 模块,然后打开帧转载 2016-09-29 15:41:28 · 1762 阅读 · 0 评论 -
HAL层保存Layer数据
HAL层增加每个layer的dump数据保存在文件中//dump layer but need selinux permission: surfaceflinger default no permission to writestatic void dump_layer_list( malidp_hwc_device_t* dev, hwc_display_contents_1_t * H原创 2016-10-31 09:14:48 · 1827 阅读 · 1 评论 -
OpenGL ES入门
转载地址:http://blog.csdn.net/mkhgg/article/details/6738912一、前言OpenGL ES是Khronos Group创建的一系列API中的一种(官方组织是:http://www.khronos.org/)。在桌面计算机上有两套标准的3DAPI:Direct3D和OpenGL。Direct3D实际上是运行在windows操作系统上的标准转载 2016-10-21 15:40:42 · 1090 阅读 · 0 评论 -
Android6.0 图像合成过程详解(二) doComposition函数
上篇博客分析到setUpHWComposer函数,这里我们继续分析图像合成的过程从doComposition函数开始,以及在这过程中解答一些上篇博客提出的疑问。一、doComposition合成图层doComposition这个函数就是合成所有层的图像void SurfaceFlinger::doComposition() { ATRACE_CALL(); co原创 2016-10-20 11:17:07 · 7553 阅读 · 1 评论 -
Android6.0 图像合成过程详解(一) setUpHWComposer函数
上一篇博客分析了,用户进程如何申请一个GraphicBuffer的过程。这篇博客我们进一步分析图像合成过程,其中也解答之前的一些疑惑:1. 之前碰到的不支持硬件模块2. DisplayDevice类3. 消费者的onFrameAvailable函数我们直接分析合成的过程,具体的流程我们http://blog.csdn.net/kc58236582/article/details/5原创 2016-10-19 18:35:36 · 9691 阅读 · 1 评论 -
Android6.0 显示系统GraphicBuffer分配内存
之前分析了显示系统的大致流程,其中有几个地方不是很清楚,这里我专门写几篇专题。这篇先来看GraphicBuffer分配内存,我们在之前的博客中分析到用户进程创建一个Surface,最后返回的参数gbp是sp类型的,过程之前都分析过了,我们就不分析了,这个gbp是在Layer的onFirstRef中创建的。在BufferQueue的createBufferQueue中创建了producer和原创 2016-10-17 16:18:52 · 5858 阅读 · 0 评论 -
Android6.0 显示系统(六) 图像的输出过程
上篇博客分析到SurfaceFlinger收到了VSync信号后,调用了handleMessageRefresh函数,这篇博客主要就是分析这个函数,我们先看看它的代码:void SurfaceFlinger::handleMessageRefresh() { ATRACE_CALL(); static nsecs_t previousExpectedPresent = 0;原创 2016-10-11 16:23:19 · 12997 阅读 · 7 评论 -
Android6.0 显示系统(五) SurfaceFlinger服务
SurfaceFlinger是一个独立的进程,我们来看下init.rc关于SurfaceFlinger的代码,我们可以看到SurfaceFlinger是属于core服务的。service surfaceflinger /system/bin/surfaceflinger class core user system group graphics drmrpc o原创 2016-10-10 10:57:06 · 19608 阅读 · 0 评论 -
Android6.0 显示系统(四) 图像显示相关
Linux通常使用Framebuffer来用作显示输出,Framebuffer就是一块内存区域,它通常是显示驱动的内部缓冲区在内存中的映射。一旦用户进程把图像数据复制到Framebuffer中,显示驱动会一个像素一个像素地扫描整个Framebuffer,并根据其中的值更新屏幕上像素点的颜色。驱动中这种更新屏幕的动作是固定的,它的周期就是我们常说的刷新率。 但是在屏幕更新一半时,用户进程更原创 2016-09-29 11:30:06 · 3897 阅读 · 1 评论 -
Android6.0 显示系统(三) 管理图像缓冲区
上篇博客最后分析到MonitoredProducer对象,这个对象只是一个代理,真正实是BufferQueueProducer类,这个对象和BufferQueueCore有关联,可以管理最多达64块的缓冲区。Surface可以理解为一张画布,那么Surface为何要和一个缓冲区队列相关呢?在播放动画时,美妙至少要播放24帧画面才能形成比较真实的动画效果。而这些数据是通过cpu解码得到的,准备他们需原创 2016-09-27 18:26:15 · 13145 阅读 · 0 评论 -
显示HWC合成(hwc_display_contents_1_t,hwc_layer_1_t数据结构关系)
在之前的博客中,分析了SurfaceFlinger的流程,以及hwc和Gralloc模块的大致功能,但是对其中一些数据结构不是很清楚,这篇博客我们主要从数据结构入手。创建hwc_display_contents_1_t我们先来看看setUpHWComposer函数中如下代码,会遍历各个display(每个显示设备),然后调用HWComposer的createWorkList函数,并且把当前原创 2017-04-13 15:46:57 · 7570 阅读 · 0 评论