使用adb命令获取Android SurfaceView 的 帧率(fps)jank,手机的基本信息

这篇具有很好参考价值的文章主要介绍了使用adb命令获取Android SurfaceView 的 帧率(fps)jank,手机的基本信息。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

获取fps

        adb shell dumpsys SurfaceFlinger | grep + 包名启动页 (不然他获取的数据是只有一行数据),这个命令只需要执行一次

        使用的是adb shell dumpsys SurfaceFlinger --latency "SurfaceView +包名/启动页"获取的,目前只支持安卓6.0以上。

        使用adb 命令时,可以根据他的版本来进行拼接命令行

        安卓7.0:adb shell dumpsys SurfaceFlinger --latency "SurfaceView +包名/启动页"

        安卓8.0--安卓10: adb shell dumpsys SurfaceFlinger --latency "SurfaceView +包名/启动页#0"

        安卓11:暂时没测

        安卓12:adb shell dumpsys SurfaceFlinger --latency "SurfaceView +包名/启动页(BLAST)#0"

        执行之后,返回结果可能各不相同,有128行的,129行的,257行的,第一行166666666.。。。之类的是屏幕的刷新率/刷新的时间间隔。有的第二行是执行的命令。剩下的就是帧数据了,

分为三列:

  • 第一列:表示应用绘制图像的时间点
  • 第二列:SF将帧提交给H/W(硬件)绘制之前的垂直同步时间。
  • 第三列:在SF将帧提交给H/W的时间点,算是H/W接受完SF发来数据的时间点,绘制完成的时间点

计算方式:本文使用的是第二列数据。因为好多手机得到的数据,第一列和第三列数据是一样的

16666666
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0
0       0       0

0       75152891320027  0
0       75152907976642  0
0       75152941365340  0
0       75152974872319  0
0       75153008281538  0
0       75153041768361  0
0       75153075258621  0
0       75153108519975  0
0       75153158574402  0
0       75153175158413  0
0       75153208754767  0
0       75153242157892  0
0       75153275713152  0
0       75153308947996  0
0       75153342481433  0
0       75153375754819  0
0       75153542967840  0
0       75153559645027  0
0       75153576540548  0
0       75153593006173  0
0       75153609714454  0
0       75153626491954  0
0       75153643087579  0
0       75153659892110  0
0       75153676623100  0
0       75153710119975  0
0       75153743700860  0
0       75153777001069  0
0       75153843714662  0
0       75153860340131  0
0       75153877015131  0
0       75153910435964  0
0       75153943864454  0
0       75153977357371  0
0       75154010686850  0
0       75154044245339  0
0       75154077459714  0
0       75154111062579  0
0       75154144366902  0
0       75154177938725  0
0       75154244873829  0
0       75154261383881  0
0       75154278122631  0
0       75154311477475  0
0       75154345154454  0
0       75154378347371  0
0       75154411960912  0
0       75154461855548  0
0       75154478616902  0
0       75154511997423  0
0       75154612268048  0
0       75154629020339  0
0       75154645684141  0
0       75154662381902  0
0       75154679121173  0
0       75154695957995  0
0       75154745931016  0
0       75154762560912  0
0       75154796106745  0
0       75154829484506  0
0       75154863126745  0
0       75154896328985  0
0       75154929769610  0
0       75154963208829  0
0       75154996592474  0
0       75155030027110  0
0       75155063514610  0
0       75155096818099  0
0       75155130309818  0
0       75155163711641  0
0       75155196983881  0
0       75155230591797  0
0       75155263867370  0
0       75155297110391  0
0       75155330722110  0
0       75155380769870  0
0       75155431071172  0
0       75155447685651  0
0       75155481061901  0
0       75155497811485  0
0       75155565012110  0
0       75155581256172  0
0       75155614818360  0
0       75155631568985  0
0       75155664830860  0
0       75155698306537  0
0       75155731727005  0
0       75155765030183  0
0       75155798560755  0
0       75155832071224  0
0       75155882198047  0
0       75155898720547  0
0       75155932292787  0
0       75155965658412  0
0       75155999120287  0
0       75156032369922  0
0       75156065899037  0
0       75156099374609  0
0       75156132631641  0
0       75156166211849  0
0       75156199663620  0
0       75156233020182  0
0       75156266231589  0
0       75156299606380  0
0       75156333153099  0
0       75156450209245  0
0       75156466872839  0
0       75156483620495  0
0       75156500582839  0
0       75156516923307  0
0       75156533518672  0
0       75156633869818  0
0       75156650588463  0
0       75156667235234  0
0       75156684052734  0
0       75156700766172  0
0       75156751034609  0
0       75156784305182  0
0       75156801062057  0
0       75156834540338  0
0       75156867999140  0
0       75156901351380  0
0       75156934761640  0
0       75156968168984  0
0       75157001610651  0
0       75157018328307  0
0       9223372036854775807     0

   类似 这样的,只取后边的有效数据,fps = 有效数据的长度/两帧之间的差的总和,注意两帧之间 的差要除以一的九次方。就得到fps了。

