【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

开源 stagesepx:全自动化的 App 启动耗时测试工具

  • 2020-04-14
  • 本文字数:3594 字

    阅读完需:约 12 分钟

开源stagesepx:全自动化的App启动耗时测试工具

背景

对于端侧应用而言,启动耗时是个非常重要的性能指标:它的快慢很大程度上决定了用户第一印象的好坏,与用户的实际体验密切相关。


而正因为它的地位举足轻重,在敏捷开发逐渐成为主流的今天,我们不得不在每一轮迭代中都对它进行重复回归。而随着迭代周期逐渐缩短,发布频次逐渐增加,重复回归带来的副作用也日益沉重,让我们不得不开始思考如何进行优化。

行业现在是怎么做的

一般来说分为两个方向:


  • 以埋点插桩为代表的开发向;

  • 以视频数帧为代表的质量向;

埋点

埋点方案的应用在开发领域非常广泛,它也几乎是进行性能优化的唯一参考。以 android 为例,常见做法是在各类组件生命周期相关的回调函数中,插入部分代码(诸如日志、网络请求等)对调用行为进行标注。如此做之后,当应用进行常规的生命周期切换时,我们就能够通过这些带有时间戳的标注得到每个阶段的具体耗时。



这种做法非常细致,我们几乎能够得到任意函数级别的耗时情况,这也让我们能够在此基础上建立 benchmark 以控制后续的行为。目前大多数的全链路监控都是基于类似的方法实现的。


但,它得到的代码层面的数据,与实际用户感受到的情况是有差距的,这也是质量人员对此并不感冒的原因。

视频

原理非常直接:


  • 利用诸如摄像机之类的设备将整个应用的启动过程录制成视频

  • 对视频进行拆帧

  • 由于每一帧都有对应的时间戳,我们可以通过计算得到任意两帧之间的差值

  • 同理我们能够得到任意场景的耗时情况



这种方法与用户的实际感受基本一致,能够较好地反映真实情况,也是一般质量侧用得最多的方法。但这种方法带来的问题是,我们只能计算能够被观测到的数据,而对于不可见的(例如具体函数耗时)部分我们无从得知。

异同与优劣

目前来说,这两种方法都有相当数量的用户,在行业内并存。追根溯源,是关注点的差异导致了这两股人群的分化:


  • 开发人员更关注的是“优化”。埋点得到的信息能够帮助开发人员更好地知悉并评估代码执行过程的变化,找到优化点;

  • 质量人员更关注的是“体验”。视频得到的信息反馈了用户的真实感受,也是最终应用呈现的状态,而这正是质量人员需要牢牢把控的;


综上而言,这两者通常会结合使用,以配合得到更好的结果。

难点

埋点方案已经广泛地应用到全链路监控中,各类成熟的解决方案层出不穷,并不是一个很难解决的问题。


视频方案上,目前我们很大程度上依旧只能依赖 外置摄像机+人工数帧 的方式,这种不可编程的方式优化空间非常有限。而这种方式被大量应用到各类准入准出标准中,是一个难以避开的问题。


本篇文章将聚焦于视频方案的优化与解决。

优化点与方案

最终目的

我们希望将视频方案上消耗的人力最大限度地降低。这其中主要有两个问题:


  • 摄像机(硬件依赖)能否替换?

  • 帧计算如何自动化?

问题分析

摄像机

之所以质量侧一直不够信任软件录制,主要有两个原因:


  • 被测主体与测试工具在同一台设备上,有互相影响的可能;



  • 部分软件录制得到的视频 fps 可能是不稳定的,而这会影响 opencv 的分析结论;



对于问题 1,在过去硬件条件不够发达的情况下确实是个客观存在的问题。但近年来移动设备的硬件水平已经得到了非常大的提升,对于常规应用与机型而言,这部分的影响已经非常小。


对于问题 2,以 adb 为例,这种方式带来的误差可能是非常巨大的。因为 opencv 会默认以稳定 fps 的情况来处理你的视频:



