| 接口名 | 描述 |
|---|---|
| OH_NativeVSync_Create(const char* name, unsigned int length) | 创建一个OH_NativeVSync实例,每次调用都会产生一个新的实例并创建一个vsync线程接收处理回调。本接口需要与OH_NativeVSync_Destroy接口配合使用,否则会存在内存泄漏。 |
| OH_NativeVSync_Destroy(OH_NativeVSync* nativeVsync) | 销毁OH_NativeVSync实例。 |
| OH_NativeVSync_FrameCallback(long long timestamp, void *data) | 回调函数的形式,timestamp表示时间戳,data为回调函数入参。回调的处理在vsync初始化时创建的线程内。 |
| OH_NativeVSync_RequestFrame(OH_NativeVSync* nativeVsync, OH_NativeVSync_FrameCallback callback, void* data) | 请求下一次VSync信号,当信号到来时,调用回调函数callback。 |
| OH_NativeVSync_GetPeriod(OH_NativeVSync* nativeVsync, long long* period) | 获取当前Vsync信号周期。 |
详细的接口说明请参考NativeVsync。
以下步骤描述如何使用NativeVSync提供的Native API接口创建和销毁OH_NativeVSync实例,以及如何设置VSync回调函数。
添加动态链接库
CMakeLists.txt中添加以下库文件。
libnative_vsync.so
头文件
#include <native_vsync/native_vsync.h>
首先需要定义一个VSync回调函数。
void RenderEngine::OnVsync(long long timestamp, void *data)
{
OH_LOG_Print(LOG_APP, LOG_DEBUG, LOG_PRINT_DOMAIN, "RenderEngine", "OnVsync %{public}lld.", timestamp);
auto renderEngine = reinterpret_cast<RenderEngine *>(data);
if (renderEngine == nullptr) {
return;
}
renderEngine->vSyncCnt_++;
renderEngine->wakeUpCond_.notify_one();
} 创建OH_NativeVSync实例。
const char* demoName = "NativeImageSample"; nativeVsync_ = OH_NativeVSync_Create(demoName, strlen(demoName));
通过OH_NativeVSync实例设置VSync回调函数。
wakeUpCond_.wait(lock, [this]() { return wakeUp_ || vSyncCnt_ > 0; });
wakeUp_ = false;
if (vSyncCnt_ > 0) {
vSyncCnt_--;
(void)OH_NativeVSync_RequestFrame(nativeVsync_, &RenderEngine::OnVsync, this);
OH_NativeVSync_GetPeriod(nativeVsync_, &period);
} 销毁OH_NativeVSync实例。
OH_NativeVSync_Destroy(nativeVsync_); nativeVsync_ = nullptr;