Android系统-性能评估-1-概述

工业HMI中touch响应优化:深度剖析触摸延迟问题 深入探讨工业HMI中touch响应慢的根本原因,结合系统架构与驱动机制,提出切实可行的touch延迟优化方案,提升操作流畅性与用户体验。 阅读详情

在性能方面,有两项用户可见的指标:

  • 可预测、可察觉的性能。界面是否掉帧或始终以 60FPS的速率渲染?是否出现音频在没有软件工件或弹出的情况下会播放?用户在触摸屏幕后要多久显示屏上才会显示相应结果?
  • 耗时操作所需的时间长短(如打开应用)。
    前者比后者更显而易见。用户通常会注意到卡顿情况,但分辨不出 500 毫秒和 600 毫秒应用启动时间的差别,除非将两台设备并排进行对比。触摸延迟立刻就能被发现,且严重影响用户对设备的印象。

因此,在速度较快的设备中,相较于其他使 UI通道保持正常运转所必需的要素,UI通道是最重要的。这意味着,如果不是保持界面流畅运转所必需的任务,都应为 UI通道让路。要让界面保持流畅运转,后台同步、通知发送及类似的任务都必须延迟(如果界面任务可以运行的话)。可以牺牲耗时操作(HDR+ 运行时、应用启动等)的性能来保持界面的流畅性。

Capacity和抖动

在评价设备性能时,容量和抖动是两项重要指标。

Capacity

Capacity是设备在一段时间内拥有的某种资源的总量。这种资源可以是 CPU 资源、GPU 资源、I/O 资源、网络资源、存储设备带宽或其他类似指标。在检测整个系统的性能时,抽取各个组件并假设某单项指标决定着性能将很有帮助(尤其是调试新设备时,因为在新设备上运行的工作负载可能是固定的)。

系统容量因在线计算资源而异。更改 CPU/GPU 频率是改变容量的主要方式,但也有其他方式,如更改在线 CPU 核心数。相应地,系统的容量与耗电量相对应,** 更改容量一定会导致耗电量出现类似的变化**。

特定时间内所需的容量在绝大多数情况下取决于正在运行的应用。因此,平台几乎不能调整特定工作负载所需的容量,调整所用的方式也仅限于运行时改进(Android 框架、ART、Bionic、GPU 编译器/驱动程序、内核)。

抖动

工作负载所需的容量很容易看出来,抖动却是一个比较模糊的概念。有关抖动是快速系统的一种障碍的详细介绍,请参阅 THE CASE OF THE MISSING SUPERCOMPUTER PERFORMANCE: ACHIEVING OPTIMAL PERFORMANCE ON THE 8,192 PROCESSORS OF ASCl Q。(这是一项针对 ASCI Q 超级计算机为何达不到预期性能的调查,同时充分介绍了如何优化大型系统。)

本页使用“抖动”这一术语来介绍 ASCI Q 论文中提到的噪点。抖动是一种随机的系统行为,会阻止可察觉任务的运行。通常是必须运行的任务,但可能对在任一特定时间运行没有严格的定时要求。因为抖动具有随机性,所以很难证明某一特定工作负载不存在抖动,也很难证明某已知抖动源是导致某个特定性能问题的原因。诊断抖动原因最常用的工具(如跟踪或日志记录)可能会引入它们自己的抖动。

在实际的 Android 实现中遇到的抖动源包括:

  • 调度程序延迟
  • 中断处理程序
  • 驱动程序代码在抢占或中断被停用的情况下运行时间过长
  • 运行时间较长的软中断
  • 锁争用(应用、框架、内核驱动程序、Binder 锁、mmap 锁)
  • 文件描述符争用,低优先级的线程持有某个文件的锁,以防止高优先级线程运行
  • 在可能会延迟的工作队列中运行界面关键型代码
  • CPU 空闲转换
  • 记录
  • I/O 延迟
  • 创建不必要的进程(如 CONNECTIVITY_CHANGE 广播)
  • 释放内存不足所导致的页面缓存颠簸

