Fork me on GitHub
侧边栏

随笔分类 -  performance

摘要:如果一帧的实际显示时间与调度器预测的呈现时间不匹配,则该帧被称为"卡顿帧"(janky)。 卡顿可能导致: 帧率不稳定 延迟增加 FrameTimeline是SurfaceFlinger中的一个模块,用于检测卡顿并报告卡顿来源。目前暂不支持SurfaceView,但未来版本将会支持。 用户界面: 系 阅读全文
posted @ 2025-07-01 21:34 yooooooo 阅读(327) 评论(0) 推荐(1)
摘要:Camera启动性能拆解 从CameraServer的角度对Camera启动性能进行拆解 进程 开始点 结束点 App 点击Camera App Icon 开始调用connectDevice HAL 开始调用connectDevice 调用connectDevice结束 App 调用connectD 阅读全文
posted @ 2025-06-27 16:34 yooooooo 阅读(57) 评论(0) 推荐(0)
摘要:本讲是Android Camera性能分析专题的第11讲,我们介绍Camera软件栈介绍,包括如下内容: Camera预览数据流方向 Camera拍照数据流方向 Camera录像数据流方向 Camera预览数据流方向 Camera预览数据流有两种方式 <= Android 11 预览组件:Surfa 阅读全文
posted @ 2025-06-27 15:35 yooooooo 阅读(96) 评论(0) 推荐(0)
摘要:C/C++ Trace类说明 头文件 /system/core/libcutils/include/cutils/trace.h /system/core/libutils/include/utils/Trace.h #include <utils/Trace.h> 依赖的库 libcutils.s 阅读全文
posted @ 2025-06-27 11:18 yooooooo 阅读(82) 评论(0) 推荐(0)
摘要:本讲是Android Camera性能分析专题的第9讲,我们介绍在Camera App或Java Framework添加trace,包括如下内容: Java Trace类说明 android.os.Trace类 描述 beginSection(String sectionName) 在一个函数中打印 阅读全文
posted @ 2025-06-27 11:04 yooooooo 阅读(77) 评论(0) 推荐(0)
摘要:关键词:pmu,perf等等。 简单记录PMU及其内核驱动,内核中perf相关内容,以及两者是如何关联的。然后记录perf应用是如何和PMU硬件关联的,以及如何使用perf查看PMU结果。 A7 PMU概要 PMU作为一个扩展功能,是一种非侵入式的调试组件。 对PMU寄存器的访问可以通过CP15协处 阅读全文
posted @ 2025-06-22 10:10 yooooooo 阅读(134) 评论(0) 推荐(0)
摘要:1. 综述 本文乃内核 perf 框架解构系列文章第三篇。 《[perf 2] perf 后端:硬件 PMU(上)》一文,我们讨论了 PMU 硬件的基本使用范式,架构相关的概念,以及寄存器层面的基本操作及编程。 本文在上文基础上进行编码实践,目的是展示 Intel x86 架构下硬件 PMU 的编程 阅读全文
posted @ 2025-06-22 10:03 yooooooo 阅读(140) 评论(0) 推荐(0)
摘要:1. 垫话 本文标题叫“硬件 PMU”操作,而不是“PMU 硬件”操作,是为了有意强调上一篇文章所申明的概念:PMU 只是一种抽象,其可以是纯软件实现的,也可以是硬件实现的。所以本文分析“硬件 PMU”,是有其推广意义的:“硬件 PMU”是 PMU 的一个特殊解,清楚了“硬件 PMU”的抽象及操作, 阅读全文
posted @ 2025-06-22 09:51 yooooooo 阅读(211) 评论(0) 推荐(0)
摘要:Does anybody know what is the meaning of stalled-cycles-frontend and stalled-cycles-backend in perf stat result ? I searched on the internet but did n 阅读全文
posted @ 2025-06-21 23:01 yooooooo 阅读(67) 评论(0) 推荐(0)
摘要:1. 综述 本系列文章旨在解构内核 perf 框架的实现。perf 是一个庞大的系统,所涉及的逻辑板块非常多,因此想要把 perf 框架讲清楚是不容易的。为了让读者能建立起清晰的脉络,本系列文章会根据一定的内在逻辑,逐步展开对各板块的解构。 perf 框架其本身因为考虑了很多 general 的需求 阅读全文
posted @ 2025-06-21 22:52 yooooooo 阅读(84) 评论(0) 推荐(0)
摘要:许多体系结构都包含PMU(Performance Monitoring Unit)硬件,用于跟踪、计数系统内部的一些底层硬件事件,如与CPU有关的事件(执行指令数、捕获异常数、时钟周期数等)、与cache有关的事件(data/inst./L1/L2 cache访问次数,miss次数等)以及与TLB有 阅读全文
posted @ 2025-06-21 10:44 yooooooo 阅读(359) 评论(0) 推荐(1)
摘要:Multiqueue Block Layer 随着存储设备(特别是NVME+SSD块设备)的性能提升,之前Linux内核里的块存储层的设计已经无法满足需求,主要是单个的request queue成为瓶颈,在多cpu情况下产生大量的锁竞争,效率低下。另一方面,ssd盘在硬件层面早已可以支持百万级的IO 阅读全文
posted @ 2025-06-19 15:47 yooooooo 阅读(554) 评论(0) 推荐(0)
摘要:一、什么是dex2oat Dex2oat (dalvik excutable file to optimized art file) ,是一个对 dex 文件进行编译优化的程序,在我们的 Android 手机中的位置是 /system/bin/dex2oat,对应的源码路径为 android/art 阅读全文
posted @ 2025-06-16 10:53 yooooooo 阅读(1195) 评论(0) 推荐(0)
摘要:使用 Systrace 查看 UI 卡顿时,主要看以下线程: 主线程(UI 线程) 线程名称 :一般以应用的包名加主线程标识显示,如 com.example.app:main。 关键事件分析 :在 Graphics 轨道中的 Frame 事件是重点,正常帧耗时应小于 16ms(60fps),若超过则 阅读全文
posted @ 2025-06-06 10:19 yooooooo 阅读(168) 评论(0) 推荐(0)
摘要:Android PMS扫描优化分步说明 1. 核心思路分析 问题定位:PMS在开机时单线程扫描APK导致启动延迟 优化方向:利用多线程并行解析APK文件 关键技术点: 基于CPU核心数动态分配线程 线程安全的APK解析队列 并行处理与主流程的协同机制 2. 多线程架构设计 2.1 线程池配置 // 阅读全文
posted @ 2025-06-04 14:40 yooooooo 阅读(281) 评论(0) 推荐(0)
摘要:在实际的问题分析过程中,我们经常会碰到非常大的Trace文件(大于2GB),直接扔进uiperfetto.dev是没法打开的,这是因为浏览器内存的限制。这时候我们就需要使用官方提供的trace_processor_shell工具来本地打开大文件。 0. trace_processor_shell 工 阅读全文
posted @ 2025-05-18 15:49 yooooooo 阅读(1131) 评论(0) 推荐(0)
摘要:Android 帧速率调整库,也称为 Swappy,是 AGDK 库 的一部分。它帮助 OpenGL 和 Vulkan 游戏在 Android 上实现流畅的渲染和正确的帧速率调整。本文档定义了帧速率调整,描述了需要帧速率调整的情况,并展示了该库如何解决这些情况。如果您想直接跳转到在游戏中实现帧速率调 阅读全文
posted @ 2025-05-12 10:59 yooooooo 阅读(147) 评论(0) 推荐(0)
摘要:序言 本文针对使用Perfetto/Systrace分析不同操作任务的CPU执行状态时常见的异常原因进行了汇总,对实战中的问题分析可起到抛砖引玉的作用。以下异常情况都来自实际的案例分析,因此非常具有参考价值,各球友如果遇到过其他没提及过的案例时可在下面直接回复。 Android线程被分为16种状态: 阅读全文
posted @ 2025-05-08 16:33 yooooooo 阅读(331) 评论(0) 推荐(0)
摘要:本文是 Systrace 线程 CPU 运行状态分析技巧系列的第一篇,主要分析了 Systrace 中 cpu 的 runnable 状态出现的原因和 Runnable 过长时的一些优化思路。 本系列的目的是通过 Systrace 这个工具,从另外一个角度来看待 Android 系统整体的运行,同时 阅读全文
posted @ 2025-05-08 16:24 yooooooo 阅读(299) 评论(0) 推荐(0)
摘要:正文 这里以滑动列表为例 ,我们截取主线程和渲染线程一帧的工作流程(每一帧都会遵循这个流程,不过有的帧需要处理的事情多,有的帧需要处理的事情少) ,重点看 “UI Thread ” 和 RenderThread 这两行 这张图对应的工作流程如下 主线程处于 Sleep 状态,等待 Vsync 信号 阅读全文
posted @ 2025-01-23 15:47 yooooooo 阅读(559) 评论(0) 推荐(0)