Android Graphics 显示系统 - Android Jank detection with FrameTimeline

news2024/11/25 11:47:34

“ 最近有公司同事在处理UI卡顿及FPS自动化监测的问题,我也顺便看了一点相关的内容,其中在Perfetto的官方说明文档中有一篇关于利用FrameTimeLine进行Jank监测的解读,个人觉得蛮有意思的,借助工具翻译该篇文章并加上本人拙劣的解读供大家把玩!

注意:Android 12(S)以及更高版本的安卓系统的SurfaceFlinger中才有实现FrameTimeLine的逻辑。

/frameworks/native/services/surfaceflinger/FrameTimeline/

英文好且对Graphics知识有一定了解的,无需阅读拙作,直接读英文原文即可,地址:

https://perfetto.dev/docs/data-sources/frametimeline


01 前言

Jank/Janky直译就是劣质的、不可靠的。如果一个Frame被认为出现了Jank,则说明该帧图像没有按照调度器给出的预计时间显示到屏幕上,通常就是显示晚了。

Jank会造成什么影响呢?

  • 不稳定的帧率 -- 比如正常是60fps,但因为Jank帧率可能只有50fps,导致画面不流畅;

  • 延迟增加 -- 在一些实时性要求高的场景,画面可能延时几个vsync显示,比如视频播放时AV不sync;

怎么监测Jank呢?

FrameTimeline是SurfaceFlinger中的一个模块,用于监测Jank并报告Jank的来源。

02 APP Timeline

对于至少有一帧画面显示到屏幕上的应用,在抓取的Perfetto信息中会看到两个Timeline轨迹:Expected Timeline 和 Actual Timeline

图片

Expected Timeline:预期时间线,每个切片表示应用程序渲染帧的时间。为了避免系统中出现janks,该应用程序预计将在此时间范围内完成。切片开始时间是Choreographer callback计划运行的时间。

Actual Timeline:这些切片表示应用程序完成帧的绘制(包括GPU工作)并将其发送给SurfaceFlinger进行合成所花费的实际时间。起始时间是Choreographer#doFrame或AChoreographer_vsyncCallback开始运行的时间。切片的结束时间表示 (gpu time, post time) 两者的最大值。post time是应用的帧发送到SurfaceFlinger的时间。

图片

看到这里大家会不会有什么疑问或发现?

对于Case 2,比较符合常规理解,CPU和GPU的工作都做完了,即APP的一帧图片绘制完成了,然后才送到SurfaceFlinger去显示;

对于Case 1,GPU的绘制还没完成就先送去SurfaceFlinger了,这不会有问题吧?当然不会,这就是acquire fence的意义了,不熟悉的可以参考前面文章

Android Graphics 显示系统 - GraphicBuffer同步机制-Fence(二十)

我们看Android 14代码中,主要是哪里在等待acquire fence:

CLIENT合成时,会调用到RenderEngine::drawLayers方法来呼叫GPU完成合成工作,要等到layer的buffer准备好后才能开始合成工作,此时就要等待acquire fence。

/frameworks/native/libs/renderengine/skia/SkiaRenderEngine.cpp
ftl::Future<FenceResult> RenderEngine::drawLayers(...) {
    ......
    drawLayersInternal(std::move(resultPromise), display, layers, buffer, useFramebufferCache,
                       std::move(bufferFence));
    return resultFuture;
}