特定时段内的抖动所需的时间不一定会随着容量的增加而减少。例如,如果驱动程序在等待来自 i2c 总线的读取时使中断处于停用状态,那么无论 CPU 是 384MHz 还是 2GHz,所需要的时间都是固定的。涉及抖动时,增加容量并非提升性能的可行解决方案。因此,更快的处理器在抖动受限的情况下通常不会提升性能。

最后,与容量不同的是,抖动几乎完全存在于系统产商的领域中。

内存消耗

一直以来,人们都将性能不佳归因于内存消耗。虽然消耗本身不是性能问题,但是它可能会通过 lowmemorykiller 开销、服务重启和页面缓存颠簸引起抖动。减少内存消耗可以避免导致性能不佳的直接原因,但是还有其他可避免这些原因的具有针对性的改进(如把framework固定住,当其接下来很快就会page in的时候将其page out)。

分析初始设备性能

从运行正常但性能不佳的系统开始,并尝试通过查看用户可见的糟糕性能的每个个案来修复系统的行为,这种做法并非良策。因为性能不佳通常不易重现(如抖动)或者由应用问题导致,整个系统中可阻止此策略发挥作用的变量非常多。因此,很容易错误地识别原因并做出微小的改进,而错失修复整个系统性能的系统性机会。

相反,在启动新设备时,请使用以下常规方法:

  1. 使系统启动到所有驱动程序运行的界面和一些基本的频率调节器设置(如果更改频率调节器设置,请重复以下所有步骤)。
  2. 确保内核支持 sched_blocked_reason 跟踪点以及显示通道中指示何时将帧发送到显示屏的其他跟踪点。
  3. 在运行轻量级的一致性工作负载(如 UiBench 或 TouchLatency 中的球测试)的同时,对整个界面通道(从通过 IRQ 接收输入到最终的扫描输出)进行长时间的跟踪。
  4. 修复在轻量级的一致性工作负载中检测到的帧丢失。
  5. 重复执行第 3-4 步,直到您可以在零丢帧的情况下一次运行 20 秒以上的时间。
  6. 转向用户可见的其他卡顿源。

你可以在设备启动早期执行的其他简单操作包括:

  • 确保您的内核有 sched_blocked_reason 跟踪点补丁程序。该跟踪点通过 systrace 中的 sched 跟踪类别启用,并在线程进入不间断休眠时提供负责休眠的函数。它对性能分析非常重要,因为不间断休眠是非常常见的抖动指标。
  • 确保您拥有足够的 GPU 和显示通道的跟踪。在最近的 Qualcomm SOC 上,跟踪点的启用方法是:
adb shell "echo 1 > /d/tracing/events/kgsl/enable"
adb shell "echo 1 > /d/tracing/events/mdss/enable"

运行 systrace 时,这些事件将保持启用状态,以便您在 mdss_fb0 部分的跟踪记录中查看有关显示通道 (MDSS) 的其他信息。在 Qualcomm SOC 上,您无法在 systrace 标准视图下看到有关 GPU 的其他信息,只能看到跟踪记录本身所显示的结果(如需了解详情,请参阅了解 systrace 一文)。

你希望从这种显示跟踪中了解的是,直接指明某个帧已被发送至显示屏的单个事件。在这里,您可以确定是否成功满足帧时间;如果事件 Xn 的发生时间在事件 Xn-1 发生后的 16.7 毫秒内(假设为 60Hz 的显示屏),您就会知道没有卡顿。如果您的 SOC 不提供这种信号,请与您的供应商联系以进行获取。如果没有明确的帧完成信号,很难调试抖动。

使用synthetic benchmarks

synthetic benchmark 有助于确保设备的基本功能是存在的。不过,将基准视为感知设备性能的代理毫无用处。

