systrace分析 之 问题初步定位

2、systrace分析 之 问题初步定位

  • 1、找到问题点
  • 2、有buffer,SF却什么没有取
    • 2.1、GPU 处理时间长导致
    • 2.2、区分HWC release 是否有异常:
    • 2.3、SF 异常导致
    • 2.4、SF 自身处理时间长
    • 2.5、RenderThread处理时间长
  • 3、案例分享

1、找到问题点


2、有buffer,SF却什么没有取

有tx buffer但sf 却什么都没有取,可以往下继续check 出帧process 的render thread 和 GPU complation /hwc complation的状态。

2.1 GPU 处理时间长

如下示例中,buffer TX 中有两个buffer,但SF 却没有去取,往下看,是前一帧的 waiting for GPU completion 在vsync-sf来的时候都没有完成。所以需要请GPU 进一步确认。

2.3、区分HWC release 是否有异常:

首先,需要先了解下HWC和GPU之间的fence是怎么样的一个过程?
    . GPU拿的是acquireFence   HWC拿的是releaseFence, GPU是绘图,HWC是合成显示,这两个是互相等待的关系,
    . 要GPU画完这块buffer acquireFence放掉,SF才能拿去合成显示,
    . 要driver完成合成显示,放掉releaseFence,GPU才能拿这块buffer去绘制,
    . 如果此时可用的buffer不止一块,可以一边合成一边绘制下一张,但是如果下一张画完了当前帧的releaseFence没有放掉,当前帧合成还没完成,
      就必须等待releaseFence放掉才能合下一帧   

下图是两个案例,因为wait PreFence 和waiting for HWC release 的时间是平行的,所以第一例中,虽然没有HWC release的信息,但是也可以从wait PreFence 的时间来估算HWC 那边的时间。 


2.3、SF 异常导致

如下surfaceflinger空缺点,上面对应的bufferTX 中有buffer,但VSYNC-SF 过来后,SurfaceFlinger却没有去取,检查测试app “android.settings”, 也没有GPU completion 时间长的问题,所以该部分可以请SurfaceFlinger的owner 进一步确认为何不取buffer。

2.4 SF 自身处理时间长

如下图中(120hz的刷新率,所以1 vsync = 8.333ms),整个surfaceflinger 的UI thread 看起来很忙,无空闲时间。则直接进一步check SurfaceFlinger

 

 2.5、RenderThread 处理时间长

如下实例中确认有tx buffer,但SF 没有去取是因为当前帧的GPU 合成还没有做完。 

但是GPU合成没有做完的原因是因为RenderThread 前期处理时间是太长,queuebuffer trigger 的太晚。所以需要进一步确认 RenderThread处理时间长的原因

3、案例分享

如下图中,虽然Frames有很多黄灯的地方,但是SurfaceFlinger只有三个空缺点,所以只需要check 那三个空缺点掉帧的原因就好。 

该案例为120hz的刷新率,所以1 vsync = 8.333ms

从图中UI thread 和 RenderThread的duration时间来看,都是UI Thread 的animation 时间较长导致。所以可以按照UI Thread 的check 方式进一步处理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/186041.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

外贸自建站怎么做?做外贸要怎样建设网站?

外贸自建站如何建立?海洋建站的具体步骤有哪些? 通过建立自己的外贸网站,您可以更好地展示公司的产品和服务,吸引更多的潜在客户,提高品牌知名度,拓展海外市场。那么,如何建立一个成功的外贸自…

移动硬盘打不开?正确操作方法分享!

“我的移动硬盘用了好几年了,但是不知道为什么,最近每次把移动硬盘插入电脑都显示无法打开。我还有一些很重要的数据在里面呢,有什么比较好的方法可以解决这个问题吗?” 作为一个便捷的存储工具,移动硬盘给我们带来了很…

MYSQL中的触发器TRIGGER

1.概念 触发器是一个特殊的存储过程,当触发器保护的数据发生变更时就会触发。 2.特性 1.触发器与表息息相关,一般我们一个表创建六个触发器。 2.六个触发器其实是三种类六个 insert 类型 before | after insertupdate 类型 before | af…

当攻防演练已成常态,企业应该相信西医还是老中医?

在面对疾病时,很多人常常会犹豫不决,不知道应该选择中医还是西医进行治疗。与疾病斗争的过程也是一场“战斗”,需要选择合适的“武器”和策略。有些人认为西医疗效快,能够迅速缓解症状;而另一些人则认为中医治疗更根本…

使用requests库设置no_proxy选项的方法

问题背景 在使用requests库进行HTTP请求时,如果需要使用爬虫IP服务器,可以通过设置proxies参数来实现。proxies参数是一个字典,其中包含了爬虫IP服务器的地址和端口号。然而,当前的requests库并不支持通过proxies参数来设置no_pr…

Azure 机器学习:使用 Azure 机器学习 CLI、SDK 和 REST API 训练模型

目录 环境准备克隆示例存储库 示例案例在云中训练1.连接到工作区PythonAzure CLIREST API 2. 创建用于训练的计算资源4. 提交训练作业PythonAzure CLIREST API 注册已训练的模型PythonAzure CLIREST API Azure 机器学习提供了多种提交 ML 训练作业的方法。 在本文中&#xff0c…

Java简介、基本语法

一、Java简介: Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 面向对象程序设计语言和 Java 平台的总称。 Java主要的特性: 1、Java语言是简单的的: Java语言的语法与C、C语言接近。Java丢弃了C中的一些特性,如操…

泛型编程 -- 模板详解

一、模板 在没有模板之前,如果我们写一个swap()两数交换函数,因为我们要支持 int 与int 交换 、double 与 double 交换等等情况,所以要实现swap()函数的多个重载,显得很繁琐,于是就引入了模板。 模板就是在需要模板的地…

HT8313 D/AB切换 音频功率放大器

HT8313具有AB类和D类的自Y切换功能,在受到D类功放EMI干扰困扰时,可随时切换至AB类音频功放模式(此时电荷泵升压功能关闭)。 HT8313内部固定28dB增益,内置的关断功能使待机电流Z小化,还集成了输出端过流保护…

用Python制作截图小工具

Python编程语言允许我们执行各种任务,所有这些都是在简单模块和短小精悍的代码的帮助下完成的。在Python的帮助下进行屏幕截图就是这样一项任务。 Python为我们提供了许多模块,使我们能够执行不同的任务。有多种方法可以使用Python及其库进行屏幕截图。…

利用 Kubernetes 降本增效?EasyMR 基于 Kubernetes 部署的探索实践

Kubernetes 是用于编排容器化应用程序的云原生系统。最初由 Google 创建,如今由 Cloud Native Computing Foundation(CNCF)维护更新。 Kubernetes 是市面上最受欢迎的集群管理解决方案之一。它自动化容器化应用程序的部署、扩展和管理&#…

Java学习之路 —— IO、特殊文件

文章目录 1. I/O1.1 常用API1.2 I/O流1.2.1 字节流1.2.2 try-catch-finally和try-with-resource1.2.3 字符流1.2.4 其他的一些流 2. I/O框架3. 特殊文件3.1. Properties3.2 XML 1. I/O 1.1 常用API // 1. 创建文件对象File file new File("E:\\ComputerScience\\java\\…