/frameworks/native/libs/renderengine/skia/SkiaRenderEngine.cpp
void SkiaRenderEngine::drawLayersInternal(......) {
    ...
    if (layer.source.buffer.buffer) {
        ATRACE_NAME("DrawImage");

        // if the layer's buffer has a fence, then we must must respect the fence prior to using
        // the buffer.
        if (layer.source.buffer.fence != nullptr) {
            waitFence(grContext, layer.source.buffer.fence->get()); // 等待acquire fence
        }
    ...
}

DEVICE合成时,layer的buffer连同其acquire fence会送到HWC,HWC合成前会等待acquire fence。以/external/drm_hwcomposer为例来看:

点击阅读全文:

Android Jank detection with FrameTimeline

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java 数据库连接(JDBC)的使用,包括连接数据库、执行SQL语句等

一、简介 Java Database Connectivity&#xff08;JDBC&#xff09;是Java应用程序与关系数据库进行交互的一种API。它提供了一组用于访问和操作数据库的标准接口&#xff0c;使开发人员能够使用Java代码执行数据库操作&#xff0c;如查询、插入、更新和删除等。 二、JDBC架构…

红酒保存中的软木塞与瓶身保护

云仓酒庄雷盛红酒&#xff0c;以其卓着的品质和精美的包装赢得了众多消费者的喜爱。在红酒的保存过程中&#xff0c;软木塞与瓶身保护是至关重要的环节。本文将深入探讨这两方面的问题&#xff0c;以帮助消费者更好地理解和欣赏云仓酒庄雷盛红酒。 首先&#xff0c;我们来谈谈软…

关于调用百度AI开放平台短文本在线合成API接口 Open api characters limit reached 问题

官方示例代码中心&#xff1a; https://console.bce.baidu.com/support/?_1668482508529#/api?productAI&project语音技术&parent语音合成&apitext2audio&methodpost 一、调试时&#xff0c;若提示 16: Open api characters limit reached&#xff08;{"…

《维汉翻译通》App全新升级:维吾尔语短文本翻译、汉语拼音标注、维语词典、谚语格言名句等功能统统免费!还支持维吾尔文OCR识别提取文字!

2024年《维汉翻译通》App迎来重大更新&#xff01;这次升级不仅带来了全新的功能&#xff0c;还为所有用户提供了更加便捷的服务体验。以下是我们新版本的主要亮点&#xff1a; 维语短文本翻译免费啦&#xff01; 我们深知语言是沟通的桥梁&#xff0c;为了让更多人能够跨越语…

Python 短文本匹配,短文本语义相似度,基于大模型的短文本匹配,基于LLMs的短文本语义相似度识别,短文本语义扩充和匹配

1.任务描述 之前在做疾病相似度匹配的时候&#xff0c;堪称史诗级难题&#xff0c;虽然最后加上规则以及一些nlp模型&#xff0c;取得了差强人意的效果&#xff0c;但是短文本的语义相似度匹配一直属于比较难以攻克的难题 2.思路 随着近年大模型的飞速发展&#xff0c;就之前…

七天进阶elasticsearch[two]

批量保存 批量保存是通过_bulk API来实现的 请求方式 post 请求地址 _bulk 通过_bulk操作文档,一般至少有两行参数 第一行用于确定要干什么(插入,修改还是删除) 第二行才是操作的数据; 当然以上是标准操作,也可以不遵循标准操作,使用不同的请求方式来完成 批量保存demo…

基于 MediaPipe 的 2D 和 3D 的人体姿态追踪:Rerun 展示

点击下方卡片&#xff0c;关注“小白玩转Python”公众号 概述 我们探讨一个使用 MediaPipe 在 2D 和 3D 中追踪人体姿态的用例。使这次探索更加有趣的是通过开源可视化工具 Rerun 提供的可视化功能&#xff0c;可以全方位展示人体姿态的动态。在这篇博文中&#xff0c;您将学习…

知识图谱的应用---智慧政务

文章目录 智慧政务典型应用 智慧政务 智慧政务即通过“互联网政务服务”构建智慧型政府&#xff0c;利用云计算、移动物联网、人工智能、数据挖掘、知识管理等技术&#xff0c;提高政府在办公、监管、服务、决策中的智能水平&#xff0c;形成高效、敏捷、公开、便民的新型政府&…

静态IP地址:多元化场景下的稳定连接解决方案

当考虑静态IP地址的适用场景时&#xff0c;我们可以从以下几个板块进行细分和归纳&#xff1a; 一、服务器托管与网络服务 1. 服务器托管 稳定性&#xff1a;静态IP确保服务器能够持续、稳定地接入互联网&#xff0c;减少因IP地址更新带来的服务中断风险。 可访问性&am…

java:reactor的Mono和Reactor的简单例子

【pom.xml】 <dependency><groupId>io.projectreactor</groupId><artifactId>reactor-core</artifactId><version>3.3.17.RELEASE</version> </dependency>【MyReactorTest2.java】 package com.chz.myReactor;import react…

基于 Delphi 的前后端分离:之三,使用 HTMX

# 前请提要 基于 Delphi 的前后端分离&#xff1a;之一_delphi 后台vue-CSDN博客 基于 Delphi 的前后端分离&#xff1a;之二_后端 框架 delphi-CSDN博客 # 发现一个非常好的前端框架 - HTMX 这里仍然使用之二里面提到的页面模板&#xff0c;但采用 HTMX 来和后端交互&#…

Redis持久化说明

Redis的持久化是指将内存中的数据持久化到磁盘中&#xff0c;以保证数据在重启或宕机后不会丢失。 Redis提供了两种主要的持久化方式&#xff1a;RDB(Redis DataBase)和AOF(Append Only File)。 RDB&#xff08;Redis DataBase&#xff09; 1、RDB快照原理 RDB持久化方式会定…

Django分页

1、在视图函数文件中引入‘分页器’ from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger 2、给原来的罗列信息函数&#xff0c;添加分页功能&#xff0c;即按照页码&#xff0c;只返回部分信息。 login_required def article_list(request):article…

Facechain系列: constants.py文件解读

在根目录下还有个facechain目录&#xff0c;其中的constants.py文件中定义了代码控制的重要参数。 1.姿态控制 在应用代码进行推理&#xff08;见这里Facechain系列: 通过代码进行推理&#xff09;中&#xff0c;如果将以下代码 use_pose_model False 修改为 use_pose_mo…

ICLR2024佳作:多视图Transformer再次升级,直接感知三维几何信息

论文标题&#xff1a; GTA: A Geometry-Aware Attention Mechanism for Multi-View Transformers 论文作者&#xff1a; Takeru Miyato, Bernhard Jaeger, Max Welling, Andreas Geiger 导读&#xff1a; 本文提出一种几何感知注意力机制&#xff0c;替换Transformer中原有的…

用TuneFab下载Apple Music

Apple Music以出色的高保真音质流式传输歌曲已不是什么秘密&#xff0c;但用iTunes下载的离线音乐&#xff0c;采用了Apple的DRM&#xff08;数字版权管理&#xff09;技术&#xff0c;并不能在其他应用上播放&#xff0c;通过TuneFab软件&#xff0c;可以截获iTunes播放流&…

【vue3|第7期】 toRefs 与 toRef 的深入剖析

日期&#xff1a;2024年6月6日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xff…

FISCO BCOS助力郑州数据交易中心“碳账户”小程序上线

近年来&#xff0c;科技和数字化成为推进可持续绿色发展的关键词。在第53个世界环境日来临之际&#xff0c;由FISCO BCOS支持建设的郑州数据交易中心双碳数据服务专区迎来了新进展&#xff01;近日&#xff0c;专区正式以"碳账户"小程序对外提供多种形式的碳数据服务…

我国衡器市场规模逐渐扩大 出口量远大于进口量

我国衡器市场规模逐渐扩大 出口量远大于进口量 衡器是利用力的杠杆平衡原理或胡克定律来测定物体质量的一种仪器设备。随着生产技术逐渐进步&#xff0c;衡器的种类逐渐增多。根据衡量方法不同&#xff0c;衡器大致可分为非自动衡器、自动衡器等&#xff1b;根据结构原理不同&a…

RE_TEA加密

TEA这段时间遇到的是真多&#xff0c;有直接原始加密&#xff0c;也有 XTEA&#xff0c;XXTEA&#xff0c;更有在此上魔改的&#xff0c;之前也是能认出来&#xff0c;知道还是不够。 en,TEA加密解密脚本还是用 C 好一些&#xff0c;什么溢出之类不用考虑。 TEA 也有可能是 …