jank 得获取

FrameTime  两帧画面间隔耗时

同时满足两条件,则认为是一次卡顿Jank.
    ①Display FrameTime>前三帧平均耗时2倍。 
    ②Display FrameTime>两帧电影帧耗时 (1000ms/24*2=84ms)
 
  同时满足两条件,则认为是一次严重卡顿BigJank.
    ①Display FrameTime >前三帧平均耗时2倍。
    ②Display FrameTime >三帧电影帧耗时(1000ms/24*3=125ms)。文章来源地址https://www.toymoban.com/news/detail-418137.html

手机的基本信息:

deviceName = os.popen('adb shell getprop ro.product.model').read()
    print("手机型号:" + deviceName)
    platformVersion_ver = os.popen(
        'adb shell getprop ro.build.version.release').read()
    print("安卓版本:" + platformVersion_ver)
    level = os.popen('adb shell dumpsys battery |findstr level').read()
    print("手机电量:" + level)
    # 获取的包名 + 启动页
    platformVersion = os.popen(
        'adb shell dumpsys window | findstr mCurrentFocus').read()
    path = platformVersion[34:len(platformVersion) - 2]
    # 获取的包名
    pack_name = path.split("/")[0]
    print("包名 :" + pack_name)
    # 获取app的进程id
    dev_adb = "adb shell ps | findstr " + '"' + pack_name + '"'
    results = os.popen(dev_adb).read()
    print('CPU数量:' + str(os.cpu_count()))
    # 多个空格替换为一个空格
    str_result = re.sub(' +', ' ', results)
    pid = str_result.split(' ')[1]
    print("手机进程id:" + pid)

CPU  内存 占用

# 获取手机的GPU 信息
def get_gpu(platformVersion_ver, path):
    # path.split("/")
    pack_name = path.split("/")[0]
    results = os.popen('adb shell dumpsys cpuinfo | findstr ' +
                       pack_name).read()
    # print("\n")
    str_result = re.sub(' +', ' ', results)
    print(str_result)
    if len(results) > 0:
        cpuLine = str_result.split(' ')[6]
        print('CPU占用率: ' + cpuLine)
    else:
        print('没有获取到CPU数据' + str_result)
    # print(cpuLine)
# 获取手机的内存占用的情况
def get_memory(platformVersion_ver, pid):
    print('进程id ' + pid)
    results = os.popen('adb shell top -n 1 -d 0.5 | findstr ' + pid).read()
    # print("\n")
    # print(results)
    if len(results) > 0:
        str_result = re.sub(' +', ' ', results)
        print(str_result)
        if platformVersion_ver > 7:
            cpuLine = str_result.split(' ')[6]
        else:
            cpuLine = str_result.split(' ')[9]
        print('内存占用: ' + cpuLine)
    else:
        print('没有获取到内存数据')

