愿历尽千帆 归来仍少年

愿历尽千帆 归来仍少年

Android|图形栈疑问汇总(持续更新)
最近在看图形显示方面的内容,这块的知识点繁多且复杂,到了S以及T上有了较多的变化,单看理论源码的话,难以形成深刻的认知。所以打算在最近的学习过程中列举出自己的一些疑问,后面会持续的更新疑问并补充个人的理解。 1. onMeasure/ onLayout/ onDraw 分别做得事?2. 如何理解Window/ ViewRootImpl/ Surface/ SurfaceTexture/ TextureView/ GLSurfaceview 概念及其相互的关系?3. 如何理解硬件加速这一角色? 硬件加速引入的初衷? 会带来什么样的好处及对内存的影响? 如何强制让View/ Window/ ...
Android S Doze模式
前言基于Android S梳理下Doze 机制 认识 Doze 如果用户未插接设备的电源,在屏幕关闭的情况下,让设备在一段时间内保持不活动状态,那么设备就会进入Doze 模式。在Doze 模式下,系统会尝试通过限制应用访问占用大量网络和 CPU 资源的服务来节省电量。它还会阻止应用访问网络,并延迟其作业、同步和标准闹钟。系统会定期退出Doze 模式一小段时间,让应用完成其延迟的活动。在此维护期内,系统会运行所有待处理的同步、作业和闹钟,并允许应用访问网络。 (摘自 https://developer.android.google.cn/training/monitoring-devic...
ART 虚拟机|Dex2oat 调优实践之路
写在前面我们都知道Dex2oat对应用的启动速度、以及日常使用的流畅度起到了重要作用,不过Google现有的dex2oat机制存在着明显的局限性。 开机/OTA等场景,容易整机卡顿及开机时间长。 Idle下的触发条件苛刻,发挥空间有限。 前段时间研究了下dex2oat的原理机制,并且对一些场景下的dex2oat行为做了客制化,打算做下小结,以便后续回顾完善。 涉及代码均基于Android S 基本概述一个App经过优化dex2oat的大致流程如下(图片来源:谷歌开发者网站) 简单的理解就是优化是以dex文件中的method为单位,dex2oat在优化时,会根据需要优化一定量的meth...
网络 | 拥塞控制算法之BBR
TCP BBR(Bottleneck Bandwidth and Round-trip propagation time)是由Google 设计,于2016年发布的拥塞算法。以往的大部分拥塞控制算法都是基于丢包来作为降低传输速率的信号,而BBR 则基于模型主动探测。目前已经在Google 内部大范围使用并随着linux 4.9 版本正式发布。 Bufferbloat在讨论BBR 之前不得不先说下Bufferbloat,在BBR 出来之前的拥塞控制算法无一例外都和网络缓存耦合在了一起,所以都会存在发生Bufferbloat 的情况。 关于bufferbloat的定义 Bufferbl...
ANR原理分析及常见案例
最近看了下ANR代码,结合之前项目上的一些ANR案例,打算对ANR的原理以及常见案例做下小结,涉及的代码均基于Android S 画了一张图,列举了可能导致ANR的一些影响因素 原理机制我们平时遇到的ANR问题大部分都是input ANR类型,所以以input ANR为例进行梳理,这块机制并不复杂,只梳理埋计时和check超时的代码部分。正常输入事件的分发流程如下12345InputDispatcher::dispatchOnce() ->InputDispatcher::dispatchOnceInnerLocked ->InputDispatcher::dispatchK...
优化实践: 高刷下列表滑动出现卡顿掉帧
问题背景近期我们的测试同事,上报了一些操作掉帧的问题,对比机选取的是同配置的荣耀x20。以微信为例,如下是测试提供的测试报告这份perfdog报告的操作步骤对应的是上下滑动微信列表,数据上看,测试机表现似乎比对比机逊色一些。打算实际对比体验下,在两台机器上安装同版本的微信,清理后台任务,并确保两台机器上的微信均已完成dex2oat且dex2oat模式一样。实际对比测试下来的主观感受是: 在我们的测试机上,滑动松开手指后会概率性出现顿挫感,荣耀机器上滑动的fling阶段比较平滑,虽然偶尔也会有顿挫,对比体验上确实优于我们的测试机 基于数据报告以及主观测试感受,说明我们的机器在部分场景操作上...
优化实践:从系统层面优化应用启动速度
应用的启动表现特别是冷启动的速度,是用户对App的第一印象。很多时候也会被评测机构用来测试一个手机性能的依据,所以对启动速度的优化一直以来是App和手机厂商发力的重点 故事背景最近,测试提了很多应用启动速度落后于竞品荣耀x20的问题单以其中的支付宝为例, 如下是测试提供的支付宝冷启数据(通过高速相机,以手指松开为起点,以首页内容加载出为结束点) 从高速相机均值数据上,我们的机器上冷启支付宝比竞品机慢了29%,另外通过实测同时打开,直观感受上发现绝大部分时候确实慢于竞品机。顺便说一句:测试冷启速度最佳方式是通过高速相机,这种方式最贴近用户实际感受,其次便是通过Systrace,但是Sy...
Systrace角度: 拆解分析应用的启动流程
上周看了一个支付宝启动速度逊色于对比机的案例,花了些时间整理了下这个过程。应用启动过程中牵扯的知识点较多,基本涵盖了Android几大重要的子系统,非一篇文章能够讲清。本文将以支付宝为例,介绍下从input事件触发到首页帧显示完成的整个流程,后面会单独成文介绍与竞品的差异分析。 本文深受androidperformance系列文章启发 测试步骤 使用user版本,开机后连接信号好的WIFI网络,清理后台所有程序。登录支付宝账号后先启动几次,最后再forceStop 手机放置五分钟后,确保机器未发热,此时打开Systrace录制,通过高速相机拍摄,点击icon冷启,再forceStop下,...
案例分析:打开应用后操作界面无响应(Systrace)
问题现象打开应用(热启动)后,概率性出现手指滑动界面无任何响应(界面控件支持上下滑动) Systrace角度分析先看下应用区域帧绘制的情况 这个时间段除了开头的几帧,后面几乎是空白的,复现时手指明明是一直滑动的。 先确认下input事件是否正常,在分析input事件流转是否正常之前 我们先简单的介绍下input事件大概的流转过程 1.触摸屏每隔几毫秒扫描一次,如果有触摸事件,那么把事件上报到对应的驱动 2.InputReader 读取触摸事件交给 InputDispatcher 进行事件派发 3.InputDispatcher 将触摸事件发给注册了 Input 事件的 App 4.a...
第三视角: 一个ART GC的优化故事
前言从事过整机性能优化的同事,在实际项目上相信都遇到过GC引起的性能问题。有了上一篇文章的铺垫,阅读本文将会比较轻松。笔者在梳理GC这块的代码过程中,深感其复杂并非一蹴而就,如果你对其某处代码的设计缘由不甚理解,不妨试着去追踪它的提交记录。通过其一系列的patch更新以及comment,跟着提交owner的思路历程,便可以了解这个”成品”是如何被加工出来的。 故事的缘起笔者在梳理GC这块的代码时,偶然看到一处友商的提交,不禁有点好奇。为了探究其修改的缘由,仔细阅读了这笔修改的提交更新以及所有的comment之后,觉得其中一些思路对我们有启发作用,故而决定将这个思路过程尽可能的还原出来。P...
avatar
Steven li