摘要: 打印调用栈是android平台问题定位的基本方法,如果需要知道谁在调用某个函数, 可以在此函数中添加打印调用栈函数,弄清楚函数之间的调用关系。 1. Java层打印调用栈方法 RuntimeException here = new RuntimeException("here"); here.fil 阅读全文
posted @ 2018-07-25 16:33 qzhang1535 阅读(212) 评论(0) 推荐(0) 编辑
摘要: SurfaceFlinger合成后就进行图像的输出的工作。在图像输出时,存在硬件合成器与不存在的情况有些差别。软件合成时用到图像缓冲区生产者与消费者模型。首先来看看图像缓冲区的初始化。 调用BufferQueue::createBufferQueue创建图像缓冲区,并得到其生产者和消费者接口 利用上 阅读全文
posted @ 2018-07-24 11:36 qzhang1535 阅读(2406) 评论(0) 推荐(0) 编辑
摘要: android应用中申请的Surface在SurfaceFlinger服务中都有对应有图层Layer与之对应。将这些图层合并且输出到显示外设是SurfaceFlinger的工作重点。本文来分析下合成的过程。合成工作在接收到VSync消息(MessageQueue::REFRESH)后开始。 调用消息 阅读全文
posted @ 2018-07-13 15:50 qzhang1535 阅读(2510) 评论(0) 推荐(0) 编辑
摘要: HWComposer模块产生VSync信号后要经过分发才能送达到关心VSync事件的模块中去。VSync信号分发大致流程为HWComposer SurfaceFlinger DispSync DispSyncSource 各个具体模块。下面具体分析下这个流程。 在上一篇文章中分析到硬件或者软件VSy 阅读全文
posted @ 2018-07-09 18:00 qzhang1535 阅读(916) 评论(1) 推荐(0) 编辑
摘要: Android为了增强界面流畅度引入了VSync机制。VSync信号一般由硬件产生,为了兼容一些老的机器,也可以软件产生。因些,就可以分为硬件VSync和软件VSync。VSync的生成逻辑主要在HWComposer里面。相关文件如下: frameworks/native/services/surf 阅读全文
posted @ 2018-06-26 11:57 qzhang1535 阅读(1129) 评论(0) 推荐(0) 编辑
摘要: SurfaceFlinger有着自己的消息队列MessageQueue,用来处理显示相关的消息,比如Vsync消息。 相关文件: frameworks/native/services/surfaceflinger/MessageQueue.h frameworks/native/services/s 阅读全文
posted @ 2018-06-20 16:56 qzhang1535 阅读(1214) 评论(0) 推荐(0) 编辑
摘要: 在上一篇文章中,主要分析了Surface的创建过程,对于Layer图层的创建并没有深入跟踪分析。这篇文章将分析Layer图层的创建,并分析handle gbp这两个变量的来源。 在SurfaceFlinger中会根据flags的值创建不同的layer。这里主要以创建普通layer为例进行分析。 创建 阅读全文
posted @ 2018-04-23 17:11 qzhang1535 阅读(1142) 评论(0) 推荐(0) 编辑
摘要: Android显示系统层次分析 应用层,app从WindowManager服务获取图层,渲染图层 WindowManager管理层,主要管理APP渲染的图层,调用SurfaceFlinger服务, 创建Surface,并将Surface传递给应用 SurfaceFlinger层,对上层负责Surfa 阅读全文
posted @ 2018-03-31 17:51 qzhang1535 阅读(1415) 评论(0) 推荐(0) 编辑
摘要: 生产者和消费者模型是编程中运用比较广泛的模型。在SurfaceFlinger图像绘制、合成、显示也用到了该模型。利用该模型合理的管理图像缓冲区buffer。让整个android系统从绘制到显示的过程有条不紊的进行。 BufferQueue图像缓冲管理者。其成员函数createBufferQueue创 阅读全文
posted @ 2018-03-27 15:25 qzhang1535 阅读(1781) 评论(0) 推荐(0) 编辑
摘要: 客户端首先通过defaultServiceManager获得IServiceManager接口。然后调用IServiceManager的getSerivice接口得到服务的IBInder接口,该接口指向一个BpBinder实体对象。但是问题是我们通过IBInder接口无法调用到我们的服务,还必须经过 阅读全文
posted @ 2018-03-27 10:20 qzhang1535 阅读(353) 评论(0) 推荐(0) 编辑