首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

W/Choreographer(11277):帧时间是未来的13.988632毫秒!检查图形HAL是否使用正确的时基生成vsync时间戳

W/Choreographer(11277):帧时间是未来的13.988632毫秒!检查图形HAL是否使用正确的时基生成vsync时间戳。

这是一个关于Android系统中Choreographer的警告信息。Choreographer是Android系统中负责管理UI渲染和动画的一个重要组件。它的主要作用是协调应用程序的UI事件和UI渲染,以保证流畅的用户体验。

在这个警告信息中,"帧时间是未来的13.988632毫秒"表示当前帧的时间戳比实际时间要超前13.988632毫秒。这可能是由于图形HAL(Hardware Abstraction Layer,硬件抽象层)在生成vsync(垂直同步)时间戳时使用了错误的时基导致的。

图形HAL是Android系统中的一个组件,它提供了对底层图形硬件的抽象接口,使应用程序可以与不同的图形硬件进行交互。时基是用于测量时间的基准,它可以是系统时钟或者硬件时钟。正确的时基选择对于生成准确的时间戳非常重要,以确保UI渲染和动画的流畅性。

解决这个问题的方法是检查图形HAL是否使用了正确的时基生成vsync时间戳。如果发现时基选择错误,可以通过调整图形HAL的配置或者更新相关的驱动程序来解决。另外,也可以尝试重启设备或者应用程序,以确保系统和应用程序的状态正常。

腾讯云提供了一系列与云计算相关的产品和服务,包括云服务器、云数据库、云存储、人工智能等。具体推荐的产品和产品介绍链接地址可以根据具体的需求和场景来确定。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

​一图像Android之旅 :应用首个绘制请求

无论从系统工程师角度或者应用开发者角度来看,这个离用户最近系统都是非常值得我们去一探其工作原理,通过了解Android图形系统工作流程,可以帮助我们在实际生产设计应用或者分析图形性能问题做出高效明智选择...显示器在显示动态画面,每一图像显示实际上由上到下逐行扫描,当扫描完最后一行,需要将扫描点挪到左上角继续下一次扫描,而这个重置扫描点动作称为vblank,在vblank之前将会产生一个信号称为...而作为首篇文章,要跟踪流程自然应用如何发出首绘制请求.毕竟有了vsync,我们应用图形生产代码才会工作起来. 根据跟踪代码绘制时序图: ?...生成Vsync事件时间点,这里要保证这个值真实可靠性(事件不可能发生在未来) FrameDisplayEventReceiver实现了Runnable接口,这里将自身添加到Handler中,所以当早于...(); Trace.traceEnd(Trace.TRACE_TAG_VIEW); } ... } 注意,frameTimeNanos就是HAL生成Vsync时间,而该函数中记录

2.1K30

面试官:如何监测应用 FPS ?

即使你不知道 FPS,但你一定听说过这么一句话,在 Android 中,每一绘制时间不要超过 16.67ms。那么,这个 16.67ms 怎么来呢?就是由 FPS 决定。...Android 设备 FPS 一般 60,也即每秒要刷新 60 ,所以留给每一绘制时间最多只有 1000/60 = 16.67ms 。...一旦某一绘制时间超过了限制,就会发生 掉,用户在连续两会看到同样画面。 监测 FPS 在一定程度上可以反应应用的卡顿情况,原理也很简单,但前提你对屏幕刷新机制和绘制流程很熟悉。...timestampNanos vsync 信号时间,单位纳秒,所以这里做一个除法转换为毫秒。.../ frameTimeNanos vsync 信号回调时间,startNanos 当前时间 // 相减得到主线程耗时时间 final long jitterNanos =

