marshal_zsx的博客

路漫漫其修远兮,吾将上下而求索
私信 关注
时光如刀
码龄4年

春去冬来,潮起潮落,人生几何; 夏落秋起,风去风来,岁月无痕

  • 95,011
    被访问量
  • 56
    原创文章
  • 58,524
    作者排名
  • 209
    粉丝数量
  • 于 2017-04-16 加入CSDN
获得成就
  • 获得95次点赞
  • 内容获得26次评论
  • 获得186次收藏
荣誉勋章
兴趣领域
  • #Android
    #面试#Android Studio#Flutter#性能优化#Kotlin
TA的专栏
  • Android Input子系统框架分析
    7篇
  • android 输入法框架分析
    3篇
  • Android Camera系统框架分析
    4篇
  • Android surface显示系统源码分析
    9篇
  • Android 包管理机制
  • Android
    49篇
  • kernel
    4篇
  • Makefile
    4篇
  • shell_script
  • C
    1篇
  • C++
    4篇
  • java
    1篇
  • Debug and tools
    1篇
  • SurfaceFlinger
    5篇
  • token
    1篇
  • activity
    1篇
  • 调试工具
    5篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

Android app进程fork启动过程

1.AMS.startProcessLocked//frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java final ProcessRecord startProcessLocked(String processName, ApplicationInfo info, boolean knownToBeDead, int intentFlags,
原创
0评论
0点赞
发布博客于 4 月前

Android的触控重采样算法

1.概述    Android的触控重采样算法非常出色。Android使用触摸外推和触摸内插的组合。触摸插值意味着我们接受两个触摸事件,并在两个触摸事件中间的某个位置创建一个触摸事件。触摸外推意味着我们进行两次触摸事件,并在上一次触摸事件之前的某个位置创建一个触摸事件,或者预测触摸事件的位置。让我们从60hz的LCD刷新显示速率和100hz的触摸屏刷新扫描速率来看一下我们的标准输入。    ...
原创
0评论
1点赞
发布博客于 8 月前

按home键后stopAppSwitches延时5S

1、简介本文是在APP界面点击Home键后,马上在后台启动Activity会延时5秒而引起的源码分析文章。2、现象描述在APP界面,点击Home键后会打开一个悬浮窗,以表示APP在后台运行。点击悬浮窗上的按键会返回APP。就是这么一个简单的过程,却无意中发现了这个BUG。当我点击Home键后,回到主桌面,然后点击悬浮窗上的按钮返回APP,而APP不会马上返回,需要延时一段时间才会启动,开始我...
原创
1评论
0点赞
发布博客于 10 月前

Input子系统框架之InputDispatcher

原始链接:http://gityuan.com/2016/12/17/input-dispatcher/一. InputDispatcher起点上篇文章输入系统之InputReader线程,介绍InputReader利用EventHub获取数据后生成EventEntry事件,加入到InputDispatcher的mInboundQueue队列,再唤醒InputDispatcher线程。本文将介...
原创
0评论
0点赞
发布博客于 11 月前

Systrace 基础知识 - 锁竞争解读

参考连接:https://www.androidperformance.com/2019/12/06/Android-Systrace-Binder/1.Systrace 显示的锁的信息monitor contention with owner Binder:1605_B (4667) at voidcom.android.server.wm.ActivityTaskManagerServ...
原创
0评论
0点赞
发布博客于 2 年前

Systrace 基础知识 - Input 解读

参考连接:https://www.androidperformance.com/2019/11/04/Android-Systrace-Input/1.概述Android 中 Input 的大概处理流程:触摸屏每隔几毫秒扫描一次,如果有触摸事件,那么把事件上报到对应的驱动InputReader 读取触摸事件交给InputDispatcher 进行事件派发 InputDispatcher...
原创
0评论
1点赞
发布博客于 2 年前

Input子系统框架之InputReader