根据 SOC 使用体验,SOC 之间的synthetic benchmarks性能的差异与可察觉的界面性能(丢失帧数、第 99 个百分位帧时间等)中的类似差异不相关。synthetic benchmarks属于capacity-only的benchmark;抖动仅可以从benchmark的批量操作中窃取时间来影响这些基准衡量的性能。因此,合成基准得分在作为用户可察觉的性能的指标时是最不相关的指标。

考虑两种运行可渲染 1000 帧界面的基准 X 的 SOC,并报告总渲染时间(得分越低越好)。

  • SOC 1 在 10 毫秒内渲染每帧基准 X,得分为 10000。
  • SOC 2 在 1 毫秒内渲染 99% 的帧,但是在 100 毫秒内渲染 1% 的帧,得分为 19900,得分明显较好。

如果benchmark结果代表实际的界面性能,则 SOC 2 将无法使用。假设刷新率为 60Hz,SOC 2 在每 1.5 秒的操作内将出现一次卡顿帧。与此同时,SOC 1(根据基准 X 得出的较慢的 SOC)将会非常流畅。

使用 bug reports

Bug reports 有时对于性能分析非常有用,但是因为这类报告的内容全面而复杂,因此对调试分散的卡顿问题用处不大。报告可能会提供一些有关系统在特定时间内所执行操作的线索,尤其是卡顿出现在应用转换(会被记录在缺陷报告中)时。bug reports还可以指出可能会减少其有效容量的系统大范围出错(如温控调频或内存碎片)的时间。

使用 TouchLatency

一些不良行为的示例来自于 TouchLatency(即用于 Pixel 和 Pixel XL 的首选周期性工作负载),可通过 frameworks/base/tests/TouchLatency 找到,具有两种模式:触摸延迟和弹力球(要切换模式,请点击右上角的按钮)。

弹力球测试就跟看上去的一样简单:无论用户输入什么内容,球都会一直在屏幕上弹跳。这通常也是目前为止最难完美运行的测试,不过,越接近在没有丢失帧的情况下运行,就说明您的设备越好。弹力球测试很难执行,因为它是以很低的时钟频率运行的琐碎但完全一致的工作负载(此时假设设备配有频率调节器;不过,如果设备是以固定的时钟频率运行,则在首次运行弹力球测试时将 CPU/GPU 降频到接近最小值)。当系统静止且时钟频率降至接近空闲时,每帧所需的 CPU/GPU 时间增加。您可以查看球以及卡顿的对象,还可以在 systrace 中查看丢失的帧。

因为这样的工作负载是非常一致性的,所以在大多数用户可见的工作负载中,您可以在每个丢失的帧期间跟踪系统上正在运行的工作负载(而非UI通道),从而更轻松地确定大多数抖动源。较低的时钟频率会使任何抖动都更有可能造成帧丢失,从而放大抖动的效果。 因此,TouchLatency 越接近 60 帧/秒,您在较大的应用中遇到导致分散、难以重现的卡顿的不良系统行为的可能性越小。

由于抖动通常(但不总是)是时钟频率不变化导致,请使用以非常低的时钟速度运行的测试来诊断抖动,原因如下:

  • 并非所有抖动都是由于时钟频率不变,很多抖动仅仅是源于消耗的 CPU 时间。
  • 调频的governor应通过降频获取接近截止时间的平均帧时间,这样运行非界面任务所花费的时间可将其推至掉帧的边缘。
Linux 和 Android 系统性能分析 作为一名Linux 或 Android 平台的系统工程师,在开发系统新功能外,主要工作就是优化系统性能,使系统上以最优的状态运行,但是由于硬件问题、软件问题、网络环境等的复杂性和多变性,导致对系统的优化变得异常复杂,如何定位性能问题出在哪个方面,是性能优化的一大难题, 从系统入手,阐述由于系统软、硬件配置不当可能造成的性能问题,并且探讨检测系统故障和优化性能的一般方法和流程。 阅读详情

