Android智能座舱
文章平均质量分 88
Dwyane03
这个作者很懒,什么都没留下…
展开
-
Android 车载虚拟化底层技术-显示虚拟化(双card)总览
但实际芯片的屏接口数量有限。但对于容器相关方案,或要求显示隔离的场景,是需要进行显示虚拟化的。一般的Android系统或Linux系统自带的SDK包是不支持虚拟化的,需要跟芯片厂商共同调试,实现kernel层的/dev/dri/card的虚拟化。上面的每个虚拟屏,配置成功后,其实使用的还是同一个/dev/dri/card0. 默认情况下Android系统会镜像primary屏的显示。=================方案实现详情及修改patch见公众号或下方链接=====================原创 2024-10-02 17:10:44 · 1122 阅读 · 0 评论 -
Android Display性能问题教战手册5-SF/HWC内存使用问题
在Android中Buffer需要在多个进程间传递使用的Module有很多, 但用量比较明显,无法回避的主要都在MM相关module中, 其中显示Graphic图形使用的Buffer是最为频繁的, Buffer会在。在meminfo中的 EGL mtrack 部分就是代表 dma buf的用量, 如果这部分用量异常则需要厘清dma buf的使用情况。dma-buf是一个多进程间的buffer共享的机制, 本节主要介绍针对display部分相关的dma-buf如何做初步的分析。原创 2024-09-23 16:23:42 · 1137 阅读 · 0 评论 -
Android Display性能问题教战手册4-典型案例分析
3,按照理解,在新的一帧Buffer没有Ready,还没有Config到driver之前,3,此题根据我们的梳理,问题出现在Launcher,比较明显的是如下图中。,所以这帧SF无法使用这个Buffer,见第一张图的。,表示这一帧的Launcher的Buffer。2,应用的进入和退出参与的图层主要就是应用的。,那么首先就要明确发生问题的trace段,触发的,说明是前一个用#1 Buffer的。),表示这个Layer没有被更新,所以。的位置,#1才被present出去(这一帧的处理见图中标示,应该是到。原创 2024-09-23 14:52:08 · 1004 阅读 · 0 评论 -
Android Display性能问题教战手册3
在code中位置如下:shift的值一般为sf_duration/period,具体可以直接查看trace中的打印值。以此trace为例,sfWorkDuration为15.1,period是90hz,最终结果:shift=1。本文主要讲解duration与system显示行为分析相关的调试技巧,通过图文详解各个关键分析点。,这里的shift值表示从当前帧开始往前check的帧数。那一帧的合成状况,则应该就是已经完成的。帧,当前的N+1是会延迟送HWC的。的也并非刚才画完的N+1帧,而。原创 2024-09-20 19:54:28 · 887 阅读 · 0 评论 -
Android显示异常-合成类型问题详解
如果没有特别指定,则SF会默认先设定所有Layer为DEVICE合成,然后通过HWC来query平台的能力,平台根据自身能力来决定接受哪些Layer为DEVICE合成,其他的视为超过平台能力,就会标记变成CLIENT合成。HRT是最后一道关卡,如果Layer在以上过程都未被标记CLIENT,HRT是最后一道关卡,一些与平台真正的硬件能力强相关的查询,或需要实时查询系统能力的部分会在这里做最后的判定。5、app/UI ------ 其他app/UI直接指定的强推。原创 2024-08-31 17:13:31 · 971 阅读 · 0 评论 -
Android显示异常问题处理指导手册4-Debugging Tools
如果是camera或者video场景,会有.yv12或者其他格式的surfacetexture,这时候需要用特殊的工具解析,可使用7yuv.exe查看。BQ dump 脚本通常分两个,脚本all_bqdump_P.bat只抓一帧,适合问题必现的场景,all_cont_bqdump_P.bat可以连续抓10帧,适合一闪而过的issue。注意:在抓取的过程中,画面会停住不动,抓完后恢复。》》》》》》》》》 文章详情,请关注公众号 》》》》》》》》》》原创 2024-08-31 15:17:19 · 1123 阅读 · 0 评论 -
Android显示异常问题处理指导手册3-Debugging Guide
● 其中的 Window animation/Transition animation/Animator duration scale 选项,可以让一些过场动画变慢,对于在过场中出现一帧异常的情况,adb shell screenrecord --bugreport /sdcard/test.mp4 //这个录像左上角会有timestamp。可以看能否通过改变以上选项让异常帧出现停留的时间变长,方便进一步debug。1、 Google开发者选项。原创 2024-08-31 15:13:24 · 523 阅读 · 0 评论 -
Android显示异常问题处理指导手册I-(Multimedia数据流)
除了做BQ Dump,也可以dump decode output 直接看给surfacefliger或者GPU的surfacetexture是否正常。如video场景一样,如果不抓BQ dump,可抓camera output 看camera送出来的数据是否正常。如果关掉硬件加速,会推给CPU skia 绘制,遇到这种问题,根据上一篇文章知道流程,即可知道哪个模块有问题。由于app写法不一,这里介绍的是最常见的,如遇复杂场景,可以通过抓取systrace了解其flow。1、普通UI的数据流。原创 2024-08-31 15:08:51 · 322 阅读 · 0 评论 -
Android显示异常问题处理指导手册I基本思路
(3)如果定位到Display Driver异常. 先进行如下Bypass PQ实验,排查是否为PQ问题(适用于黑屏,或闪屏问题.)如果Bypass PQ后,显示变正常,说明问题与PQ有关,提交Eservice时,请Title注明PQ问题. 如bypass PQ后,异常依然存在,也请在Eservice description 中说明Bypass PQ 无效.幸运的是,根据多年的“踩坑”经验,总结了一套简单的排查指南,帮你根据异常现象,对号入座,初步锁定“嫌疑模块”,然后再深入分析。详细flow见末尾图片。原创 2024-08-26 09:37:40 · 779 阅读 · 0 评论 -
Android Display Graphics #实践小例子
listener 是生产者的监听器,api 是使用的 API 类型,producerControlledByApp 指示生产者是否由应用控制,output 包含连接后的返回信息。slot 是缓冲区的插槽编号,input 包含缓冲区的信息,output 包含提交后的返回信息。创建一个缓冲区队列,并使用上面创建的Surface作为初始化参数,实现了Surface和BBQ的绑定。slot 是缓冲区的插槽编号,buf 是返回的缓冲区对象。使用获取到的宽高,通过createSurface()创建Surface。原创 2024-07-31 16:47:39 · 656 阅读 · 0 评论 -
Android .rc规则详解与init 启动
C++/java都是面向对象的语言,init语言是面向行的,就是一行就是一个语句。只有两种方式可以保证一个服务运行于另一个服务之前。import关键字不是命令,而是它自己的部分,这意味着它不是作为Action的一部分发生,而是作为正在解析的文件处理导入,并遵循以下逻辑。用于覆盖之前定义的同名服务,一般用于/odm 覆盖 /vendor的,init使用最后一个override定义的服务。导入path路径的rc文件给init解析,如果是一个文件夹,只解析当前路径下的所有rc文件,不会解析包含的子文件夹。原创 2024-07-31 16:35:47 · 1003 阅读 · 0 评论 -
Android Display Graphics #BufferQueue与Gralloc
Surface的构造函数会传入生产者模型 GraphicBufferProducer,这使Surface对象拥有了操作缓冲区的能力。构造函数中Surface也提供了一系列hook为首的函数,连接到ANativeWindow的函数指针,为的是给EGL模块提供对缓冲区操作的入口。BLASTBufferItemConsumer 具有监听Buffer所有状态的能力,BBQ对Buffer特定状态的监听离不开 BLASTBufferItemConsumer ,因此,BBQ 继承了两个抽象类。3、简化 SF 中的模型。原创 2024-07-31 16:33:40 · 1071 阅读 · 0 评论 -
Android Display Graphics #User APP的绘制与WMS
APP在调用ViewRootImpl#setView()方法时,首次请求VSync信号。当有显示内容时,会调用到ViewRootImpl#doTraversal()方法执行绘制,这个函数包含了View三个绘制Step:measure、layout、draw。添加一个window,就是 WMS 为其分配一块 Surface 的过程。measure()方法计算每一个View的大小,执行完成后,各View的大小也随之确定了。WindowManagerService(WMS)窗口管理服务,管理系统中所有的窗口。原创 2024-07-31 16:31:18 · 326 阅读 · 0 评论 -
Android Display Graphics #从Activity看surface的创建(2)
Surface创建标志明确了要创建哪种Surface和特定的选项,比如Surface可以被认为是不透明的,是否应该在初始的时候隐藏。一个好的实践是,首先使用HIDDEN标志创建Surface,接着打开一个Transactionn,设置Surface的layer、layer堆栈、透明度、位置,然后再合适的时机调用Transaction.show,最后关闭Transactoin。如果这个Surface没有buffer或者是crop,那么这个Surface就是无边界的,只被它的父Surface的界限尺寸所限制。原创 2024-07-31 16:29:45 · 700 阅读 · 0 评论 -
Android Display Graphics #从Activity看surface的创建(1)
Activity是Android系统的应用组件,一般情况下,开发者显示的内容是通过Activity展示的。Activity的创建呢,可以理解为3给个对象的创建:Window、DecorView、ViewRootImpl。在Code para#1段 L18-L21行的代码调用了Activity的attach()和onCreate();这里的onCreate就调用到了Activity的onCreate,创建一个出来。// 如果主线程的消息循环意外退出,则抛出异常。// 调用每个进程的主模块初始化。原创 2024-07-31 16:26:38 · 895 阅读 · 0 评论 -
Android Display Graphics #1 整体框架介绍一
手机屏上显示的内容,2D或3D ,如果是 3D 的,不管是 App 还是游戏,或者简单的图片界面,底层都是通过 GPU、 通过 OpenGL(ES)绘制出来的。是Java层的一个类,提供了一系列API,使用这些API可以实现各种的产品经理要求的效果。显示的不同阶段对这块内存的叫法不同,在上层可以是Window、ANnativeWindow、Surface、SurfaceView、layer、buffer,这些本质上没啥区别,可以广泛意义上理解为用于显示内容的那块内存,只不过各个阶段的操作接口不同。原创 2024-07-31 16:20:54 · 861 阅读 · 0 评论 -
Android AV World 序
以我个人经验来讲呢,调试技巧是在解决问题中掌握的,知识点在解决问题中理解更深刻,记忆更清晰。由于功能模块属于系统底层支撑,类似于docker,涉及到音视频的处理,及Display Graphics的一些处理,需要调试解决显示花屏、黑屏、掉帧、显示虚拟化等问题。文章主要分为Android Display Graphics系列,Android Audio系列,Android Camera系列,Android Performance系列,Android 实用Skills系列。原创 2024-07-31 16:12:48 · 643 阅读 · 0 评论