1、概述根据Input子系统框架之深入理解EventHub分析。输入设备扫描完成,并加入epoll中,监听事件。从前面的getEvents函数分析得知,当按键事件发生后,getEvents函数返回。 这里再贴一下Input 处理时间流程图,然后按步骤详细分析。上面的type是linux的输入系统里的事件,具体的值可以查看 查看input.h/* WARNING: DO NOT EDIT, A...
原创
0评论
0点赞
发布博客于 2 年前

Input子系统框架之深入理解EventHub

1、概述InputReaderThread继承自C++的Thread类,Thread类封装了pthread线程工具,提供了与Java层Thread类相似的API。C++的Thread类提供了一个名为threadLoop()的纯虚函数,当线程开始运行后,将会在内建的线程循环中不断地调用threadLoop(),直到此函数返回false,则退出线程循环,从而结束线程。 InputReaderThre...
原创
0评论
3点赞
发布博客于 2 年前

Input子系统框架之IMS的创建与启动

一、概述IMS分为Java层与Native层两个部分,其启动过程是从Java部分的初始化开始,进而完成Native部分的初始化。 IMS在SystemServer.startOtherServices()方法中启动的。IMS的诞生分为两个阶段:· 创建新的IMS对象。调用IMS对象的start()函数完成启动。我们先看下整个启动过程的序列图,然后根据序列图来一步步分析。二、系统启动...
原创
0评论
1点赞
发布博客于 2 年前

Input子系统框架之system层的知识储备

1、必备的Linux知识 inotify和epoll1.1、INotify介绍与使用INotify是一个Linux内核所提供的一种文件系统变化通知机制。它可以为应用程序监控文件系统的变化,如文件的新建、删除、读写等。INotify机制有两个基本对象,分别为inotify对象与watch对象,都使用文件描述符表示。 inotify对象对应了一个队列,应用程序可以向inotify对象添加多个监听。...
原创
0评论
1点赞
发布博客于 2 年前

Input子系统框架之kernel层(Kernel-3.18)

一、Linux Input 子系统框架本文是基于kernel-3.18版本分析的。输入(Input)子系统是分层架构的,总共分为5 层,从上到下分别是:用户空间层(User Space)事件处理层(Event Handler)、输入子系统核心层(Input Core)、硬件驱动层(Input Driver) 、硬件设备层(Hardware)。驱动根据CORE提供的接口,向上报告发生的按键动作。...
原创
0评论
0点赞
发布博客于 2 年前

Android P中Activity的管理机制

1、Activity概述基于Android 9.0的源码剖析, 分析Android Activity启动流程;Android的管理主要是通过Activity栈来进行的。当一个Activity启动时,系统根据其配置或调用的方式,将Activity压入一个特定的栈中,系统处 于运行(Running or Resumed)状态。当按Back键或触发finish()方法时,Activity会从栈中被压出...
原创
0评论
2点赞
发布博客于 2 年前

Android P PowerManagerService分析(一)

1、概述     PowerManagerService是负责管理、协调设备电源管理的系统服务之一,设备常见功能如亮灭屏、亮度调节、低电量模式、保持CPU唤醒等,都会通过PMS的协调和处理。其继承自SystemService,因此具有SystemService子类的共性:具有生命周期方法,由SystemServer启动、注册到系统服务中,通过Binder和其他组件进行交互等。其生命周期方法如下...
原创
0评论
3点赞
发布博客于 2 年前

Android P包管理机制之PackageManager简介

1.PackageManager简介与ActivityManager和AMS的关系类似,PMS也有一个对应的管理类PackageManager,用于向应用程序进程提供一些功能。PackageManager是一个抽象类,它的具体实现类为ApplicationPackageManager,ApplicationPackageManager中的方法会通过IPackageManager与AMS进行进程间...
原创
1评论
1点赞
发布博客于 2 年前

Android P输入法框架系统--输入法显示

1、程序焦点获取事件导致输入法显示    从上面可以知道程序获得焦点时,程序端会先间接的调用IMMS的startInput将焦点View绑定到输入法,然后会调用IMMS的windowGainFocus函数,这个函数就可能显示输入法, 是否显示输入法由焦点view的属性决定。过程流程图如下:代码处理逻辑如下://ViewRootImpl.javacase MSG_WINDOW_FOCUS_...
原创
0评论
1点赞
发布博客于 2 年前

Android P输入法框架系统--view绑定输入法过程

1、概述     IMMS如何处理view绑定输入法事件呢?为了讲解整个绑定过程,我们假设此时输入法service还没启动,这个情况下的输入法绑定是最长的,整个过程经历过如下过程:启动输入法service绑定输入法window的token请求输入法为焦点程序创建一个连接会话将输入法的接口传递回程序client端绑定输入法和焦点view     1-4是和程序相关的,而5是和vie...
原创
0评论
1点赞
发布博客于 2 年前

Android P输入法框架系统--view如何触发绑定

    在PC时代,输入法的原始输入来自实体键盘,鼠标,然后输入法将这些事件对应的ASCII码转换为俄文,中文,当然如果是英文是不需要转换,直接发送即可。而在Android系统里,由于输入法dialog永远没法成为焦点window,所以输入法永远没法获取到按键事件,也就是说输入法的输入数据只能来自触摸事件,输入法显示出键盘(大家称之为软键盘),用户点击键盘UI, 然后输入法将触摸事件所在位置的字符...
原创
0评论
1点赞
发布博客于 2 年前

android IPC通信中的UID和PID识别

https://blog.csdn.net/windskier/article/details/6921672IPCThreadState对象维护了2个变量 pid_t mCallingPid; uid_t mCallingUid;从变量名称来看,这2个变量保存了进程的PID和UID,并且由于这两个变量...
原创
0评论
1点赞
发布博客于 2 年前

Android性能剖析工具——simpleperf

谈到Android上的性能剖析,很多人会想到TraceView,SysTrace。TraceView擅长Method Tracing,与IDE集成,使用方便,不过有时候它的误差让人无法忍受;SysTrace的牛逼之处在于它可以给出整个系统的一些关键模块的性能信息,因此用途广泛。事实上,在AOSP中有另外一个性能剖析工具不为人知,这个安静的小可爱就是今天要介绍的主角—— simpleperf。我们...
原创
0评论
1点赞
发布博客于 3 年前

Android Traceview工具使用

1.概述Trracview性能分析功能另一利器。代码实现:Debug.startMethodTracing(“demo”);Debug.stopMethodTracing();视图:traceview参数说明:Name: 该线程运行过程中所调用的函数名Incl Cpu Time: 某函数占用的CPU时间,包含内部调用其它函数的CPU时间Excl Cpu Time: 某函数占用的...
原创
0评论
1点赞
发布博客于 3 年前

Android Traceview工具使用

1.概述Trracview性能分析功能另一利器。代码实现:Debug.startMethodTracing(“demo”);Debug.stopMethodTracing();视图:traceview参数说明:Name: 该线程运行过程中所调用的函数名Incl Cpu Time: 某函数占用的CPU时间,包含内部调用其它函数的CPU时间Excl Cpu Time: 某函数占用的...
原创
0评论
1点赞
发布博客于 3 年前

android vsnc 工作原理

               &nbsp
转载
0评论
0点赞
发布博客于 3 年前

Android systrace性能工具使用说明

原文网址:http://gityuan.com/2016/01/17/systrace/一、概述保证系统流畅度,也就是保证系统能连续不间断地提供每秒60帧的运行状态。当出现掉帧时(也可称为Jank),需要知道当前整个系统所处的状态,systrace便是最佳的选择,它能手机检测android系统各个组件随着时间的运行状态,并能提示该如何有效地修复问题,接下来说说systrace如何使用以及如何解...
转载
0评论
1点赞
发布博客于 3 年前

Android bootchart工具使用说明

    Bootchart是一个用于linux启动过程性能分析的开源软件工具,在系统启动过程自动收集CPU占用率、进程等信息,并以图形方式显示分析结果,可用作指导优化系统启动过程。Android5.1之前已自带bootchart,但缺省时不被编译,需要显式指定编译。5.1之后的不用编译boot.img. 安装Bootchart 首先,在pc机上安装bootchart工具,命...
原创
0评论
1点赞
发布博客于 3 年前

AndroidO audio系统之AudioPolicyService分析(三)

1.AudioPolicyService基础AudioPolicy在Android系统中主要负责Audio”策略”相关的问题。它和AudioFlinger一起组成了Android Audio系统的两个服务。一个负责管理audio的“路由”,一个负责管理audio“设备”。在Android O 版本的系统中,这两个服务都是在系统启动的过程中,通过main_audioserver.cpp来加载的。...
原创
2评论
7点赞
发布博客于 3 年前

AndroidO audio系统之audioflinger启动分析(二)

1. audioflinger创建过程在Android8.0的音频系统中,AudioFlinger是一个C++的Binder服务,运行在HAL进程中,它是在audioserver.c//frameworks/av/media/audioserver/audioserver.rcservice audioserver /system/bin/audioserver class ma...
原创
0评论
2点赞
发布博客于 3 年前

AndroidO audio系统之框架简介(一)

1、概述       Audio系统在Android中负责音频方面的数据流传输和控制功能,也负责音频设备的管理,它是Android中最复杂的子系统之一。本文将粗略分析一下audio的整体框架及播放、录制流程。不足之处,敬请指正,谢谢!2、音频框架图 2.1 Application层       音频相关的应用软件有: 音乐播放器,电话,声音设置,视频播放器等等。...
原创
4评论
2点赞
发布博客于 3 年前

Android 8.0 系统启动流程之zygote进程(八)

前言在上一篇中我们讲到,init进程会解析.rc文件,并介绍了.rc文件中的语法规则。其中不乏有许多service启动,这些service通常不是普通的服务,文档里面的称呼是daemon(守护进程). 所谓守护进程就是这些服务进程会在系统初始化时启动,并一直运行于后台,直到系统关闭时终止. 我们本篇讲的zygote进程就是其中之一,zygote进程主要负责 创建Java虚拟机,加载系统资源...
原创
0评论
0点赞
发布博客于 3 年前

Android 8.0 系统启动流程之init.rc解析与service流程(七)

1、概述    上一篇文章中我们介绍了一下init.rc文件中的语法规则,而本文将分析如何解析rc文件,并对rc文件中的某一service启动过程进行分析。2、解析.rc文件之前我们在文档中看到.rc文件主要有根目录下的 /init.rc ,以及{system,vendor,odm}/etc/init/这三个目录下的 *.rc , 然后就是如果有一个特殊目录被设置的话,就替代这些目录...
原创
0评论
5点赞
发布博客于 3 年前

Android 8.0 系统启动流程之init.rc语法规则(六)

1、概述    init经过前两个阶段后,已经建立了属性系统和SELinux系统,但是init进程还需要执行很多其他的操作,还要启动许多关键的系统服务,但是如果都是像属性系统和SELinux系统那样一行行代码去做,显得有点杂乱繁琐,而且不容易扩展,所以Android系统引入了init.rc。     init.rc是init进程启动的配置脚本,这个脚本是用一种叫Android Init La...
原创
0评论
6点赞
发布博客于 3 年前

Android 8.0 系统启动流程之init进程--第二阶段(五)

1、概述    上一篇中讲了init进程的第一阶段,我们接着讲第二阶段,主要有以下内容创建进程会话密钥并初始化属性系统进行SELinux第二阶段并恢复一些文件安全上下文新建epoll并初始化子进程终止信号处理函数设置其他系统属性并开启系统属性服务2、创建进程会话密钥并初始化属性系统由于之前第一阶段最后有设置INIT_SECOND_STAGE,所以在第二阶段is_fir...
原创
0评论
0点赞
发布博客于 3 年前

Android 8.0 系统启动流程之init进程--第一阶段(四)

1、概述    上一篇中讲到,Linux系统执行完初始化操作最后会执行根目录下的init文件,init是一个可执行程序,它的源码在platform/system/core/init/init.cpp。init进程是用户空间的第一个进程,我们熟悉的app应用程序都是以它为父进程的,init进程入口函数是main函数,这个函数做的事情还是比较多的,主要分为三个部分init进程第一阶段ini...
原创
4评论
1点赞
发布博客于 3 年前

Android 8.0 系统启动流程之Linux内核启动--kernel_init进程(三)

    在上一篇文章中详细的分析了kthreadd进程的启动,init进程也是有idle进程去触发启动的,init进程分为前后两部分,前一部分是在内核启动的,主要是完成创建和内核初始化工作,内容都是跟Linux内核相关的;后一部分是在用户空间启动的,主要完成Android系统的初始化工作。     本文着重分析init进程的前一部分,init进程的后一部分将在下一篇文章中讲述。1、init进...
原创
0评论
1点赞
发布博客于 3 年前

Android 8.0 系统启动流程之Linux内核启动--kthreadd进程(二)

    在上一篇文章中详细的分析了idle进程的启动,idle进程启动过程中会启动init进程与kthreadd进程,本文将详细分析kthreadd进程的启动过程。1、kthreadd进程启动由上篇文章分析可知,在rest_init函数中启动了kthreadd进程static noinline void __init_refok rest_init(void){ .....
原创
0评论
2点赞
发布博客于 3 年前

AndroidO Treble架构下HIDL服务Java框架实现

前面介绍了HIDL服务在native层的实现过程,包括HIDL服务加载创建、服务注册、服务查询过程等,那么Java层是否也实现了相关的服务框架呢? 通常情况下,所有的Hal都实现在native层面,每个hal进程都是一个native进程,由init进程启动,在hal进程启动时会完成HIDL服务注册...
转载
2评论
3点赞
发布博客于 3 年前

AndroidO Treble架构下HIDL服务查询过程

通过前面的分析我们知道,Hal进程启动时,会向hwservicemanager进程注册hidl服务,那么当Framework Server需要通过hal访问硬件设备时,首先需要查询对应的hidl服务,那么Client进程是如何查询hidl服务的呢?这篇文章将展开分析,这里再次以IComposer为...
转载
0评论
2点赞
发布博客于 3 年前

AndroidO Treble架构下Tranport类型查询过程

通过前面文章的分析,我们知道,Client进程在查询hidl服务接口对象时,会根据该hidl服务的Tranport类型选择加载方式,如果是HWBINDER,那么就从hwservicemanager中查询,如果是PASSTHROUGH,那么就通过PassthroughServiceManager将h...
转载
0评论
1点赞
发布博客于 3 年前

AndroidO Treble架构下hwservicemanager启动过程

hwservicemanager是hidl服务管理中心,负责管理系统中的所有hidl服务,由init进程启动。[html] view plain copy print?service hwservicemanager /system/bin/hwservicemanager&n...
转载
0评论
0点赞
发布博客于 3 年前

AndroidO Treble架构下Binder对象的转换过程

上文中详细分析了Hal的整个启动过程,这里将补充上文中没有详细分析的Binder对象转换过程,下图为hidl服务的完整注册过程:1.  HwcHal继承于IBase类,是对hw_module_t的封装,该对象位于Hal进程空间;2.  通过hwservicemanager的bi...
转载
0评论
1点赞
发布博客于 3 年前

AndroidO Treble架构下Hal进程启动及HIDL服务注册过程

通过前面对Treble架构的介绍,我们知道,Android Framework进程和Hal分离,每个Hal独立运行在自己的进程地址空间,那么这些Hal进程是如何启动的呢?本文以composer hal为例展开分析。在以下路径有composer hal的rc启动脚本:hardware/interfa...
转载
2评论
1点赞
发布博客于 3 年前

AndroidO Treble架构下的变化

AndroidO引入Treble架构后,有那些变化呢?1. 增加了多个服务管家,AndroidO之前版本有且只有一个servicemanager,现在增加到3个,他们分管不同的服务。2.增加了binder通信库,这是为了适配binder域的扩展。3.增加了binder域,系统定义了3个binder...
转载
0评论
0点赞
发布博客于 3 年前

AndroidO Treble架构下的接口文件编译

HIDL是一种接口定义语言,描述了HAL和它的用户之间的接口。同aidi类似,我们只需要为hal定义相关接口,然后通过hidl-gen工具即可自动编译生成对应的C++或者java源文件,定义hal接口的文件命名为xxx.hal,为了编译这些.hal文件,需要编写相应的Android.bp或者...
转载
0评论
0点赞
发布博客于 3 年前

AndroidO Treble架构分析

从AndroidO开始,google引入了Treble架构,目的是为了方便系统升级,将oem定制的东西和Framework分离。AndroidO之前的版本:在此之前的Android系统架构当中,Android Framework与Android HAL是打包成一个system.img的,而且Fra...
转载
0评论
1点赞
发布博客于 3 年前

Android 8.0 系统启动流程之Linux内核启动--idle进程(一)

1、概述    上电后首先通过汇编指令去加载uboot引导程序,然后由uboot从分区中加载内核镜像等,并启动内核。本文将从启动内核开始分析,对于汇编启动的过程,此处不做分析,有兴趣的可以自行研究。     Linux内核启动主要涉及3个特殊的进程,idle进程(PID = 0), init进程(PID = 1)和kthreadd进程(PID = 2),这三个进程是内核的基础。     i...
原创
0评论
4点赞
发布博客于 3 年前

surfaceflinger之buffer消费过程

    上一篇分析了buffer的生产过程,本文着重阐述生产者对buffer消费过程。这个过程需要弄清一下几个问题:   1、消费者是谁?   2、消费者如何从BufferQueue获取buffer显示?   3、buffer显示完成后如何释放?1、消费者   SurfaceFlinger将显示数据刷新到屏幕,所以消费者指的是surfaceflinger。surfacefl...
原创
0评论
1点赞
发布博客于 3 年前

surfaceflinger之buffer生产过程

  上一篇分析了surfaceflinger的生产-消费者模型,本文着重阐述生产者对buffer生产过程。这个过程需要弄清一下几个问题:   1、生产者是谁?   2、生产者如何从BufferQueue获取空闲buffer?   3、绘制完成后的buffer如何压入BufferQueue中,以便消费者获取?1、生产者应用获取画布surface流程已经详细地分析了APP如何通过re...
原创
0评论
1点赞
发布博客于 3 年前

surfaceflinger之buffer生产者与消费者模型简介

  应用获取画布surface流程分析了申请Surface时,在SurfaceFlinger中会创建对应的layer。而在创建layer时,就会去创建生产者消费者模型。本文着重阐述生产者消费者的创建及使用。1、模型创建入口1.1 layer创建第一次由强智能指针(sp)引用时,会执行onFirstRef方法void Layer::onFirstRef() { // Cre...
原创
0评论
1点赞
发布博客于 3 年前

activity令牌token

1、概述    activity的启动过程中涉及到Android framework中的很多个层次,如活动管理者、窗口管理者、客户端应用APP。它们之间是如何实现一一对应的? 2、Token创建:    activity启动过程会去创建ActivityRecord对象记录该活动的信息,在执行构造函数就会去创建令牌Token –>ActivityRecord.javaAct...
原创
0评论
1点赞
发布博客于 3 年前

应用获取画布surface流程

    前面我们已经分析了activity通过SurfaceComposerClient在surfaceflinger服务中创建了一个Client。在本文中,我们将详细分析应用获取画布Surface流程。在分析Surface创建流程时,会涉及显示缓冲区队列相关知识,本文只是简单一笔带过,将在后面做具体分析。1、申请创建Surface1.1 viewrootImpl.java在应用启动时...
原创
0评论
1点赞
发布博客于 3 年前

SurfaceComposerClient与SurfaceFlinger建立通信流程

  前面我们已经分析了activity从创建到调用本地方法去创建SurfaceComposerClient的过程。在本文中,我们将详细分析SurfaceComposerClient创建时是如何绑定SurfaceFlinger。1、申请SurfaceComposerClient入口[-> android_view_SurfaceSession.cpp]static jlong na...
原创
0评论
1点赞
发布博客于 3 年前

Activity创建到与SurfaceComposerClient建立通信流程

1. 概述  应用程序是通过activity来展现,那么activity是如何完成绘制并显示呢?其实应用程序的显示是和surface有关,那么activity与surface有是什么关系呢?接下来几篇文章将以这个为出发点分析,应用程序是如何一步步通过activity、surface呈现出用户界面的。2. activity的创建  应用启动时zygote会fork一个子进程作为APP...
原创
0评论
1点赞
发布博客于 3 年前

SELinux 权限问题调试

1.概述  SELinux全称是Security Enhanced Linux,它拥有一个灵活而强制性的访问控制结构,旨在提高Linux系统的安全性,提供强健的安全保证,可防御未知攻击2.问题定位  通过指令cat /proc/kmsg | grep denied,或者kernel的Log中定位到标志性log(如:logcat |grep avc),出错信息如下所示:avc: denied { cr
原创
0评论
1点赞
发布博客于 4 年前

Android surfaceflinger (4) -Vsync产生上报流程

1、垂直同步信号VSync(即V-Sync垂直同步)的具体含义和用途文章不细说,看下图的VSync的位置大致也就知道它的用途(简单理解成是硬件定时中断貌似也可以,周期性的硬件中断,频率为60Hz,周期为0.0167s,也就是16ms)。 本文主要关注以下几个问题: \ (1)VSync是如何产生的? \ (2)VSync是如何分发到应用进程的? 2、流程框图3、VSync产生VSync事件
原创
0评论
1点赞
发布博客于 4 年前

Android surfaceflinger(3)-DisplayDevice封装

上一篇文章介绍了HWComposer的创建及初始化,本文将根据上述创建的HWComposer封装出DisplayDevice对象进行分析。1、引言  在此之前已经分析了HWComposer,接下来继续分析SurfaceFlinger::init的后续操作void SurfaceFlinger::init() { //详见http://blog.csdn.net/marshal_zsx/art
原创
0评论
1点赞
发布博客于 4 年前

android surfaceflinger(2)-HWComposer初始化

上一篇文章介绍了init进程去启动surfaceflinger的过程;本文将继承上篇文章继续往下分析,上文分析到SurfaceFlinger::init();本文将主要分析init()里面的HWComposer初始化。 时序图如下: 1、HWComposer创建void SurfaceFlinger::init() { // Initialize the H/W composer ob
原创
0评论
2点赞
发布博客于 4 年前

android surfaceflinger(1)-启动初始化1

从本篇文章起,将对Android display系统框架进行分析,分析Android display必然涉及到surfaceflinger,故先分析一下,surfaceflinger的启动初始化流程。若文中有什么分析不对的,希望大家多多指出分享。谢谢!1、surfaceflinger启动触发  surfaceflinger是Android系统的一个重要后台本地服务,它是有init进程去启动的。1.1
原创
0评论
1点赞
发布博客于 4 年前

开机动画制作修改

1、概述Android的开机启动流程大致可以分为三个阶段,第一阶段为kernel logo图片显示(本文不做分析);第二阶段为Android logo图片显示,第三阶段为Android开机动画。2、修改启动log2.1 init.cppint main(int argc, char** argv) {......queue_builtin_action(console_init_action,
原创
2评论
1点赞
发布博客于 4 年前

指纹识别分析之enroll流程

1、调用时序图2、app层2.1 FingerprintEnrollEnrolling.java文件路径: /packages/apps/Settings/src/com/android/settings/fingerprint/FingerprintEnrollEnrolling.java protected void onStart() { super.onStart(
原创
2评论
2点赞
发布博客于 4 年前

指纹识别分析之framework初始化流程

1、概述  在系统开机的时候,会创建systemserver进程,该进程会启动framework层的各种后台服务,其中包括FingerprintService、fingerprintd等服务。初始化流程时序如下: 2、SystemServer.java文件路径:/frameworks/base/services/java/com/android/server/SystemServer.java2.
原创
0评论
3点赞
发布博客于 4 年前

camera的startpreview流程

一、概述  本文从framework中的camera native接口开始分析preview流程,文中的…..表示部分代码省略。二、camera CS简易框图三、preview调用过程2.1 camera.javapublic native final void startPreview();camera进行预览时,APP最终调用的是startPreview,而startPreview是Java本地
原创
2评论
2点赞
发布博客于 4 年前

指纹框架--指纹选项加载(一)

一、概述  近几年手指指纹识别快速发展,基本所有的手机都配套指纹识别器;Android6.0开始Google提供标准的上层指纹框架。下面先分析一下;系统中的设置是如何判断要不要加载指纹选项?二、指纹框架示意图三、指纹选项加载过程1、–>SecuritySettings.java 入口1.1 onResume() public void onResume() { super.
原创
0评论
1点赞
发布博客于 4 年前

Makefile函数补充

1、概述  前面介绍了makefile中的几个常用函数,还有一些比较重要的函数值得注意,这边做个补充。2、循环函数- -foreach 函数$(foreach <var>,<list>,<text> )  这个函数的意思是,把参数<list>中的单词逐一取出放到参数<var>所指定的变量中,然后再执行<text>所包含的表达式。每一次<text>会返回一个字符串,循环过程中,<text>的所返回的每
原创
0评论
1点赞
发布博客于 4 年前

Makefile函数使用

1、函数的调用语法  函数调用,很像变量的使用,也是以“$”来标识的,其语法如下:$(<function> <arguments>,<arguments>)或是${<function> <arguments>,<arguments>}<function>就是函数名<arguments>是函数的参数  参数间以逗号“,”分隔,而函数名和参数之间以“空格”分隔。函数调用以“$”开头,以圆括号或花括
原创
0评论
1点赞
发布博客于 4 年前

Makefile变量使用

1、变量使用概述  变量在声明时需要给予初值,而在使用时,需要给在变量名前加上“$”符号,但最好用小括号“()”或是大括号“{}”把变量给包括起来。如果你要使用真实的“$”字符,那么你需要用“$$”来表示。变量可以使用在许多地方,如规则中的“目标”、“依赖”、“命令”以及新的变量中。2、“=”、“:=”与“?=”区别2.1 “=”操作符  在“=”左侧是变量,右侧是变量的值,右侧变量的值可以定义在
原创
0评论
1点赞
发布博客于 4 年前

Makefile简介1

1、Makefile的规则目标文件:依赖文件 [tab键] 执行的命令(任意的Shell命令) 每个命令行前都必须有tab符号。 举例: foo.o: foo.c defs.h # foo模块 gcc -c -g foo.c2、在规则中使用通配符make支持三各通配符:“*”,“?”和“[…]”。这是和Unix的B-Shell是相同的。3、文件搜寻3.1
原创
0评论
1点赞
发布博客于 4 年前

camera HAL与驱动交互初始化

1、概述  前面提到注册一个字符设备时,attach上file_operation添加到system;然而file_operations 是为上层调用底层提供的接口;即HAL层就是通过调用file_operations中提供的接口,继而调用驱动进行对硬件的操作。2、file_operations接口2.1 open接口static const struct file_operations g_st
原创
0评论
3点赞
发布博客于 4 年前

select/poll/epoll对比分析

转载地址:http://gityuan.com/2015/12/06/linux_epoll/ select/poll/epoll都是IO多路复用机制,可以同时监控多个描述符,当某个描述符就绪(读或写就绪),则立刻通知相应程序进行读或写操作。本质上select/poll/epoll都是同步I/O,即读写是阻塞的。一、select 原型:int select (int n, fd_set *rea
转载
0评论
1点赞
发布博客于 4 年前

Camera 驱动加载

一、概述  一般在 Linux 设备驱动模型中,我们只需要关心总线、设备、驱动这三个实体。总线会充当红娘对加载于其上的设备与驱动进行配对,对于 Camera 模块也不例外,下面从总线、设备、驱动的角度来分析 Camera 模块驱动的注册、匹配与加载过程。本文以MTK平台为例。二、驱动加载过程  驱动加载都是以module_init(XXX)开始,如下所示:module_init(CAMERA_HW_
原创
2评论
2点赞
发布博客于 4 年前

camera驱动概述

camera驱动概述1 概述    camera模块是经常进行调试修改的模块,所以熟悉camera的工作流程以及工作原理将会大大的提供工作效率,但对于整个android系统camera是个十分复杂的模块,下面只是对camera的驱动加载进行分析。2 名词释义2.1 四个供电a) VCAMD 就是DVDD数字供电,DVDD电压用CAMERA_POWER_VCAM_D表示;b) VCAM_I
原创
2评论
3点赞
发布博客于 4 年前