相关推荐

评估Android系统的流畅度

评估Android系统的流畅度Android 系统是否流畅,通常是用户的客观感受,我们需要将这种客观感受转化为可以测量的数据,从而达到分析问题和解决问题的目的。

hwj的博客 843

分析跟手性

分析android跟手性

yangzex的专栏 3415

47、WISEMAN与安卓原生应用开发:技术解析与性能评估

本文深入解析了WISEMAN系统在无线传感器网络(WSN)中的应用,介绍了其任务执行流程和性能评估结果,同时探讨了安卓平台上原生应用开发的技术细节与性能优势。通过实验分析,展示了WISEMAN在不同方案和拓扑结构下的任务持续时间和数据包开销表现,并详细说明了开发安卓原生应用的步骤和性能提升原理。最后,文章展望了WISEMAN系统和安卓原生应用在森林火灾监测、工业环境监测、游戏开发、音视频处理等场景的应用前景。

pear55的博客 101

安卓Android目录sys/class目录下常见设备及其解释

以下是一些sys/class目录下常见设备类和子目录的说明:

希望能对你有用 2471

评估与优化移动端推荐系统性能全流程实战指南:Android 端低延迟、高效率推荐架构落地

在推荐系统从服务端延伸至移动端的趋势下,如何在 Android 设备上实现高性能、低延迟、资源友好的推荐引擎成为技术落地的关键挑战。本文面向 Android 推荐系统的实战开发者,深入剖析推荐效果评估机制、链路性能分析模型、延迟瓶颈识别路径、端上算力优化方案与系统级资源调控策略。内容基于真实工程案例,覆盖客户端缓存设计、轻量排序模型部署、网络异步优化与端云协同调度的全链路优化路径,旨在构建一套可复制、可扩展、可持续演进的高效移动端推荐系统。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1387

AndroBench 5.0.1 安卓存储性能检测工具实战使用指南

AndroBench 5.0.1 提供四大核心测试模块:连续读写、随机读写、数据库操作模拟和HTML5加载性能,全面覆盖安卓设备存储子系统的典型负载场景。其中,连续读写测试采用128KB大块数据传输,反映大文件拷贝能力;随机读写则基于4KB小数据块,模拟应用频繁调用资源的真实情况。| 测试类型 | 数据块大小 | 测试目的 || 连续读取 | 128KB | 视频导出、文件复制速度评估 || 连续写入 | 128KB | 应用安装、系统更新效率分析 |

weixin_29903713的博客 2861

Android性能评估

1. Google 参考: 评估性能 您可以使用Simpleperf评估设备的性能。Simpleperf 是一款适用于 Android 平台上的应用和本机进程的原生分析工具。您可以使用CPU Profiler实时检查应用的 CPU 使用率和线程活动。 在性能方面,有两项用户可见指标: 可预测、可察觉的性能。界面是否掉帧或始终以 60 帧/秒的帧速率渲染?音频在没有软件工件或弹出的情况下会播放吗?用户在触摸屏幕后要多久显示屏上才会显示相应结果? 耗时操作所需的时间长短(如打开应用)。 前者比...

静虚待令,有物混成 788

综合安卓应用性能测试工具大全

在当今移动应用日益复杂的背景下,性能测试已成为确保应用稳定和高效运行不可或缺的一部分。性能测试工具为测试人员提供了一系列自动化功能,从而帮助他们评估应用程序在各种负载条件下的表现。性能测试工具有助于确定应用的响应时间、稳定性、资源消耗和可扩展性等关键性能指标。在安卓平台上,这些工具不仅限于传统的软件性能测试,还包括硬件性能评估,为开发者提供全面的测试方案。本章将概览安卓测试中常用的一些性能测试工具,包括它们的基本功能和适用场景。这将为后续章节中对具体工具的深入分析和实践应用奠定基础。

weixin_32102617的博客 991

Android系统开发(一):AOSP 架构全解析:开源拥抱安卓未来

