愿历尽千帆 归来仍少年

愿历尽千帆 归来仍少年

对Android S ART GC的源码梳理
前言本文是GC系列文章的首篇,主要为下一篇《第三视角: 一个ART GC优化的故事》文章做铺垫。本文将根据下面的大纲,简单的介绍下GC相关的基础知识,GC这块的内容较多,也相对较为复杂。如果想要研究清楚细节,需要花费较多的时间,也需要有读者有足够的耐心和相关知识背景。本文深受ART虚拟机 | GC的触发时机和条件一文的启发 文中涉及代码均摘自Android S。 大纲 研究ART GC目的 ART GC诞生背景 里程碑(引入CC) ART GC重要特性 ART GC类别划分 Multiplier的引入 堆可分配字节数的计算 GC触发阈值的计算 从Systrace角度看GC 参数修改策略 ...
对进程压缩消费Zram速度的优化
从全局看Zram 修改演变历程 小结当前的修改方案可能不是最优方案,但是解决了之前遇到的实际问题,后面如果遇到新的问题可能还会进行调整。 Have a good day~
AMS锁严重竞争导致的整机卡顿
日志抓取在问题机器上抓了一份Systrace1.操作步骤: 进入设置界面滑动再退出2.问题现象: 进入设置出现较长时间白屏,退出时有拖影,下拉状态栏尤为卡顿,解锁亮屏很慢。 问题分析从下图可以看到进入设置时,Resume耗时近400ms,主要耗费在等binder上来到对端1188_19线程所在区域,看下这个时间点1188_19在做什么操作?1188_19是SystemServer中的线程,从上图可以看出,它在等AMS锁到这里大致梳理如下1.进入设置应用走到onResume环节时,调用到AMS的registerReceiverWithFeature注册广播,这是应用启动过程中很常见的操作,...
GC超时导致的后台应用崩溃问题分析
写在前面这个问题之所以会拿出来仔细分析,一方面是因为这个问题不是简单的应用崩溃而是框架层的报错,另一方面是因为希望通过这个问题梳理下后台GC的超时检测机制怎样的,这样我们后面在应用层如果重写finalize方法回收时会考虑的更加全面点。 问题背景复现概率: 偶现问题版本: Android R问题现象: 处于微信界面,突然弹出王者荣耀停止运行 初步分析拿到问题日志后,先看下报错的堆栈123456709-02 20:53:26.679 2073 2089 E AndroidRuntime: FATAL EXCEPTION: FinalizerWatchdogDaemon09-02 20:...
从tcpdump看miracast的play流程(工具篇)
前言:基于高通平台,其他平台都是类似的本文作为工具篇,记录下来的目的是以便后续如再接触投屏工作能够快速对照上手 当我们开始准备连接sink设备时,开始的时候,source会创建一个socket监听着并等待sink端过来连接,sink端会触发”connect”的socket函数并开始tcp 握手之路,这个时候source接收到之后,它会触发”accept”的socket函数来处理sink发过俩的连接请求 开始是握手 Key Message #1~#4 RTSP connect M1~M8: DHCP ACK 如果这里DHCP Discover -> DHCP ACK耗时超过 5s, ...
一次SystemServer OOM导致的系统重启分析之路
测试步骤MTBF测试跑出来的机器重启,先解释下何为MTBF?MTBF测试(Mean Time Between Failure)主要测试终端在连续工作状态下,出现死机、重启、冻屏、应用强制关闭等严重故障的概率。通过在一个周期内以自动化方式反复执行规定用例,记录测试过程中被测终端出现的故障数 复现概率1/200 问题现象机器出现重启,并自动给出源头是OOM导致的结论 初步分析正常步骤先看bugreport确定下是否是OOM导致的重启,搜索关键字”system_server_crash”或”am_crash”1234567892020-12-07 10:56:18 system_server_...
内存屏障
本篇文章开始之前需要了解一些背景知识 Cache Memory我们都知道程序是运行在 RAM之中,RAM 就是我们常说的DDR(例如 DDR3、DDR4等),我们称之为main memory(主存)当我们需要运行一个进程的时候,首先会从Flash设备(例如,eMMC、UFS等)中将可执行程序load到main memory中,然后开始执行。 在CPU内部存在一堆的通用寄存器(register),如果CPU需要将一个变量(假设地址是A)加1,一般分为以下3个步骤 CPU 从主存中读取地址A的数据到内部通用寄存器 x0(ARM64架构的通用寄存器之一) 通用寄存器 x0 加1 CPU 将通...
谁拖慢了列表的滑动速度
问题描述在开机向导界面滑动wifi列表界面时比较卡顿,概率为必现 抓一份systrace,红色帧有多处,总体上看有不少处发生掉帧 挑其中一处红色帧放大看下耗时中的measure是大头,其中一次measure有数十次obtainview,对比其他绿色正常帧,发现正常的时候没有measure的过程放大一次obtainview的过程,做的其实是inflate一项item的过程,红圈处对应了wifi一个item的布局我们都知道,ViewRootImpl的performTraversals方法会经过measure、layout和draw三个流程才能将一帧View需要显示的内容绘制到屏幕上 per...
一个SharedPreferences写操作导致的ANR问题分析
问题现象手机连接WIFI后出现设置弹出无响应的弹框问题概率仅出现一次问题平台Andorid P 高通平台 日志分析拿到bugreport,使用chkbugreport解析下(开源工具,将bugreport庞大的日志进行分门别类,并以网页形式展现出来),打开浏览器看下event日志中的时间点 106-19 17:53:42.307 1000 1820 1959 I am_anr : [0,3861,com.android.settings,952745541,Input dispatching timed out (com.android.settings/com.android...
Launcher应用的重构之路
当前需求新项目遵循竞品的Launcher样式设计当前计划重新编写Launcher,并尽可能的弥补老框架的不足 为什么需要重写Launcher?从样式上来看新版Launcher的UI显示上与老版本差异较大,左右滑动的菜单页变化最大从代码结构上看一. 不符合单一原则: 视图层承担过重的业务数据处理逻辑, 老版本的视图层代码量比较大,主Activity及LauncherService均近两千行,承担的任务过重。其中包含了View的显示逻辑,也有数据处理的逻辑,也有接收广播相关,也有与Fwk的网络接口交互处理的逻辑,还有一些其他应用需要在返回Launcher后对自身的一些判断逻辑等。二. 从整...
avatar
Steven li