1.5K20
  • 面试官:如何监测应用 FPS ?

    什么 FPS ? 即使你不知道 FPS,但你一定听说过这么一句话,在 Android 中,每一绘制时间不要超过 16.67ms。那么,这个 16.67ms 怎么来呢?...Android 设备 FPS 一般 60,也即每秒要刷新 60 ,所以留给每一绘制时间最多只有 1000/60 = 16.67ms 。...一旦某一绘制时间超过了限制,就会发生 掉,用户在连续两会看到同样画面。 监测 FPS 在一定程度上可以反应应用的卡顿情况,原理也很简单,但前提你对屏幕刷新机制和绘制流程很熟悉。...timestampNanos vsync 信号时间,单位纳秒,所以这里做一个除法转换为毫秒。.../ frameTimeNanos vsync 信号回调时间,startNanos 当前时间 // 相减得到主线程耗时时间 final long jitterNanos =

    1.5K20

    “终于懂了” 系列:Android屏幕刷新机制—VSyncChoreographer 全面理解!

    由于图像绘制和屏幕读取 使用同个buffer,所以屏幕刷新可能读取到不完整画面。...双缓存会在VSync脉冲交换,但CPU/GPU绘制随机时间顺序来看下将会发生过程: Display显示第0数据,此时CPU和GPU渲染第1画面,且在Display显示下一前完成 因为渲染及时...中,每当收到 VSYNC 信号Choreographer 将首先处理 INPUT 类型任务,然后 ANIMATION 类型,最后才是 TRAVERSAL 类型。...timestampNanos VSync脉冲时间 * @param physicalDisplayId Stable display ID that uniquely describes...答:布局层级较多/主线程耗时 会影响CPU/GPU执行时间,大于16.6ms只能等下一个VSync了。 16.6ms刷新一次 啥意思?

    9.2K135

    在 Android 上进行高刷新率渲染

    要在 90Hz 下进行渲染,应用需要在 11.1ms 内生成,与此相比,在 60Hz 则有 16.6ms 来生成。 为了详细说明这一点,我们来看看 Android UI 渲染流水线。...GPU ; GPU 绘制这一; SurfaceFlinger 负责在屏幕上显示不同应用窗口系统服务,它会组合出屏幕应该最终显示出内容,并将画面提交给屏幕硬件抽象层 (HAL); 屏幕最终呈现该内容...整个流水线由 Android Choreographer 控制。Choreographer 基于显示垂直同步 (vsync) 事件,它表示屏幕开始扫描出图像并更新显示像素时间点。...) 来深化流水线,并将呈现时间推迟一个 vsync。...设置呈现时间可以向 SurfaceFlinger 指示何时呈现图像。如果设置为未来,它就会按照设置帧数加深流水线。

    3K11

    Android VSYNCChoreographer)与UI刷新原理分析.md

    --检查是否因为延迟执行掉,每大于16ms,就多掉一--> if (jitterNanos >= mFrameIntervalNanos) { final long...--开始doFrame真正有效时间--> frameTimeNanos = startNanos - lastFrameOffset; }...--这种情况一般生成vsync机制出现了问题,那就再申请一次--> scheduleVsyncLocked(); return; }...--intendedFrameTimeNanos本来要绘制时间,frameTimeNanos真正,可以在渲染工具中标识延迟VSYNC多少--> mFrameInfo.setVsync...doFrame里除了UI重绘,其实还处理了很多其他事,比如检测VSYNC被延迟多久执行,掉了多少,处理Touch事件(一般MOVE),处理动画,以及UI,当doFrame在处理Choreographer.CALLBACK_TRAVERSAL

    1.7K10

    Choreographer原理及应用

    屏幕开始刷新时候,实际上并不知道缓冲区是什么状态(不知道缓冲区中是否绘制完毕,绘制未完的话,就是某些部分这一,某些部分上一),因此它从GPU中抓住可能并不是完全完整。...此时刷新屏幕,它将使用缓冲(事先已经绘制好了),而不是使用正在处于绘制状态后缓冲,这就是VSYNC作用。 屏幕刷新率比速率快情况 如果屏幕刷新率比速率快,屏幕会在两中显示同一个画面。...(); return; } //timestampNanosVSYNC回调时间 以纳秒为单位 long...VSYNC信号来时时间差值,如果Looper有很多异步消息等待处理(或者前一个异步消息处理特别耗时,当前消息发送了很久才得以执行),那么处理当来到这里可能会出现很大时间间隔 final...Choreographer 流畅度监测 通过设置ChoreographerFrameCallback,可以在每一被渲染时候记录下它开始渲染时间,这样在下一被处理,我们可以根据时间差来判断上一在渲染过程中是否出现掉

    1.4K00

    Android 图形显示系统

    ,大约16.67毫秒刷新1) 系统速率(FPS):代表了系统在一秒内合成帧数,该值大小由系统算法和硬件决定。...通过上面的分析可以看出,屏幕显示节奏固定,操作系统需要配合屏幕显示,在固定时间内准备好下一,以供屏幕进行显示。两者通过VSync信号来实现同步。...上图中,横轴表示时间,纵轴表示Buffer使用者,每个长方形表示Buffer使用,长方形宽度代表使用时长,VSync代表垂直同步信号,两个VSync信号之间间隔16.6ms。...VSync消息,该信号将会发送给DisplayEventReceiver,最后传递给Choreographer Choreographer收到VSync信号之后,向主线程MessageQueue发送了一个异步消息...另外一个不好事情CPU只有在VSync信号来时候才开始绘制下一,也是就是说在第二个16.6ms时间内,CPU一直处于空闲状态,未进行下一计算。

    1.6K40

    Android Project Butter分析

    其中,VSYNC理解Project Buffer核心。VSYNCVertical Synchronization(垂直同步)缩写,一种在PC上已经很早就广泛使用技术。...请注意,后续讨论将以Display为基准,将其划分成16ms长度时间段,在每一时间段中,Display显示一数据(相当于每秒60)。时间段从1开始编号。...图5  SurfaceFlinger中和VSYNC有关类 由图5可知: HardwareComposer封装了相关HAL层,如果硬件厂商提供HAL层实现能定时产生VSYNC中断,则直接使用硬件VSYNC...Choreographer主要功能,当收到VSYNC信号,去调用使用者通过postCallback设置回调函数。...当收到VSYNC中断Choreographer将首先处理INPUT类型回调,然后ANIMATION类型,最后才是TRAVERSAL类型。

    1.2K90

    首次直播网友问题澄清

    一、问题1 如果同一时间多个view快速调用invalidate是否会触发多次request next vsync 回答:不会 scheduleTraversals触发后会将mTraversalScheduled...改成false,直到next vsync来了之之前,都不会重复触发mChoreographer.postCallback(Choreographer.CALLBACK_TRAVERSAL...)...校准是否会影响界面的卡顿 回答:大概率不会 整个校准有两个路径分别是onComposerHalVsync和postComposition 路径1 onComposerHalVsync硬件vsync回调...sf主线程合成接触之后调用,将上一presentfencesignal时间作为hw vsync采样数据。...三、直播中有个图描述不够进准 因为直播是否主要是在讲TimeDispatcher触发wake time给sf和app,这里面就简单将HW Vsync和TimeDispatcher关联起来了,其实本质上两者没有直接关系

    23830

    Android GPU呈现模式原理及卡顿掉浅析

    工具使用很简单,就是直观上看一耗时有多长,绿线16ms阈值,超过了,可能会导致掉,这个跟VSYNC垂直同步信号有关系,当然,这个图表并不是绝对严谨(后文会说原因)。...在使用Profile GPU Rendering工具,我面临第一个问题:官方文档使用指导好像不太对。...VSYNC信号到达时间,如下 private final class FrameDisplayEventReceiver extends DisplayEventReceiver...下面看一下Input时间耗时,之前,针对Touch事件耗时都是直接用了,并未分析为何一里面会有且只有一个Touch事件耗时?是否所有的Touch事件都被统计了呢?...表示将位图信息上传到 GPU 所花时间,不过Android手机上 CPU跟GPU共享物理内存,这里上传个人理解成拷贝,这样的话,CPU跟GPU所使用数据就相互独立开来,两者并行处理时候不会有什么同步问题

    2.9K50

    从 Android 开发到读懂源码 第08期:Android应用层视图渲染机制

    vsync 时间 } // 避免下一提前渲染,如果本次 vsync 执行 doFrame 比上一计划提交时间早,则将本放到下一个 vsync 进行渲染..., frameTimeNanos); // 遍历完成提交,修复下一提交时间,保证和 vsync 节奏同步 doCallbacks(Choreographer.CALLBACK_COMMIT...信号后会先判断是否(执行 doFrame 时间Vsync 时间延迟),打印出掉信息,再进行渲染刷新,之前 ViewRootImpl.scheduleTraversals 方法中通过 mChoreographer.postCallback...,如果超过了 n >= 2 个 vsync 周期,则会在接下来 n 个 vsync 周期中不再处理任何,下一会在 n 个周期后对齐 vsync 信号开始处理,相当于中途抛弃 n 画面,达到尽可能帧率平稳...系统图形管理服务(纯 c++ 服务,不像 AMS,PMS,WMS ),核心流程下面几个方法,应用开发可以不需要过多关注,感兴趣自行阅读。

    57810

    Android卡顿分析

    一、卡顿原因 屏幕1秒60,平均每16.6毫秒,如果代码实现不佳,或者过于复杂,导致一绘制时间大于16.6毫秒,则无法完成绘制,造成丢帧,连续出现掉,在现象上表现为卡顿。...这并不表示 GPU 在此期间仅使用相应缓冲区内容工作。如需详细了解给定时间内 GPU 执行工作,您可能需要使用 Android GPU 检查器。...时长超过 16 毫秒事件会以红色表示,以突出显示潜在的卡顿,因为它们超出了以 60 /秒 (fps) 速度进行呈现截止时间。...VSYNC:此部分显示 VSYNC,这是一个表示与显示流水线保持同步信号。该轨迹会显示 VSYNC-app 信号,这个信号会在应用启动时间过晚显示。...BufferQueue 可帮助您了解图像缓冲区在 Android 图形组件之间切换状态。例如,值 2 表示应用当前处于三重缓冲状态,这会导致额外输入延迟。

    2.5K20

    Android 显示刷新机制、VSYNC和三重缓存机制

    Choreographer 在之前文章《从源码分析Choreographer如何实现VSYNC信号请求及刷新处理?...垂直同步(vsync)指的是显卡输出帧数和屏幕垂直刷新率相同。在当下,垂直同步含义我们可以理解为,使得显卡生成速度和屏幕刷新速度保持一致。...没有使用 VSYNC 我们来看没有 VSYNC 情况: 这个图中有三个元素,Display 显示屏幕,GPU 和 CPU 负责渲染帧数据,每个以方框表示,并以数字进行编号,如0、1、2等等。...答案就在 VSYNC 身上! 使用 VSYNC 信号 我们来看,Android 引入 VSYNC 之后执行示意图: 第0显示,CPU 和 GPU 准备好了第一内容。...注意,一旦过了 VSYNC 时间点,CPU 就不能被触发以处理绘制工作了。 以上使用双重缓存机制产生问题,那么又如何来解决呢?

    2.4K20

    用两张图告诉你,为什么你App会卡顿?

    同时当收到一个Vsync信号,第N开始绘制。等再收到一个Vsync信号,第N才被SurfaceFlinger合成。而需要显示到屏幕上,需要等都第三个Vsync信号。这是比较低效率。...实际上很难一直维持这种有序和流畅,比如frame_3比较复杂,它绘制完成时间超过了SurfaceFlinger开始合成时间,所以它必须要等到下一个Vsync信号到来时才能被合成。...就好比你在PC上用画板画图,此时画板就相当于Android中图形库,它提供了一系列标准化工具供我们画图使用。比如我们drawRect()实际就是操作图形库在内存上写入了一个矩形数据。...当ViewRootImpl执行到draw()方法(即开始绘制图形数据了),会根据是否开启了硬件(从Android 4.0开始默认开启)加速来决定是使用CPU软绘制还是使用GPU硬绘制。...如果使用了硬绘制,图形数据会被绘制在DisplayListCanvas上。DisplayListCanvas会通过GPU使用openGL图形库进行绘制,因此具有更高效率。

    2.1K91

    说说AndroidUI刷新机制实现

    由于Androidview绘制不是今天重点,所以这里点到为止~ 二、屏幕刷新分析 屏幕刷新时机Vsync信号到来时候,具体如图: ? 在Android端,谁在控制 Vsync 产生?...doing too much work on its main thread."); } ... } ... } frameTimeNanos 当前时间...,将当前时间和开始时间相减,得到这一处理花费了多长,如果大于 mFrameIntervalNano ,说明处理耗时了,之后就打印出我们日常见到 The application may be doing...这里60/秒屏幕刷新频率,但是是否会调用onDraw()方法要看应用是否调用requestLayout()进行注册监听。 如果界面不需要重绘,那么还16ms到后还会刷新屏幕吗?...不会,到等到下一个Vsync信号到来 我们说丢帧是因为主线程做了耗时操作,为什么主线程做了耗时操作就会引起丢帧 原因,如果在主线程做了耗时操作,就会影响下一绘制,导致界面无法在这个Vsync时间进行刷新

    1.4K30

    那些年我们用过显示性能指标

    PS 2:本文主要讨论 Android 源码为 Android 6.0 备注:基于 OpenGL 应用可以使用 Choreographer VSYNC 信号来进行图像渲染工作安排。...Choreographer:当收到 VSYNC 信号Choreographer 将按优先级高低依次去调用使用者通过 postCallback 提前设置回调函数,它们分别是:优先级最高 CALLBACK_INPUT...、Frame rate 也仅仅是针对这 128 帧数据所计算出来结果,它们具体含义分别是: Jankiness count:根据相邻两绘制时间差值,“估计”是否存在跳帧并进行跳帧次数统计; Max...如下面代码中, jitterNanos 记录了绘制前后两所间隔时间差, 而 skippedFrames 则记录了 jitterNanos 这段时间 doFrame 错过了多少个 VSYNC 信号,即跳过了多少...通过这个接口,我们可以在每一被渲染时候记录下它开始渲染时间,这样在下一被处理,我们不仅可以判断上一在渲染过程中是否出现掉,而整个过程都是实时处理,这为我们可以及时获取相关调用栈信息来辅助定位潜在性能缺陷有极大帮助

    85520

    Choreographer全解析

    今天继续屏幕刷新机制知识讲解,上文说到vsync处理,每一UI绘制前期处理都在Choreographer中实现,那么今天就来看看这个神奇舞蹈编舞师怎么将UI变化反应到屏幕上。...因为我们刚才一开始时候设置了同步屏障,所以异步消息就会先执行,这里设置异步也就是为了让消息第一时间执行而不受其他Handler消息影响。...Choreographer初始化时候,会新建一个当前线程对应Handler对象,初始化FrameDisplayEventReceiver,计算一时间等一系列初始化工作。...这个FrameDisplayEventReceiverChoreographer构造方法中实例化,继承自DisplayEventReceiver,主要就是处理VSYNC信号申请和接收。...: 设置当前开始绘制时间,上节说过开始绘制要在vsync信号来时候开始,保证两者时间对应。

    47030

    用两张图告诉你,为什么你App会卡顿?

    同时当收到一个Vsync信号,第N开始绘制。等再收到一个Vsync信号,第N才被SurfaceFlinger合成。而需要显示到屏幕上,需要等都第三个Vsync信号。这是比较低效率。...实际上很难一直维持这种有序和流畅,比如frame_3比较复杂,它绘制完成时间超过了SurfaceFlinger开始合成时间,所以它必须要等到下一个Vsync信号到来时才能被合成。...就好比你在PC上用画板画图,此时画板就相当于Android中图形库,它提供了一系列标准化工具供我们画图使用。比如我们drawRect()实际就是操作图形库在内存上写入了一个矩形数据。...当ViewRootImpl执行到draw()方法(即开始绘制图形数据了),会根据是否开启了硬件(从Android 4.0开始默认开启)加速来决定是使用CPU软绘制还是使用GPU硬绘制。...如果使用了硬绘制,图形数据会被绘制在DisplayListCanvas上。DisplayListCanvas会通过GPU使用openGL图形库进行绘制,因此具有更高效率。

    90630
    领券