修改启动动画文件:替换目录下的启动图像资源。重建系统测试效果:将生成的 boot.img 刷入目标设备。Android AOSP 是系统开发者不可或缺的开源利器,它让开发者能够掌控从内核到应用的每一行代码。尽管上手可能有一定难度,但通过学习,你将解锁整个安卓技术栈的潜力,为未来的开发铺平道路。

刘 争 6412

Android平台回音消除技术与性能评估

回音消除技术的发展历程与电话通信和音频处理技术的进步密不可分。早期的模拟电话系统中,回音的问题并不突出,因为它们的传输质量较低。随着数字通信技术的出现和发展,回音问题逐渐显现,尤其是在VoIP(Voice over Internet Protocol)技术的普及后。最初,回音消除主要依赖于简单的硬件处理,如增加扬声器与麦克风之间的物理距离来减少回音。随着数字信号处理(DSP, Digital Signal Processing)技术的发展,软件算法开始介入,能够对信号进行更精细的操作。

weixin_32673065的博客 1143

touch-latency-test:调查可接受的触摸输入延迟

触摸延迟测试 模拟不同的输入延迟。 发展 克隆 repo 并执行以下操作: npm install && npm start 执照 麻省理工学院

Universal Android Debloater:基于Rust与ADB的安卓系统深度清理技术架构解析

Universal Android Debloater(UAD)是一款采用Rust语言开发的跨平台图形界面工具,通过ADB(Android调试桥)协议实现对非Root安卓设备的系统级应用管理。该项目通过内存安全的Rust架构、高效的ADB通信机制和智能化的应用分类系统,为技术用户提供了对安卓生态系统的深度控制能力。 ## 架构设计与技术实现深度剖析 ### Rust内存安全架构与跨平台实现

gitblog_00981的博客 616

uibench:UI基准测试

用户界面基准 基准实施查询参数 一世 迭代次数。 默认值: 10 。 http://localhost:8000/?i=5 名称 覆盖名称。 http://localhost:8000/?name=Test 版 覆盖版本。 http://localhost:8000/?version=0.0.1-a 报告 将报告推送到父窗口。 默认值: false 。 http://localhost:8000/?report=true 移动 减少测试中的DOM元素数量。 默认值: false 。 http://localhost:8000/?mobile=true enableDOMRe

django基于安卓的手机APP检索推荐及性能评估系统

🎈1.项目内容该系统旨在通过手机APP的数据抓取、分析以及推荐,为用户提供个性化的APP选择建议,并对APP的性能进行评估。它利用网络爬虫技术从各大应用商店、论坛、社交媒体等渠道获取APP的相关信息,如名称、描述、评分、评论等,然后通过Django框架进行数据处理和展示。🎈2.项目介绍该系统可能采用B/S(Browser/Server)架构,即浏览器/服务器架构。在这种架构下,用户界面集中在浏览器端,而服务器端则负责处理业务逻辑和数据存储。

m0_50936939的博客 410

android_touch:低延迟高速android多点触控事件服务器

