- 博客(29)
- 收藏
- 关注
原创 renderdoc源码分析(二) resource manager
写在前面 1. 只针对renderdoc opengl es 场景进行说明, vukan的没有,不过其实应该也差不多啦,若有必要后面再考虑补上。2. 本文使用 文字+图+代码 的方式叙述,若只想了解原理过程,可忽略代码部分,由于renderdoc代码还算复杂和乱,代码部分主要是辅助有兴趣阅读源码的同学去抓住代码主要逻辑。3. 对一帧抓流时, 1. 开始时机:前一帧swapbuffer时,具体逻辑做在StartFrameCapture()接口; 2. 结束
2023-04-04 18:02:35
2042
原创 Android SurfaceTexture说明
Android SurfaceTexture、EGLImage、GL_TEXTURE_EXTERNAL_OES、外部纹理、YUV等相关技术
2023-03-07 22:40:46
3860
2
原创 GraphicBuffer、AHardwareBuffer、ANativeWindowBuffer关系
GraphicBuffer、AHardwareBuffer、ANativeWindowBuffer关系
2022-10-21 11:09:40
3775
原创 renderdoc 源码分析(一) 编译
本文分析说明renderdoc一些主要功能,包括编译,launch apk, hook opengl es 库流程,抓流流程,rdc文件从设备端传到host端流程,重放流程,org.renderdoc.renderdoccmd.arm64.apk, target apk 分别负责的事情等。由于笔者使用renderdoc 抓流分析的对象是Android11 移动设备,所以所有场景均基于此说明,同学们勿对所有场景对号入座。文章讲的比较基础,面向初级读者,文章若有不对的地方欢迎指正,也欢迎加V交流(155
2022-06-05 11:54:06
2488
原创 Android Studio 添加jni代码
昨天要写个apk 练习用opengl es 画图, 不想在java里边直接调opengles, 想通过jni在cpp里边去调, 所以需要加上jni代码, 弄了3小时才搞出来,感觉坑还有点多, 遂记录一下步骤方便后面使用, 添加jni的方法有多种,这里只记录下本人搞出来的那种.1. 编写声明native 接口的java文件声明3个native 接口 public native void initImpl(); public native void resizeImpl();...
2021-12-23 16:01:00
2681
原创 android touch事件传递/inputflinger流程分析
由于项目需要,需要了解下android touch数据的传递流程,看了下代码后把过程记录下来,方便后面查阅。本文章基于Android11开源源码,所有代码均可以在aosp官方提供的地址去查阅下载,Android11具体流程可能和其他Android版本有点不一致,如果文中有不对的地方欢迎同学们指出一起讨论交流~从4条线(4个方向)来分析android 的touch 数据传送机制,沿途主要关注touch数据从kernel出来到app的路线,把这条路打通,不关注细节,以及touch数据是如何决定给到哪
2021-08-02 16:58:46
2393
1
原创 Android oom机制浅析
本文主要基于android11,整理了android关于 oom killer, lowmemorykiller(lmk lmkd), kswapd的知识,还未深入去分析源码。目录linux oomoom_adj、oom_score、oom_score_adj三者的关系android low memory killer(lmk)android app oomkswapdzRAMkswapd 和lmkd总结linux oom杀进程规则:按优先级,/proc/pid/
2021-07-07 20:33:00
2849
3
原创 下载Android源码
本文参考了https://www.jianshu.com/p/001335490061,感谢作者分享。git clone https://aosp.tuna.tsinghua.edu.cn/platform/manifestcd manifestgit tag#切到需要的分支git checkout android-11.0.0_r9#以要下载frameworks/base 为例# 打开manifest目录下的default.xml文件# 找到 <project pat.
2021-02-11 17:18:51
308
原创 android 使用ninja编译单个模块
适用android8/9/10在android源码根目录下source.lunch后,./prebuilts/build-tools/linux-x86/bin/ninja -f ./out/combined-******.ninja module-namenote:ninja用prebuilts 底下的那个就行, -f 指定ninja文件, out目录下选择对应的ninja文件, module-name为需要编译的目标文件。...
2020-06-10 20:00:23
2625
原创 android 里边添加hidl服务
笔者在Android 9 通过以下方式添加hidl服务,理论上对Android 8/9/10 都适用,对于为何要有hidl这个东西以及如何添加hidl服务,google在https://source.android.google.cn/devices/architecture/hidl 里边有说明,只是添加步骤不够详细,本人之前踩过一些坑折腾了好一会儿才添加成功,所以才想写这篇文章和同学们一起交流学习,本文目前只描述如何做不描述底层原理(底层也是用来binder),文章内容全部是基于android开源技
2020-06-05 21:43:46
4230
2
原创 编译出现 unused parameter [-Werror,-Wunused-parameter]
编译时出现 unused parameter [-Werror,-Wunused-parameter]可通过在 cflags里边 添加"-Wno-unused-parameter" 进行解决
2020-05-28 16:01:43
13388
原创 linux epoll 源码分析
本文章源码基于kernel 5.5版本,主要分析epoll在kernel的实现原理,主要源码在 kernel/fs/eventpoll.c。一,关键结构体关键结构体主要有以下2个需要留意,里边包含的成员用来干嘛同学们看代码应该看得懂,在此只是简单提一下。struct eventpoll ,struct epitem,这边需要留意的主要就这2个结构体,eventpoll每个进程调e...
2020-04-15 15:49:14
789
原创 深入分析Android SensorService
四个多月前就想写这个了文章了,一直没空写,今天把有空就写一下吧。本篇文章主要内容如下目录1,Android 各模块关系基本流程图2, SensorService启动3, 应用注册一个sensor流程4, SensorService如何将sensor数据给到应用5,待机后SensorService行为6,融合sensor(SensorFusion)7,...
2019-07-27 13:47:36
14375
4
原创 linux kernel prink 打印格式
int %d or %x unsigned int %u or %x long %ld or %lx unsigned long %lu or %lx long long ...
2019-01-28 15:03:43
701
原创 linux kernel workqueue 简单使用
struct work_struct work;struct workqueue_struct* work_wq;static void run_work(struct work_struct* work){ //do something}//创建工作队列work_wq = create_singlethread_workque...
2019-01-26 23:35:43
449
原创 linux kerner 获取当前时间和时间差
struct timeval current_time;struct timeval last_time;unsigned long distance_time = 0;do_gettimeofday(&last_time);//do somethingdo_gettimeofday(&current_time);distance_time...
2019-01-26 21:25:04
863
原创 Android 打印调用栈
1,javaLog.d(TAG, Log.getStackTraceString(new Throwable()));2,c++ #include <utils/CallStack.h>android::CallStack stack("your log tag");android.bp 添加shared_libs: ["libutilscallst...
2018-12-13 15:47:54
1434
原创 linux input event简单使用
最近需要在kernel 的驱动里边将事件传到用户空间,打算用input子系统做,用户空间开一个线程用epoll方式来读取数据,记录一下如何快速简单使用input子系统上报事件。//定义一个input_dev 类型结构体变量static struct input_dev* test_input_dev = NULL;//创建并初始化 test_input_dev = input...
2018-11-02 07:52:54
5705
原创 linux device tree 摘要
1, dtsi与dts的关系dtsi相当于c语言的.h头文件,放置soc共有的内容和各machine共同的内容,一个.dts文件对应一个ARM的machine,可以include 需要的dtsi文件。并且dtsi也可以include其他的dtsi文件(好比如c语言的.h也可以include其他.h)。2, compatible 属性在dts 里边的每个设备都有一个compati...
2018-09-09 16:01:14
1416
原创 linux 驱动probe 被调用流程分析
前言: 对于linux platform device 和driver,一个driver可对应多个device,通过名字进行匹配,调用驱动里边实现的probe函数,本文以一个i2c设备为例,从驱动的i2c_add_driver()开始看源码以及用比较笨的打log的方式分析如何一步一步调用的probe()函数。分析的代码基于linux kernel msm-4.9。/************...
2018-08-26 16:53:13
15376
7
原创 Android C++获取线程id,进程id
Android 在c++代码里边获取pid,tid:#include <sys/syscall.h>int tid = (int)syscall(SYS_gettid);int pid = (int)syscall(SYS_getpid);
2018-05-14 21:06:21
4743
6
原创 Android Framework SensorService 分析
1 SensorService 的启动1.1 SensorService:onFirsrRef()SensorService 运行在 system_server 里边,在android/frameworks/base/services/core/jni/com_android_server_SystemServer.cpp通过实例化一个 SensorService 对象启动,如下:1. stat...
2018-05-09 21:43:44
4426
原创 Android的 google hal层 sensor分析
分析的Android版本为:Android 8.0,Android 8.11.,google-hal层的sensor作为一个server在运行,通过ps |grep sensor可以看到如下进程名字,通过hidl机制与framework的SensorService(的SensorDevice)通信,源码位于android/hardware/interfaces/sensors/1.0/defaul...
2018-05-09 20:43:07
5777
原创 Android SensorManager,SystemSensorManager,SensorService调用过程分析
本文主要分析android 在应用层register一个sensor后从应用层调用到framework SensorService的过程。版本:android 8.0.0,abdroid 8.1.0大致调用顺序为:appliction ===>SensorManager===>SystemSeneorManager===>Sensorservice1,对于应用层,举个使用的小例子...
2018-03-04 19:04:59
3430
原创 Android framework层获取调用者(app)的pid,uid
java里边可以使用 int pid = Binder.getCallingPid(); int uid = Binder.getCallingUid(); String callingApp = mContext.getPackageManager().getNameForUid(uid);C++里边可以使用 IPCThreadSt...
2018-02-24 21:03:46
6247
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人