NDK下获取vsync时间

在做渲染相关处理的时候,经常需要和Android系统的Vsync做同步,今天来说一下NDK下如何实现。

ndk下专门提供了AChoreographer来做这件事,第一步要加载头文件<android/choreographer.h>。

然后实际使用也很简单,获取实例,注册回调,然后就等着收到回调时间就可以了。回调的参数是上一帧vsync开始的时间戳,单位是纳秒ns,可以根据前两帧时间或者刷新率,来计算两帧中间的时间差,从而预测下一帧到来的时间。

AChoreographer *grapher = AChoreographer_getInstance();
AChoreographer_postFrameCallback(grapher, frameCallback, nullptr);

有几个需要注意的地方:

1. callback只会回调一次,即注册的函数只是针对下一帧生效,如果需要一直监听vsync的话,可以在通过嵌套注册。

void frameCallback(long frameTimeNanos, void* data) {
    //do something
    AChoreographer_postFrameCallback(grapher, frameCallback, nullptr);
}

2. 所在的线程要有一个looper,否则获取不到AChoreographer实例。而且在创建后,要在线程里处理looper消息,否则也收不到回调。

void run() {

    ALooper* looper = ALooper_forThread();
    if (looper == NULL) {
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值