_ _ _ _ _ __ _ _ __ __| |_ __ ___ (_) __| | | |_ ___ _ _ ___| |__ / _` | '_ \ / _` | '__/ _ \| |/ _` | | __/ _ \| | | |/ __| '_ \ | (_| | | | | (_| | | | (_) | | (_| | | || (_) | |_| | (__| | | | \__,_|_| |_|\__,_|_| \___/|_|\__,_| \__\___/ \__,_|\___|_| |_| android_touch android_touch是将多点触控事件发送到android设备的工具。 通常,各种自动化脚本使用它在真实的android设备上发送触摸事件。 androi

114.Android简单的动态切换app的图标,两种方式

- 默认的图标-->-- 需要切换的图标-->android:label="短信"-- 默认activity-->

曹二少的博客 5572

安卓性能调优之-检测应用启动速度

宏基准测试主要关注整个应用程序或大部分应用功能的性能表现。它通常测试的是较大的操作或完整的业务流程,比如用户登录、数据加载、界面渲染等。

WriteBug001的博客 1359

在Unity3d使用yolov8的onnx模型

输出OUTPUTS是float32[1,35,8400],表示它会输出一个大小为[1, 35, 8400]的浮点数张量。这个输出张量的维度表示了检测到的目标的数量、每个目标的预测参数以及网格单元的数量。输出张量的第一个维度1表示检测到的目标数量。每个目标由35个值组成,表示目标的类别、置信度、边界框的坐标及10个特定点的位置。要取得8400个数据中置信度最高的数据,然后获取该数据其他channel的数据。运行结果:(蓝色是检测手的边框,红点是自定义的点),其中的四个数字分别表示不同的维度。

shenqingyu0605202324的博客 5602

如何进行Docker-Android容器网络性能基准测试:建立Android模拟器网络性能评估标准

Docker-Android是一个轻量级且可定制的Docker镜像,能够将Android模拟器作为服务运行。对于开发和测试人员来说,了解其网络性能表现至关重要,本文将详细介绍如何对Docker-Android容器进行网络性能基准测试,建立科学的评估标准。 ## 为什么要进行Docker-Android网络性能测试? 在移动应用开发过程中,网络性能是影响用户体验的关键因素之一。Docker-An

gitblog_00686的博客 1078

在linux上本地大模型部署与推理

您的Python脚本(客户端)可能在您的个人电脑上,而模型服务(服务器)在远程Linux服务器上。如果您的服务器有强大的NVIDIA GPU,并且您对性能有更高的要求(例如需要高吞吐量),vLLM是更好的选择。这种方式无需向公网暴露服务器端口,而是通过加密的SSH通道将服务器的端口“映射”到您的本地电脑上。我们将启动一个API服务器,它会加载您指定的模型,并等待您的代码前来调用。如果您直接在SSH窗口运行上面的命令,一旦您关闭窗口,服务就会停止。这是根据您的原始代码修改的版本,适配本地vLLM服务。

frostmelody 全网同名,大家多多关注呀~ 持续分享优质内容! 2053

Python爬虫实战:5分钟搞定东方财富网股票数据抓取(附完整代码)

本文详细介绍了如何利用Python爬虫技术,快速抓取东方财富网的实时股票数据。通过逆向分析其JSONP数据接口,构建了包含请求处理、数据清洗、分页调度及多格式存储的完整自动化采集系统,并提供了应对反爬策略与生产部署的进阶优化思路,附有可直接运行的完整代码。

weixin_29084231的博客 874

Android 应用性能评估

Android* 应用性能评估   2011年10月09日 08:00       作者:Tuan H. Bui概述 要优化应用以提供最佳用户体验,了解该应用对于某个特定平台的性能需求十分重要。在 Linux* 操作系统上,我们可使用 vmstat 来监控应用的多个性能要素,如内存占用空间、CPU 和 IO 需求等。Windows* 任务管理器为 W...

liuming651664的专栏 412

把 ABAP SQL 窗口函数讲透:从 OVER 到 LEAD、RANK 与累计分析

ABAP SQL窗口函数在不丢失明细记录的前提下,为每行数据提供组内统计和排名功能。它通过OVER子句定义计算窗口,支持三类函数:聚合型(AVG/SUM等)、排名型(ROW_NUMBER/RANK等)和取值型(LEAD/LAG)。相比GROUP BY会合并多行数据,窗口函数保留原始记录同时附加计算结果,特别适合需要保留明细又要展示统计信息的业务场景,如销售排名、客户分层分析等。语法核心是OVER子句,通过PARTITION BY分组,ORDER BY排序,可灵活定义计算范围。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1273
上一篇: Android开发技术周报
下一篇: Android系统-性能评估-2-了解systrace
DecJ
博客等级 码龄18年 537粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值