而 adb 的录制原理是,当画面发生变化时才会将帧写入视频,这会导致整个视频的 fps 存在较大的波动。

自动化的帧计算

因为作为前提的摄像机录制目前没有很好的解决方案,所以自动计算受到了很大的限制而难以开展。目前比较常见的方式是利用目标检测来自动界定阶段:



通过判断界面上是否存在特定标志物,我们可以知悉目前流程进行到哪个阶段,并在此基础上进行扩展计算。但这种做法伴随的问题同样很多:


  • 需要额外的成本去管理标志物图片,而这种做法在 UI 频繁变换的业务中反而引入了更大的工作量;

  • 逐帧、多目标的检测带来算力的浪费,随着标志物的增加效率会继续下降;

  • 对于动态的标志物(诸如每次刷新都会改变的 icon)无从下手;

如何解决

对于 fps 不稳定的问题,有个前提是,虽然 fps 不稳定,但每一帧的时间戳是准确的。那么,我们可以利用 ffmpeg 对这些视频进行补帧,使整个视频的 fps 维持在一个固定值。经过这种方法处理之后,opencv 就能够正确地处理视频的时间。



在前提得到满足之后,我们使用 stagesepx 进行帧时间的自动计算。

stagesepx

这是什么

轻量化的、基于图像处理与机器学习的、全自动的视频分析工具。它提供了丰富的可定制性,能够根据你的实际需求分析视频并将其拆分为一系列阶段。在此之后,你可以清晰地得知视频包含了几个阶段、以及每个阶段发生了什么。而这一切都是自动完成的。


例如,这段视频展示了一个应用的完整启动过程:



将视频传递给 stagesepx,它将自动分析拆解,得到视频中所有的阶段。包括变化的过程及其耗时,以及在稳定的阶段停留的时长:



你可以据此得到每个阶段对应的精确耗时。而你几乎可以将它应用到任何端,甚至:




而它自带的 python 接口可以让开发者很轻松地二次开发,以落地到实际环境。例如,将结果转换为字典:


