- 博客(33)
- 收藏
- 关注
原创 安卓cpu调度优化
在性能优化中,app开发者,需要优化app的资源调用,尽量做到用最少的系统资源完成自己的目标。而整机开发者作为系统资源的提供者,在既定的资源索求下,也是尽量提供最少的资源完成app想要的目标,以达到节约系统资源的目的。本文着重整机资源的cpu调度优化。专门对某款app进行优化,首先收集app运行时的性能指标以及cpu调度数据。cpu调度数据,主要使用perfetto抓取,方法见。性能指标,有帧率和功耗2大项,帧率获取方法见。,功耗获取方法省略。
2025-01-06 20:59:02
976
原创 安卓帧率获取
性能优化,经常用到一些指标,诸如帧率、功耗等。对于普通app来讲, 之前一直使用gfxinfo指令获取丢帧率。但是这个指令无法获取游戏的帧率,查阅资料,发现SurfaceFlinger可以获取游戏帧率。
2024-12-25 20:52:07
854
原创 安卓内核内存回收
一般上层由于业务需要,需要内核提供一些定制的内存回收接口。或者内核层本来就想做内存机制的优化。便需要在原有内存回收机制上做一些hook操作。所以了解Linux内核内存回收流程很重要本章节主要讲kswapd线程,当内存低watermark时,kswapd会被唤醒并开始工作。
2024-11-01 15:25:10
400
原创 安卓cpu知识
目前的cpu都是多核的,为了有更好的能效,每个核的频率从低往高不等。市面上,大家根据频率不同,都叫大小核。既然分了大小核,那么多核心,就要有不同的cpu调度策略。所以cpu上的所有核,又会根据自身的频率不同,几个核心为一组,分到一个簇里(cluster)。同一个簇里的核,使用相同的调度策略(policy)。
2024-10-16 10:56:50
676
原创 perfetto使用
perfetto可以分析很多性能问题。比如查看方法耗时,janky frames等信息。方法耗时这个数据,可就猛了,从framework层到内核层的函数都可以跟踪。还有丰富的数据库,可供查询。原理不多说,聚焦于使用。
2024-09-25 16:16:00
486
原创 ANR原理和分析
ANR分析需要结合各个层面大量的数据,诸如堆栈信息、Android log等。那么理解anr的机制,才能分析好具体的ANR问题。
2024-07-24 15:04:19
232
原创 Binder问题分析方法
上层分析1. watchdog堆栈导出/data/system/dropbox 目录,可以导出watchdog Log2. watchdog堆栈分析详情:Watch dog堆栈分析3. 尽情期待内核分析1. 开启binder log有2种方法:1、修改系统配置 2、修改binder.c源码详情:开启binder log2. 导出内核dump信息详情:内核dump分析3. 分析dump信息4.5. 尽情期待尽情期待。
2024-04-12 16:09:41
367
1
原创 Watch dog堆栈分析
tid=470代表在watch dog里的线程id。sysTid代表整个binder的线程id。1、查看watch dog的堆栈。
2024-04-09 17:18:03
301
1
原创 安卓内存优化
安卓内存优化,涉及应用层、框架层、内核层。应用层侧重于使用层面,须有良好的内存使用习惯。框架层、内核层则是在aosp的基础,进一步优化系统内存管理机制。
2024-03-18 19:29:07
570
原创 binder驱动流程
整个binder通信流程中,binder驱动在内核层,作为“中转站”,对通信进行流转。FW、native调用binder驱动,本质上通过系统调用ioctl,向内核发送请求。内核通过cmd匹配各个case进行响应。
2024-01-11 15:15:24
488
原创 git常用操作
git常用操作新代码,标准提交步骤git add .git commitgit push origin HEAD:refs/for/分支名字基于上一个commit msg进行提交 git commit --amend本地分支,拉取remote分支的代码1. git branch --set-upstream-to=origin/远程分支名 本地分支名2. git pull --rebase尽情期待本地分支,拉取remote分支的代码
2023-12-05 14:36:07
406
原创 Map接口
分为HashMap、LinkedHashMap、HashTable、ConcurrentHashMap、TreeMap。:底层数据结构是哈希表,线程不安全。键的唯一性需要key覆写hashCode()、equals():线程安全,比HashTable效率高。对Entry数组分段,每段加锁,不同段同步操作不影响。:底层数据结构是红黑树,key的排序需要使用Comparable和Comparator。:底层数据结构是哈希表和链表,保持存入与读取的顺序一致性。:底层数据结构是哈希表,线程安全。
2023-05-25 20:45:35
100
原创 List接口
分为ArrayList、Vector、LinkedList。:底层数据结构是数组。查询快,增删慢,线程不安全。:底层数据结构是链表。查询慢,增删快,线程不安全。:与ArrayList相似,线程安全。
2023-05-09 16:44:41
100
原创 avb签名流程
安卓系统在启动的时候,需要保证每个镜像挂载的完整性和安全性。所以需要一套开机安全机制。所以就有avb。avb签名已经来到了2.0版本。学习avb签名流程,其实就是学习现代的数字签名。
2023-04-13 19:41:43
1621
原创 安卓构建自定义镜像
构建自定义image。是整机开发需要掌握的知识点。从build_custom_images.mk开始到build_custom_image.mk到build_image.py再到avbtool.py是一个整个构建流程。搞清楚流程,更好的进行客制化
2023-03-23 20:50:10
1899
原创 Android.mk的GNU make语法
1、安卓系统编译,使用了makefile,所以学习make语法。2、安卓Build System会收集所有的Android.mk,转换成ninja用于构建。
2023-03-03 18:01:06
396
原创 IO流功能总结
1、 SequenceInputStream 序列流:可以整合多个字节输入流同时输出2、 ByteArrayOutputStream 内存输出流:可以将内容写到内存3、 ObjectOutputStream 对象输出流:可以将对象(任意数据)序列化4、 PrintStream 打印字节流:PrintStream.println()打印字符串,P
2016-12-04 18:23:12
277
原创 欢迎使用优快云-markdown编辑器
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl
2016-12-04 15:35:00
143
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人