
Android性能优化
文章平均质量分 56
亚瑟-小郎
那些闪亮的人,不是因为盛气凌人争来的,请你足够相信,他付出比你多得多!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
preloaded-classes裁剪
frameworks\base\config\preloaded-classes 默认位置,如果改了不生效,可能有其它模块的mk文件指定了preloaded-classes覆盖了framework模块,例如。系统预加载了哪些class类?preloaded-classes预加载源代码:ZygoteInit.java。原创 2025-03-08 21:44:01 · 396 阅读 · 0 评论 -
App申请Surface流程(Android12 )
从SurfaceFlinger申请surface原创 2025-01-06 20:53:36 · 182 阅读 · 0 评论 -
JVMTI 笔记
JVMTI(JVM tool interface)是一套c/c++开发接口,用于对JVM进行性能分析、debug、内存管理、线程分析等各种黑科技操作创建一个native工程,复制一份jdk中的头文件到项目cpp根目录(在jdk/include安装目录下)自定义一个memory.cpp通过jvmtiEnv->SetEventCallbacks方法设定我们想要监听的事件到jvmtiEventCallbacks集合里。原创 2024-12-28 20:36:02 · 555 阅读 · 0 评论 -
memory泄露分析方法(Binder,Window,View篇)
找大量重复的view,点击查看text文案如果相同则找产品他们确认是否合理。代码或dumpsys window来监测是否有大量同名window。原创 2024-12-27 22:55:37 · 464 阅读 · 0 评论 -
epoll笔记
select/poll:(轮询驱动)服务端主动遍历监听的所有客户端,查看每个客户端的fd是否有变化的消息(通过pipe管道通讯方式)弊端:每次遍历全部fd消耗更多cpu,fdset 每次都需全部copy到内核态。looper() UI线程走到nativePollOnce -〉epoll_wait(mWakeEventFd)挂起,epoll:(事件驱动)服务端通过管道通讯方式将有变化事件的客户端保存到1个队列。epoll是1个服务端监听n个客户端socket请求的多路复用技术。原创 2024-12-26 23:43:27 · 311 阅读 · 0 评论 -
memory泄露分析方法(FD(File Descriptor)篇)
进程打开File,Socket,Pipe后生成一个File Descriptor,它是打开这个系统资源的标识符。File Descriptor是Linux下概念,fd 是 int类型非负数!fd标识符和泄漏文件类型关系。原创 2024-12-26 23:16:15 · 530 阅读 · 0 评论 -
系统卡顿,还是App卡
所有App都卡,大概率是系统稳定性问题导致,出现1个app 特有卡顿,从app侧找原因。打开相册播放视频,如果视频卡,大概率是系统资源不足(cpu,memory,gpu)打开2个不同app列表滑动都卡顿,大概率是系统cpu不足导致卡顿。没现场,只有log就看cpu,memory,gpu有无异常占用。原创 2024-12-26 14:35:49 · 251 阅读 · 0 评论 -
memory泄露分析方法(dma篇)
分析方法:dma_buf/bufinfodma_buf/dmaprocha。原创 2024-12-26 00:43:50 · 460 阅读 · 0 评论 -
gpu占用高分析方法
log和snapdragon。原创 2024-12-26 00:34:40 · 137 阅读 · 0 评论 -
memory泄露分析方法(显存篇)
2,gpu显存不够关键log:E Fence : waitForever: waiting for GPU completion 15134: fence 73 didn't signal in 3000 ms。用户进程需要操作显存,必须用mmap将内核空间映射到用户进程来可操作。start要求空间起始地址,一般为NULL,表示自动分配.Offset表示返回地址在映射空间的偏移量,一般是0。Prot是映射区域的属性,一般设为可读可写。fd是open("/dev/fb0")Length,映射区域的长度,原创 2024-12-26 00:26:41 · 352 阅读 · 0 评论 -
CarWatchdog
作用:监控进程是否有心跳,如果没有心跳就kill掉了,比如Hal层管理进程注册了一个客户端listener。原创 2024-12-20 17:20:15 · 302 阅读 · 0 评论 -
判断截图相等方法
判断freeze方法:Main线程每隔2.5s绘制一个像素,每次绘制都是不同颜色,并且对像素截图对比像素是否有变化。对比代码本地有,网上也一堆有需要可联系我。原创 2024-12-20 15:12:40 · 214 阅读 · 0 评论 -
我的科技树
专业方向:App cpu/memory/gpu/流畅度/响应时间的优化,Anr,Framework CarPowerManagementService模块的(STR),从0~1完成性能监控体系搭建,完成3大版本迭代高质量性能交付组件:marqueue,shadowContainer属性动画:修改属性动画帧率自定义动画: VoicePlayerView 定时器计算并请求绘制旋转动画:降帧,降速,降renderthread cpu占用24小时无泄露,App小于700MMemory分析工具监控工具。原创 2024-12-19 12:07:17 · 730 阅读 · 0 评论 -
FPS帧率统计工具
从trace和录屏能算出大致帧率,更准确的帧率数据还需要从代码中统计为了评估流畅度是否好,要计算1s 实际绘制的帧数,空闲不绘制的帧数,所以最好用2个帧率:一个是满帧fps,一个是实际绘制fps,好处是相比在Surfaceflinger统计消费App 生成的Buffer数量,可以从2个fps知道发现低于60帧,是真的掉帧了,还是没有绘制不是掉帧如:doFrame ran 60 times (Real:34) 表示实际只绘制了34帧,但是可以绘制到60帧实现原理:在Choreographer的doFrame方原创 2024-12-17 11:48:47 · 781 阅读 · 0 评论 -
SyncBarrier同步屏障Detector
SyncBarrier是一条同步Message,msg.target==null,目的是为了过滤掉同步message,优先让一步message执行。原创 2024-12-16 19:02:30 · 947 阅读 · 0 评论 -
memory泄露分析方法(Jni篇)
如jString,jObject,jObjectArray,jArray,jObjectMethod,jClass,GetByteArrayElements。注意:局部引用表最多512个,全局引用表最多51200个(jni中除了基本数据类型会自动释放内存(// 创建 jchar。// 释放 jchar。原创 2024-12-16 10:42:16 · 213 阅读 · 0 评论 -
性能mock工具
【代码】性能mock工具。原创 2024-12-13 10:05:33 · 245 阅读 · 0 评论 -
系统IO高分析机制
com.android.car 有检测机制,但是也是上报系统io不足。系统IO高可以看top iowait。原创 2024-12-13 09:15:35 · 147 阅读 · 0 评论 -
Android adj
bindService双向bind的进程,一个进程nice继承最高的nice,导致另外一个app 无法被系统冰冻(adj 大于等于 CACHED_APP_MIN_ADJ(900)的时候,进程就会变成Cached,然后就会进入到Freezer模式)例如:实现双向通讯会把app优先级adj提升到200(capservice是-800),导致app在后台无法销毁。adj进程优先级代表了内存不足时,lmk kill进程优先级,cat proc/pid/oom_score_adj 查看。原创 2024-12-12 18:36:21 · 175 阅读 · 0 评论 -
android动画性能优化
修改frameworks源码指定自定义帧率接口ObjectAnimator/ValueAnimator.startWithFps(int fps)旋转360度光盘动效,30降到24帧后,cpu从18%降到12%)原理:自定义android.animation.AnimationHandler.MyFrameCallbackProvider。原创 2024-12-12 17:56:36 · 456 阅读 · 0 评论 -
Java内存综述
scudo 在32G车机上最大分配8G内存就分配不出来内存。原创 2024-12-12 15:40:07 · 233 阅读 · 0 评论 -
内存泄露综述
am_meminfo:Cached,Free,Zram,Kernel,Native (不太准)【Cached+Free】=可用内存。am_low_memory:x ( x表示Lru进程长度)原创 2024-12-12 11:31:56 · 391 阅读 · 0 评论 -
memory内存分类
(adb shell dumpsys meminfo x)堆内存用于存储对象实例和静态变量原创 2024-12-12 11:05:30 · 406 阅读 · 0 评论 -
scudo基础学习
Scudo初始化之后会预先分配33个内存区域( SizeClass:一个region )的虚拟内存,0号region 用于存放内存管理元数据,每个 SizeClass 提供大小X的内存分配,每个 SizeClass mmap 256M的虚拟内存,分成大小相同的。Secondary Allocator内部有的Cache最多缓存 32 个不超过 2M 的 VMA(32*2M),但分配的总量是无限制的,只有系统内存不足时才会分配失败。为了解决多线程下内存的分配加锁导致的性能问题,为每个线程分配一块专有的内存(原创 2024-12-11 23:35:04 · 1175 阅读 · 0 评论 -
Andorid开机启动优化(裁剪)
系统重启到桌面可见过程:原创 2024-01-27 20:56:51 · 312 阅读 · 0 评论 -
响应时间监控方法
响应时间的统计方法原创 2024-01-27 20:52:32 · 364 阅读 · 0 评论 -
卡顿分析优化
卡顿分析技巧原创 2024-01-27 20:47:28 · 1265 阅读 · 0 评论 -
卡顿监控方法
android业界各家卡顿检测工具原创 2024-01-27 20:20:02 · 533 阅读 · 0 评论 -
常见的cpu高Case
查看一些cpu的bug原创 2024-01-21 20:16:39 · 447 阅读 · 0 评论 -
常见的泄露Case
实战经验原创 2024-01-20 18:29:19 · 405 阅读 · 0 评论 -
memory泄露分析方法(native篇)
memory泄露主要分为java和native 2种,本文主要介绍native泄露分析方法#捕捉泄露:测试每天从monkey中筛选出内存超标的app,从dumpsys_meminfo_pid看。原创 2024-01-15 09:00:00 · 705 阅读 · 0 评论 -
memory泄露分析方法(java篇)
memory泄露主要分为java和native 2种,本文主要介绍java#测试每天从monkey中筛选出内存超标的app,提单流转到我这里,原创 2024-01-14 23:03:52 · 701 阅读 · 0 评论 -
memory监控方法
监控android系统各个内存占用(java,native,gpu显存....)原创 2024-01-07 16:07:24 · 581 阅读 · 0 评论 -
cpu优化方法
cpu分析技巧原创 2024-01-01 18:16:52 · 633 阅读 · 0 评论 -
cpu 监控方法
cpu 高了,抓取哪些文件原创 2024-01-01 09:00:00 · 652 阅读 · 0 评论 -
3年座舱Android性能优化
2023 Android车载座舱系统的性能优化的收获和不足原创 2023-12-31 13:19:58 · 584 阅读 · 0 评论