{  "data": [{    "data": null,    "frame_id": 1,    "stage": "0",    "timestamp": 0.0,    "video_path": "../demo.mp4"  }, {    "data": null,    "frame_id": 2,    "stage": "0",    "timestamp": 0.04,    "video_path": "../demo.mp4"  }, {    "data": null,    "frame_id": 3,    "stage": "0",    "timestamp": 0.08,    "video_path": "../demo.mp4"  }, {        ...
复制代码


从这个字典中我们可以知道,每一帧分别对应的:


  • 被分类到哪一个类别

  • 时间戳

  • 帧编号


用户可以随意处理这些数据,无论是保存或是交给下一段代码。

全自动化

上面提到的处理过程只能满足一些常规场景的需求,要想达到更好的泛用,它面对的一个最大问题是如何使自动化分析得到的结果与我们的预期匹配起来。例如:


  • 当偶现弹窗时会导致阶段数量发生改变或后移,如果直接以阶段编号进行计算的话必然是错误的;

  • 目前许多超级 app 都会具备 UI 动态化的设计,以达到更高的灵活度。这些都会影响阶段的分类:

  • 内容型 APP 每次打开首页内容都不一致

  • 插屏广告播放的内容是随机的

  • 游戏某个阶段场景是动态的(有循环播放的动画等,很多游戏的初始界面都会有)


在 0.10.0 之后,stagesepx 借助了 keras 来处理该类型问题。



基于 stagesepx 的双层结构,开发者能够使用自己提供的训练集干预分类过程,让计算机能够按照定制好的规则进行分类,以支撑后续耗时计算的准确性。



具体使用可参考 全自动化的抖音启动速度测试

性能

这套方案在没有 GPU 的情况下依旧保持了较为理想的工作效率。默认配置下,在普通的 windows 办公 PC 上,对于一个 15s 的视频而言,一次分析耗时 1 分钟左右。


stagesepx 提供了大量的可配置项(诸如分辨率压缩系数),使得用户能够自由地在颗粒度与效率之间找到最合适的平衡。比起传统方式,这种方法有能力大幅提高回归次数,从而得到一个更为客观的评估数据。

如何使用

如果你希望优化你的现有流程:

你可以直接基于上面的落地方式,以自动或人工的方式优化评估流程。

如果你在寻找最佳实践:

一般来说,这套流程会搭配链路监控同步使用。如果你的业务已经具备了链路监控能力,你可以将该套方案添加到已有流程中,将开发侧与质量侧数据汇总起来达到更为全面客观的评测效果。

相关链接

更多使用方式与具体原理请参考官方文档:



公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2020-04-14 16:475623

评论

发布
暂无评论
发现更多内容

深度学习与大模型的革新之路

百度开发者中心

人工智能 深度学习 大模型

互联网巨头想通过小程序来打造封闭生态的“超级App”时代将要翻篇?

Geek_2305a8

AI数字人互动大屏独立部署的优势!

青否数字人

数字人

强大模型与高效工具的完美结合

百度开发者中心

深度学习 nlp 大模型

从 WasmEdge 运行环境读写 Rust Wasm 应用的时序数据

Greptime 格睿科技

数据库 rust Wasm

010 Editor for Mac(最好用的十六进制编辑器)v14.0激活版

iMac小白

AI数字人直播软件多少钱?

青否数字人

基于深度学习的工业缺陷检测详解——从0到1

月球背面

人工智能 缺陷检测 工业视觉 #技术人的2023总结

QCN6224 vs QCN9224 - as a WiFi7 card chip - What are the different performance?

wifi6-yiyi

QCN6224 QCN9224

热更新技术该如何选型

Geek_2305a8

一文详解kube-apiserver认证鉴权能力

华为云开发者联盟

云原生 后端 华为云 华为云开发者联盟

代码编辑器sublime text for Mac v4.0(4169)中文注册版

影影绰绰一往直前

Bartender 5 for mac(菜单栏图标管理)v5.0.49直装激活版

影影绰绰一往直前

MacCleaner Pro for Mac(系统综合清理软件)v3.2.5永久激活版

影影绰绰一往直前

密切关注2024年及以后的加密货币业务趋势

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

Typora for Mac(Markdown文本编辑器)v1.7.6中文版

影影绰绰一往直前

Final Cut Pro X for Mac(fcpx视频剪辑)v10.7.1简体中文版

影影绰绰一往直前

提炼大模型智慧,助力小模型成长

百度开发者中心

深度学习 模型

Mysql tls 会话:再一次抓包之后,我认识到…

华为云开发者联盟

后端 开发 华为云 华为云开发者联盟

App Cleaner & Uninstaller for mac(mac应用清理和卸载软件)v8.2.5中文激活版

影影绰绰一往直前

如何判断Linux服务器是否被入侵了,该怎么对服务器进行安全加固

德迅云安全杨德俊

Linux 服务器安全 入侵检测

Live Wallpaper & Themes 4K Pro for Mac(超高清4K动态壁纸)v19.2中文激活版

影影绰绰一往直前

软件测试/测试开发丨接口自动化测试-TCP与UDP的区别

测试人

软件测试 测试开发

GitOps实践指南:GitOps能为我们带来什么?

阿里云大数据AI技术

铭文质押挖矿系统

区块链技术

软件测试/测试开发丨持续集成体系介绍 学习笔记

测试人

软件测试 持续集成 CI/CD 测试开发

全面了解 Stable Diffusion API 调用教程

Liam

AI 前端 后端 API Stable Diffusion

交互式”数字人员工“成为越来越多企业的需求!

青否数字人

专家观点∣数字化场景应用助力铁合金企业增产提效

用友BIP

冶金 提质增效

简约Markdown文本编辑器:Typora 破解中文版

mac大玩家j

markdown编辑器 文本编辑器 Mac软件 文本编辑

集成学习方法——随机森林

小齐写代码

开源stagesepx:全自动化的App启动耗时测试工具_开源_williamfzc_InfoQ精选文章