使用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

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

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

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

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

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

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

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

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

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

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

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

    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日
    浏览(14)
  • 可测含多进程的app-- python调用adb命令获取Android App应用的性能数据:CPU、GPU、内存、电池、耗电量(含python源码)

    可测含多进程的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日
    浏览(13)
  • Android 使用OpenCV实现实时人脸识别,并绘制到SurfaceView上

    Android 使用OpenCV实现实时人脸识别,并绘制到SurfaceView上

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

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

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

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

    使用 adb 命令修改 Android/data 目录下的文件(给碧蓝档案国服吃布丁)

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

    2024年03月24日
    浏览(8)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包