自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(337)
  • 资源 (8)
  • 收藏
  • 关注

原创 preloaded-classes裁剪

frameworks\base\config\preloaded-classes 默认位置,如果改了不生效,可能有其它模块的mk文件指定了preloaded-classes覆盖了framework模块,例如。系统预加载了哪些class类?preloaded-classes预加载源代码:ZygoteInit.java。

2025-03-08 21:44:01 324

原创 系统时间学习笔记

Linux 硬件时间(RTC time)、系统时间(UTC时间、Universal time)、本地时间(Local time)、时区(Time zone)与夏令时(DST)解析-CSDN博客Unix时间戳(Unix timestamp)转换工具 - 站长工具

2025-01-25 17:30:41 109

原创 SurfaceFlinger Transaction机制原理

然后在surfaceflinger在handleMessageInvalidate()中处理完transaction后调用TransactionCallbackInvoker的sendCallbacks()去回调TransactionCompletedListener的onTransactionCompleted()函数,通知blastbufferqueue release掉buffer。例如把App的TransactionCompletedListener等属性传递给的SurfaceFlinger。

2025-01-10 15:55:04 325

原创 SurfaceFlinger EventThread原理

DispSyncSource::onVsyncCallback回调逻辑:从DisplayEventReceiver接收到vsync callback,EventThread::threadMain(监控到之后,传递给MessageQueue::vsyncCallback->invalidate。其中,threadMain(死循环,如果没有事件就wait,Vsync或其它函数push了事件,唤醒EventThread。(大致流程,详细待研究)

2025-01-09 19:27:10 162

原创 SurfaceFlinger MessageQueue原理

执行,调用公共方法SurfaceFlinger::schedule(mEventQueue->postMessage(std::move(task)));是SurfaceFlinger构造函数创建的1个消息队列(但不是android的。SurfaceFlinger目录下自定义的一个,但是内部也用了是android的。,用于SurfaceFlinger和HWC之间跨进程通讯。SurfaceFlinger是生产者,HWC是消费者。SurfaceFlinger生产message方式。例如:app有图像请求渲染。

2025-01-09 19:11:42 211

原创 ebpf 笔记

(extened Berkeley Packet Filter)是一种内核技术,它允许开发人员在不修改内核代码的情况下运行特定的功能。

2025-01-07 20:12:30 260

原创 App申请Surface流程(Android12 )

从SurfaceFlinger申请surface

2025-01-06 20:53:36 162

原创 ANR(车机端anr分析)

主线程卡死:调同步binder卡死,主线程等锁启动4大组件:执行Activity:5s,ContentProvider:10s,BroadcastReceiver:(front 10s、background 60s),Service(前台20s、后台200s),例如:startForegroundService()()资源是否充足?cpu看(大:频发缺页中断,读取文件)kswapd0:0% user + 83%【avg =1 avg60=4 avg300=2 表示IO频繁 】

2025-01-05 19:28:50 813

原创 App 创建window流程(android12 )

从wms.createSurfaceLocked ~ SurfaceFlinger::createLayer如图所示。

2025-01-04 21:48:37 1142 1

原创 Android Thread优先级和调度算法

Android中cpuset包含5个cgroups:foreground,background,system-background,restricted,top-app。其中 RR+FIFO 是实时线程优先级,它们之间的区别是RR在相同优先级的线程之间会公平轮询,FIFO会独占CPU直到阻塞为止。:PR(NI+20):将nice级别显示为映射到更大优先级队列,-20映射到0,+19映射到39。SCHED_RESET_ON_FORK,Process所有线程会被设置成。不加Process.加上Process.

2024-12-29 22:25:47 558

原创 init启动流程如下

FirstStageMain() | v SetupSelinux() | v SecondStageMain() | v+----------------------+| SetupCgroups || SetKptrRestrict || TestPerfEventSelinux || early-init +--> m

2024-12-29 22:23:33 758

原创 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 527

原创 memory泄露分析方法(Binder,Window,View篇)

找大量重复的view,点击查看text文案如果相同则找产品他们确认是否合理。代码或dumpsys window来监测是否有大量同名window。

2024-12-27 22:55:37 374

原创 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 297

原创 memory泄露分析方法(FD(File Descriptor)篇)

进程打开File,Socket,Pipe后生成一个File Descriptor,它是打开这个系统资源的标识符。File Descriptor是Linux下概念,fd 是 int类型非负数!fd标识符和泄漏文件类型关系。

2024-12-26 23:16:15 458

原创 系统卡顿,还是App卡

所有App都卡,大概率是系统稳定性问题导致,出现1个app 特有卡顿,从app侧找原因。打开相册播放视频,如果视频卡,大概率是系统资源不足(cpu,memory,gpu)打开2个不同app列表滑动都卡顿,大概率是系统cpu不足导致卡顿。没现场,只有log就看cpu,memory,gpu有无异常占用。

2024-12-26 14:35:49 210

原创 memory泄露分析方法(dma篇)

分析方法:dma_buf/bufinfodma_buf/dmaprocha。

2024-12-26 00:43:50 391

原创 gpu占用高分析方法

log和snapdragon。

2024-12-26 00:34:40 115

原创 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 320

原创 sytemmonitor

在init.rc启动一个native守护进程system_monitord,定期读取进程cpu占用率和memory。监控memory /proc/pid/smaps_rollup。从"/proc/pid/cmdline"读取每个进程名称。监控cpu total :/proc/stat。监控cpu:/proc/pid/stat。

2024-12-24 23:38:51 111

原创 截屏技术(Android screenshot )

/ 截屏Bitmap比较特殊是在SurfaceFlinger进程分配内存越快释放越好。

2024-12-24 13:03:03 307

原创 CarWatchdog

作用:监控进程是否有心跳,如果没有心跳就kill掉了,比如Hal层管理进程注册了一个客户端listener。

2024-12-20 17:20:15 231

原创 判断截图相等方法

判断freeze方法:Main线程每隔2.5s绘制一个像素,每次绘制都是不同颜色,并且对像素截图对比像素是否有变化。对比代码本地有,网上也一堆有需要可联系我。

2024-12-20 15:12:40 205

原创 SurfaceFlinger 笔记

Android 图形系统之七:SurfaceFlinger-CSDN博客CSDN

2024-12-19 23:13:15 306

原创 Binder 大小

SystemServer 32个App 16个搜索binder thread pool:E IPCThreadState: binder thread pool (15 threads) starved for (appbinder线程被用光,

2024-12-19 21:54:50 424

原创 我的科技树

专业方向: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 700

原创 打印Stack和Trace埋点

Android.bp中增加libutilscallstack引用,代码中增加如下代码:

2024-12-18 17:41:33 275

原创 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 508

原创 SyncBarrier同步屏障Detector

SyncBarrier是一条同步Message,msg.target==null,目的是为了过滤掉同步message,优先让一步message执行。

2024-12-16 19:02:30 919

原创 memory泄露分析方法(Jni篇)

如jString,jObject,jObjectArray,jArray,jObjectMethod,jClass,GetByteArrayElements。注意:局部引用表最多512个,全局引用表最多51200个(jni中除了基本数据类型会自动释放内存(// 创建 jchar。// 释放 jchar。

2024-12-16 10:42:16 174

原创 dumpsys SurfaceFlinger

/alpha: 表示了这张layer的透明度,这个值跟isOpaque是有区别的.isOpaque表示了这个layer可以是透明的,也就是没有显示数据的地方;//tr: 代表屏幕的旋转和缩放程度.大多数的layer实际上是不需要旋转和缩放的,因为他们定义的大小就是跟屏幕一致的。//invalidate: 表示这个layer的数据是失效的,这个值绝大多数情况下都是0.//isOpaque: 代表是否是不透明的,只有完全不透明的layer这个值才是1.//pos: pos的值是layer左上角的位置.

2024-12-15 01:05:30 918

原创 layers合成学习笔记

不支持device合成的layer,SurfaceFlinger会采用GPU来合成,然后与device合成的layer在hwc进行同步再送给屏幕。规则3:如果多个窗口合成layer,z-order序列上下是device,中间是gpu,只能通过gpu合成。规则1:一个pipeline可合成屏幕宽度是6480,全屏6480至少要2个物理pipeline。规则2:gpu合成也是用2个物理pipeline。HWC(Device)合成的源码分析。

2024-12-14 23:33:16 333

原创 进程保活机制

进程优先级(adj:-800)仅次于system_server(adj:-900)和native进程(adj:-1000),基本不存在被杀可能。实际用法如下所示:Entering GarageMode之后开始执行JobScheduler任务。Backgorud Service+闹钟。该方案适用于后台音乐播放的场景。

2024-12-14 00:14:12 468

原创 dex2oat 提升启动速度

build阶段可以将apk中dex生成oat文件(odex),dex2oat 源码目录/system/bin/dex2oat配置方法:PRODUCT_DEXPREOPT_SPEED_APPS。

2024-12-13 19:58:47 1010

原创 Launcher启动流程

startActivityUnchecked()流程如下:todo。RenderFrame.MainActivity声明。流程2:Real Launcher启动流程。流程1:FallbackHome启动流程。FallbackHome声明。

2024-12-13 18:25:49 331

原创 FragmentManager

启动第1个生命周期onAttach打印出日志FragmentManager: moveto ATTACHED: EnergyFragment。FragmentManager出现的bug,可查看FragmentManager: moveto ATTACHED。FragmentManager.beginTransaction().add(id,Fragment)才开始执行。FragmentManager 在ViewPager等多页面控件内部用于管理多个。,也经常用于代码中自定义界面切换逻辑。

2024-12-13 15:52:07 363

原创 onDestroy原因

Activity原因:onconfigchange(横竖屏) activity.finish framework remove-task:"remove-task" wm_finish_activity: [MainActivity,app-request] finish-imm:finishIfPossible clear rencenttask wm_destroy_activity: [MainActivity,finish-imm:recent-task-trimmed] useru

2024-12-13 15:22:23 340

原创 性能mock工具

【代码】性能mock工具。

2024-12-13 10:05:33 229

原创 系统IO高分析机制

com.android.car 有检测机制,但是也是上报系统io不足。系统IO高可以看top iowait。

2024-12-13 09:15:35 131

原创 Android Scratch分区

只要super分区有空闲空间,adb remount android会在super分区创建1个临时动态scratch分区,并使用 overlayfs 写入,有了Scratch分区,可以不用修改真正的system、vendor等分区原始数据。

2024-12-12 20:27:49 495

crash mock工具如下所示

crash mock工具

2024-12-14

memory mock工具如下所示

memory mock工具

2024-12-13

cpu mock工具如下所示

cpu mock工具

2024-12-13

关闭 selinux 开关的方法

selinux 关闭开关

2024-12-12

抓取memory的shell(native和hprof)

抓取memory的shell(native和hprof)

2024-01-07

抓取memory shell脚本(dma内存,其它内存)

获取linux当前内存占用:dma内存,及其它内存占用

2024-01-07

Android扇形进度条的实现

Android扇形进度条的实现,随着进度的增加,扇形的面积越来越大

2015-11-05

EditFileUtils 工具类 Java

规范的文件操作类 FileUtils:writeFile readFile.

2015-11-05

struts2-json-plugin-2.1.8.1.jar

struts2中,通过ajax技术传递或者获取json格式数据,必须引入struts2-json-plugin-2.1.8.1.jar,否者包错误信息:There is no result type defined for type 'json' mapped with name 'success'.

2014-02-26

2013年百度校招笔试

2013年10月13日,清华2教,软件研发工程师,工作地点:北京

2013-10-14

2013百度清华校招笔试题,移动开发工程师职位

2013年10月13日,清华笔试,工作地点:深圳

2013-10-14

2013百度校招软件研发工程师笔试题

2013年10月百度校园招聘笔试题 --(软件开发工程师 北京)

2013-10-14

2013年百度校招移动开发工程师笔试题--深圳

2013年10月百度校园招聘笔试题 -- B41(移动开发工程师 深圳)

2013-10-14

北航软件学院自主招生1月研究生入学考试数据结构+C语言真题

11年北航考研真题,附答案,希望能够给大家带来好处

2012-12-17

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除