到了这里,关于使用adb命令获取Android SurfaceView 的 帧率(fps)jank,手机的基本信息的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【英飞凌PSoC 6】使用软件和硬件I2C点亮OLED屏,帧率从2FPS提升到51FPS

    by xusiwei1236 本文将会分别介绍——使用软件I2C和硬件I2C在PSoC开发板上点亮OLED屏,并进行屏幕刷新率对比测试,最后还会在硬件I2C的基础上继续优化屏幕刷新率。本文实验使用的OLED屏尺寸为0.96寸,分辨率为128x64,驱动芯片为SSD1306。本文使用的开发环境为RT-Thread Studio,设备上

    2024年02月16日
    浏览(46)
  • 使用adb命令获取手机ip地址

    最近一个项目需要使用adb开启服务,然后客户端使用安卓设备的IP地址连接到服务。 目前每次开启服务之后,都需要在安卓设备查看IP后输入连接,非常的麻烦。于是我想着试用adb获取IP,试过ifconfig等命令都没有用。 最后我找到了以下命令: adb shell ip addr show wlan0 wlan0就是无

    2024年02月11日
    浏览(50)
  • 【adb命令】Android实用技巧之adb命令:getprop,setprop命令使用

    一、getprop 1.1 getprop简介 getprop命令的作用就是从系统的各种配置文件中读取一些设备的信息。这些文件在我们的手机设备中是可以找到的。 1.2 查询所有的配置 会列出所有的配置信息 这些配置中以ro开头的是只读属性。 1.3 查看单个配置信息 可以在adb shell getprop后面加属性名

    2024年02月04日
    浏览(43)
  • Android使用adb命令查看CPU信息

    Android使用adb命令查看CPU信息 在开发和调试Android应用程序的过程中,了解设备的硬件信息是非常重要的。而其中一个关键信息就是设备的CPU信息。通过使用adb命令,我们可以轻松地查看Android设备的CPU信息。本文将介绍如何使用adb命令来查看CPU信息,并附上相应的源代码。 首

    2024年02月07日
    浏览(42)
  • 使用ADB命令查询Android设备的安卓版本信息

    确保你已经安装了ADB并将其添加到系统的路径中。 连接你的Android设备到计算机,并确保启用了开发者选项和USB调试模式。你可以在设备的设置中找到这些选项。 打开终端(命令提示符或终端窗口)。 运行以下ADB命令来获取Android设备的安卓版本信息: 如果你希望获得更详细

    2024年02月08日
    浏览(41)
  • Android13 adb input 调试命令使用和源码解析

    目录 一、概述 二、常用命令 2.1 输入文本 2.2 模拟按键 2.3 模拟点击 2.4 模拟滑动 2.5 模拟长按 2.6 模拟滚动 三、进阶用法 3.1 组合按键的用法 3.2 长按power键 3.3 输入中文 3.4 代码模拟发送按键 1. 方法1: 2. 方法2: 3. 方法3: 四、注意事项 五、源码解析 六、总结 好了 本篇作为And

    2024年01月20日
    浏览(59)
  • 可测含多进程的app-- python调用adb命令获取Android App应用的性能数据:CPU、GPU、内存、电池、耗电量(含python源码)

    python脚本通过os.popen()方法运行adb命令,获取性能数据,将性能数据保存在csv文件并算出均值、最大值、最小值。 本脚本可测试一个app包含多个进程的场景,可以获取 每个进程的性能数据 。 2.1 软件环境 具备python环境,Android环境 需要python库:os, csv, time, datetime, sys,time,panda

    2024年02月13日
    浏览(41)
  • Android 使用OpenCV实现实时人脸识别,并绘制到SurfaceView上

    上篇文章 我们已经通过一个简单的例子,在 Android Studio 中接入了 OpenCV 。 之前我们也 在Visual Studio上,使用OpenCV实现人脸识别 中实现了人脸识别的效果。 接着,我们就可以将 OpenCV 的人脸识别效果移植到 Android 中了。 1.1 环境说明 操作系统 : windows 10 64 位 Android Studio 版本

    2024年02月10日
    浏览(50)
  • 【Android】使用 adb 命令行工具结合 pm列出 Android 设备上已安装应用的应用名称和包名

    要列出 Android 设备上已安装应用的应用名称和包名,你可以使用 adb 命令行工具结合 pm(PackageManager)命令来实现。 首先,确保你已经安装了 Android SDK,并将 adb 工具添加到系统的环境变量中。 然后,打开终端或命令行窗口,连接你的 Android 设备,并输入以下命令: 上述命令

    2024年02月09日
    浏览(45)
  • 使用 adb 命令修改 Android/data 目录下的文件(给碧蓝档案国服吃布丁)

    本文记录如何使用 adb 命令修改 Android/data 目录下的文件,然后给国服的碧蓝档案打上布丁🍮~ 今天下午刷着刷着微博就看到国服 BA 又又又发了和谐公告 ... 心情复杂。jpg 于是乎终于想起来得吃布丁🍮了,至于此次更新后布丁有没有用还未知,但还是先搞上 食用方法之前就出

    2024年03月24日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包