sunwengang blog

developer | android display/graphics

标签 : android

Android R Vsync相关梳理

为了理解systrace中HW Vsync, sf vsync, app vsync的含义和作用。这里主要参照Android R AOSP源码对这几种VSYNC的关系和调用流程进行大致的梳理。 阅读全文

Android Q SurfaceFlinger合成(二)

继上篇《Android Q SurfaceFlinger合成(一)》中SF对INVALIDATE信息处理,针对Layer属性变化、显示设备变化等情况处理,将mCurrentState提交到mDrawingState。然后遍历mDrawingState的Layer,将新的Buffer内容更新绑定到Layer纹理对象。经过这些流程,决定是否需要SF进行合成刷新,如果需要则调用handleMessageRefresh开始合成处理。 阅读全文

Android Q SurfaceFlinger合成(一)

在HWUI渲染完成后,Buffer会在frameworks/native/libs/gui/BufferQueueProducer.cpp中通过queueBuffer放入BufferQueue,在该函数中调用frameAvailableListener->onFrameAvailable(item)通知consumer消费者,从而触发SurfaceFlinger合成。 阅读全文

Android protobuf(.proto文件)

最近碰到一个关于frameworks/base/core/proto/android/providers/settings/secure.proto文件中修改某个属性的问题,所以针对protobuf(.proto文件)进行一个学习了解。Google Protocol Buffers,(简称Protobuf,协议缓冲区),类似json或XML,Google开源的支持多语言、跨平台的结构化数据序列化项目,但是比它们更小、更快、更简单。Protobuf通过编写proto文件来定义消息格式或RPC服务定义。 阅读全文

Android ANR基本Log分析

ANR(Application Not Responding),字面意思是应用无响应,即用户的一些操作无法从应用中获取反馈。关于发生ANR的trace.txt文件的请参考Android ANR traces.txt文件分析 阅读全文

Android 图形显示框架

本篇对Android图形显示框架做一个概述,内容主要包含:SurfaceSession创建和销毁(添加/删除窗口),Surface创建和销毁,BufferQueue创建,以及BufferQueue的dequeueBuffer和queueBuffer、acquire和release大致流程梳理。 阅读全文

Android NE分析(二)

了解gcc将*.c/cpp编译成*.o,再将其链接为可执行程序或/lib库的过程,有助于我们将native从编译/加载/执行到崩溃一条路贯通起来。Android的Makefile只需要将source file填入LOCAL_SRC_FILES,然后include $(BUILD_SHARED_LIBRARY)或$(BUILD_EXECUTABLE)就可以将*.c/cpp/s编译为动态库或可执行程序。 阅读全文

Android NE分析(一)

任何软件都可能存在BUG,调试和修复BUG伴随着整个开发流程,因此异常分析非常重要。如果是native层发生异常,我们一般称之为叫NE(native exception) 阅读全文

Android 两种实时获取FPS的方法

通过ADB命令实时获取FPS帧率有两种方式,一种是dump gfxinfo,一种是dump SF --latency。其他还可以通过三方APP GameBooster(Google PlayStore可以下载)打开实时FPS监控查看。如果是查看动画是否丢帧,可以通过视频工具QuickTime Player逐帧查看需要测试的动画的拍摄视频。一般每4帧会出现一个新的动画,录制视频查看这个过程是有动画虚影的。 阅读全文

Android SELinux权限笔记

在新增一个HIDL Service后,需要对其进行权限配置,不然通过adb shell ps -A|grep NAService会发现该service无法启动,也会通过抓取log发现一堆的avc: denied权限问题。关于SELinux可以推荐文档:https://www.pianshen.com/article/6549296922/, 非常详细,本文只是作为记录部分常用的笔记。 阅读全文

Android RC文件分析

Android中最熟知的RC文件就是init.rc了,而在Hal接口服务定义中也会创建.rc文件。init.rc的语法分为行为(Actions),、命令(Commands) 、服务(Services)、选项(Options)。.rc文件是资源文件,包括比如对话框、菜单、图标、字符串等资源信息。使用.rc资源文件的目的是为了对程序中用到的大量的资源进行统一的管理。 阅读全文

Android @hide接口注释

@hide和{@hide}类或API是否开放是通过doc的注释{@hide}来控制的 比如android.media.Metadata这个类就是android没有公开的类 因为在frameworks\base\media\libmedia\Metadata.java文件中,定义Metadata类之前有/*{@hide}/doc注释,所以Metadata类被定义为了非公开类,即在android应用程序中无法直接访问的类 阅读全文

Android色彩空间(ColorSpace)

色彩空间Color Space广色域WCGWCG(Wide Color Gamut),是Adobe System开发的一种RGB色彩空间,使用纯光谱原色提供较大的色域。与Adove RGB和sRGB相比,能够存储更大范围的颜色值。相比之下,WCG包含CIELAB色彩空间可见颜色的77.6%,而Adobe RGB色彩空间仅覆盖52.1%,sRGB仅覆盖35.9%。 阅读全文

Android Property

property的相关生成文件和设置 android通过SystemProperties的set和get方法来控制很多东西,一般上层添加一个控制开关可以使用这个方法,在系统里面存在很多个prop文件。它们分别是system/build.prop,system/etc/prop.default,vendor/build.prop,vendor/default.prop。下面分别来说下这几个文件的构成。 阅读全文

Android Handler消息循环处理机制(例ActivityThread)

整体流程 关键词:Handler、Looper、MessageQueue、handleMessage 消息被存放于消息队列,应用程序的主线程会围绕这个消息队列进入一个无限循环,知道应用程序退出。(消息循环过程是由Looper实现的) 如果队列中有消息,应用程序的主线程会把它取出来,分发给相应的Handler进行处理; 如果队列中没有消息,应用程序的主县城就会进入空闲等待状态,等待下一个消息的到来; 阅读全文

Android zygote和SystemServer进程

zygote和system_server在Android中的Java层很重要。 zygote分析 zygote由init进程根据init.rc的配置项创建的。最初叫app_process,但是在运行过程中,通过Linux的pctrl系统调用将其换成了zygote。通过adb shell ps -ef|grep zygote查看到该进程。 阅读全文

Android init进程

概述 init是Linux系统中用户空间的第一个进程。通过adb shell ps -rf查看我的一加手机进程信息。 12UID PID PPID C STIME TTY TIME CMDroot 1 0 0 12:43:34 ? 00:00:10 init init进程负责创建系统中的几个关键进程,例如zygote init提供了一个property service(属性服务)来管理Android系统的众多属性 阅读全文