1# NativeVsync 2 3 4## 概述 5 6提供NativeVsync功能。 7 8\@syscap SystemCapability.Graphic.Graphic2D.NativeVsync 9 10**起始版本:** 11 129 13 14 15## 汇总 16 17 18### 文件 19 20| 名称 | 描述 | 21| -------- | -------- | 22| [native_vsync.h](native__vsync_8h.md) | 定义获取和使用NativeVsync的相关函数。<br/>**引用文件:** <native_vsync/native_vsync.h> <br/>**库:** libnative_vsync.so | 23 24 25### 类型定义 26 27| 名称 | 描述 | 28| -------- | -------- | 29| typedef enum [OHNativeErrorCode](#ohnativeerrorcode) [OHNativeErrorCode](#ohnativeerrorcode) | 接口错误码说明(仅用于查询)。 | 30| typedef struct [OH_NativeVSync](#oh_nativevsync) [OH_NativeVSync](#oh_nativevsync) | 提供OH_NativeVSync结构体声明。 | 31| typedef void(\* [OH_NativeVSync_FrameCallback](#oh_nativevsync_framecallback)) (long long timestamp, void \*data) | VSync回调函数类型。 | 32 33 34### 枚举 35 36| 名称 | 描述 | 37| -------- | -------- | 38| [OHNativeErrorCode](#ohnativeerrorcode-1) {<br/>NATIVE_ERROR_OK = 0, NATIVE_ERROR_INVALID_ARGUMENTS = 40001000, NATIVE_ERROR_NO_PERMISSION = 40301000, NATIVE_ERROR_NO_BUFFER = 40601000,<br/>NATIVE_ERROR_NO_CONSUMER = 41202000, NATIVE_ERROR_NOT_INIT = 41203000, NATIVE_ERROR_CONSUMER_CONNECTED = 41206000, NATIVE_ERROR_BUFFER_STATE_INVALID = 41207000,<br/>NATIVE_ERROR_BUFFER_IN_CACHE = 41208000, NATIVE_ERROR_BUFFER_QUEUE_FULL = 41209000, NATIVE_ERROR_BUFFER_NOT_IN_CACHE = 41210000,NATIVE_ERROR_CONSUMER_DISCONNECTED = 41211000,NATIVE_ERROR_CONSUMER_NO_LISTENER_REGISTERED = 41212000, NATIVE_ERROR_UNSUPPORTED = 50102000,<br/>NATIVE_ERROR_UNKNOWN = 50002000,NATIVE_ERROR_HDI_ERROR = 50007000,NATIVE_ERROR_BINDER_ERROR = 50401000,<br/>NATIVE_ERROR_EGL_STATE_UNKNOWN = 60001000, NATIVE_ERROR_EGL_API_FAILED = 60002000<br/>} | 接口错误码说明(仅用于查询)。 | 39 40 41### 函数 42 43| 名称 | 描述 | 44| -------- | -------- | 45| [OH_NativeVSync_Create](#oh_nativevsync_create) (const char \*name, unsigned int length) | 创建一个OH_NativeVSync实例,每次调用都会产生一个新的实例。 | 46| [OH_NativeVSync_Destroy](#oh_nativevsync_destroy) ([OH_NativeVSync](#oh_nativevsync) \*nativeVsync) | 销毁OH_NativeVSync实例。 | 47| int [OH_NativeVSync_RequestFrame](#oh_nativevsync_requestframe) ([OH_NativeVSync](#oh_nativevsync) \*nativeVsync, [OH_NativeVSync_FrameCallback](#oh_nativevsync_framecallback) callback, void \*data) | 请求下一次vsync信号,当信号到来时,调用回调函数callback。 如果在同一帧内中多次调用此接口,则只会触发最后一个回调。 | 48| int [OH_NativeVSync_RequestFrameWithMultiCallback](#oh_nativevsync_requestframewithmulticallback) ([OH_NativeVSync](#oh_nativevsync) \*nativeVsync, [OH_NativeVSync_FrameCallback](#oh_nativevsync_framecallback) callback, void \*data) | 请求下一次vsync信号,当信号到来时,调用回调函数callback。 如果在同一帧内中多次调用此接口,每一次传入的callback都会被执行。 | 49| [OH_NativeVSync_GetPeriod](#oh_nativevsync_getperiod) ([OH_NativeVSync](#oh_nativevsync) \*nativeVsync, long long \*period) |获取vsync周期。| 50| int [OH_NativeVSync_DVSyncSwitch](#oh_nativevsync_dvsyncswitch) ([OH_NativeVSync](#oh_nativevsync) \*nativeVsync, bool enable) | 启用DVSync以提高自绘制动画场景的流畅性。 DVSync是Decoupled VSync的缩写,它是一种与硬件VSync解耦的帧时序管理策略。<br/>DVSync通过提前发送带有未来时间戳的VSync信号驱动后续动画帧的提前绘制,这些帧会被帧缓冲队列缓存;DVSync通过缓存的帧减少未来可能发生的丢帧,进而提高动画场景的流畅性。<br/>因为DVSync需要占用空闲的自绘制帧缓冲用于缓存提前绘制的动画帧,用户需要确保至少有一个空闲的帧缓冲区,否则不建议启用此功能。<br/>启用DVSync后,用户需要正确响应提前发送的VSync信号,并在前一个VSync对应的动画帧完成后再请求下一个VSync,且自绘制帧需要携带与VSync一致的时间戳。<br/>在动画结束之后,用户需要关闭DVSync。<br/>在不支持DVSync的平台或者如果有另一个应用程序已经启用了DVSync,则当前的启用操作将不会生效,应用程序仍将收到正常的VSync信号。 | 51 52## 类型定义说明 53 54 55### OH_NativeVSync 56 57 58``` 59typedef struct OH_NativeVSync OH_NativeVSync 60``` 61 62**描述:** 63 64提供OH_NativeVSync结构体声明。 65 66 67### OH_NativeVSync_FrameCallback 68 69 70``` 71typedef void(* OH_NativeVSync_FrameCallback) (long long timestamp, void *data) 72``` 73 74**描述:** 75 76VSync回调函数类型。 77 78\@syscap SystemCapability.Graphic.Graphic2D.NativeVsync 79 80**参数:** 81 82| 名称 | 描述 | 83| -------- | -------- | 84| timestamp | VSync时间戳。 | 85| data | 用户自定义数据。 | 86 87 88### OHNativeErrorCode 89 90``` 91typedef enum OHNativeErrorCode OHNativeErrorCode 92``` 93 94**描述** 95 96接口错误码说明(仅用于查询)。 97 98**起始版本:** 12 99 100 101## 枚举类型说明 102 103 104### OHNativeErrorCode 105 106``` 107enum OHNativeErrorCode 108``` 109 110**描述** 111 112接口错误码说明(仅用于查询)。 113 114**起始版本:** 12 115 116| 枚举值 | 描述 | 117| -------- | -------- | 118| NATIVE_ERROR_OK | 成功 | 119| NATIVE_ERROR_INVALID_ARGUMENTS | 入参无效 | 120| NATIVE_ERROR_NO_PERMISSION | 无权限操作 | 121| NATIVE_ERROR_NO_BUFFER | 无空闲可用的buffer | 122| NATIVE_ERROR_NO_CONSUMER | 消费端不存在 | 123| NATIVE_ERROR_NOT_INIT | 未初始化 | 124| NATIVE_ERROR_CONSUMER_CONNECTED | 消费端已经被连接 | 125| NATIVE_ERROR_BUFFER_STATE_INVALID | buffer状态不符合预期 | 126| NATIVE_ERROR_BUFFER_IN_CACHE | buffer已在缓存队列中 | 127| NATIVE_ERROR_BUFFER_QUEUE_FULL | 队列已满 | 128| NATIVE_ERROR_BUFFER_NOT_IN_CACHE | buffer不在缓存队列中 | 129| NATIVE_ERROR_CONSUMER_DISCONNECTED | 消费端已经被断开连接 | 130| NATIVE_ERROR_CONSUMER_NO_LISTENER_REGISTERED | 消费端未注册listener回调函数 | 131| NATIVE_ERROR_UNSUPPORTED | 当前设备或平台不支持 | 132| NATIVE_ERROR_UNKNOWN | 未知错误,请查看日志 | 133| NATIVE_ERROR_HDI_ERROR | HDI接口调用失败 | 134| NATIVE_ERROR_BINDER_ERROR | 跨进程通信失败 | 135| NATIVE_ERROR_EGL_STATE_UNKNOWN | egl环境状态异常 | 136| NATIVE_ERROR_EGL_API_FAILED | egl接口调用失败 | 137 138## 函数说明 139 140 141### OH_NativeVSync_DVSyncSwitch() 142 143``` 144int OH_NativeVSync_DVSyncSwitch (OH_NativeVSync* nativeVsync, bool enable ) 145``` 146 147**描述** 148 149启用DVSync以提高自绘制动画场景的流畅性。 DVSync是Decoupled VSync的缩写,它是一种与硬件VSync解耦的帧时序管理策略。 150 151DVSync通过提前发送带有未来时间戳的VSync信号驱动后续动画帧的提前绘制,这些帧会被帧缓冲队列缓存;DVSync通过缓存的帧减少未来可能发生的丢帧,进而提高动画场景的流畅性。 152 153因为DVSync需要占用空闲的自绘制帧缓冲用于缓存提前绘制的动画帧,用户需要确保至少有一个空闲的帧缓冲区,否则不建议启用此功能。 154 155启用DVSync后,用户需要正确响应提前发送的VSync信号,并在前一个VSync对应的动画帧完成后再请求下一个VSync,且自绘制帧需要携带与VSync一致的时间戳。 156 157在动画结束之后,用户需要关闭DVSync。 158 159在不支持DVSync的平台或者如果有另一个应用程序已经启用了DVSync,则当前的启用操作将不会生效,应用程序仍将收到正常的VSync信号。 160 161**系统能力:** SystemCapability.Graphic.Graphic2D.NativeVsync 162 163**起始版本:** 14 164 165**参数:** 166 167| 名称 | 描述 | 168| -------- | -------- | 169| nativeVsync | 一个指向OH_NativeVSync实例的指针。 | 170| enable | 表示打开或者关闭DVSync,true表示打开,false表示关闭。 | 171 172**返回:** 173 174返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。 175 176 177 178### OH_NativeVSync_GetPeriod() 179 180 181``` 182int OH_NativeVSync_GetPeriod (OH_NativeVSync * nativeVsync, long long * period ) 183``` 184 185**描述:** 186 187获取vsync周期。 188 189\@syscap SystemCapability.Graphic.Graphic2D.NativeVsync 190 191**参数:** 192 193| 名称 | 描述 | 194| -------- | -------- | 195| nativeVsync | 一个指向OH_NativeVSync实例的指针。| 196| period | 用于获取vsync周期的变量。 | 197 198**返回:** 199 200返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。 201 202**起始版本:** 203 20410 205 206 207### OH_NativeVSync_Create() 208 209 210``` 211OH_NativeVSync* OH_NativeVSync_Create (const char * name, unsigned int length ) 212``` 213 214**描述:** 215 216创建一个OH_NativeVSync实例,每次调用都会产生一个新的实例。 217 218\@syscap SystemCapability.Graphic.Graphic2D.NativeVsync 219 220**参数:** 221 222| 名称 | 描述 | 223| -------- | -------- | 224| name | 表示一个名字,与创建的OH_NativeVSync实例关联。 | 225| length | name的长度。 | 226 227**返回:** 228 229返回一个指向OH_NativeVSync实例的指针。 230 231 232### OH_NativeVSync_Destroy() 233 234 235``` 236void OH_NativeVSync_Destroy (OH_NativeVSync * nativeVsync) 237``` 238 239**描述:** 240 241销毁OH_NativeVSync实例。 242 243\@syscap SystemCapability.Graphic.Graphic2D.NativeVsync 244 245**参数:** 246 247| 名称 | 描述 | 248| -------- | -------- | 249| nativeVsync | 一个指向OH_NativeVSync实例的指针。 | 250 251 252### OH_NativeVSync_RequestFrame() 253 254 255``` 256int OH_NativeVSync_RequestFrame (OH_NativeVSync * nativeVsync, OH_NativeVSync_FrameCallback callback, void * data ) 257``` 258 259**描述:** 260 261请求下一次vsync信号,当信号到来时,调用回调函数callback。 如果在同一帧内中多次调用此接口,则只会触发最后一个回调。 262 263\@syscap SystemCapability.Graphic.Graphic2D.NativeVsync 264 265**参数:** 266 267| 名称 | 描述 | 268| -------- | -------- | 269| nativeVsync | 一个指向OH_NativeVSync实例的指针。 | 270| callback | 一个OH_NativeVSync_FrameCallback类型的函数指针,当下一次vsync信号到来时会被调用。 | 271| data | 一个指向用户自定义数据结构的指针,类型是void\*。 | 272 273**返回:** 274 275返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。 276 277 278### OH_NativeVSync_RequestFrameWithMultiCallback() 279 280``` 281int OH_NativeVSync_RequestFrameWithMultiCallback (OH_NativeVSync* nativeVsync, OH_NativeVSync_FrameCallback callback, void* data ) 282``` 283 284**描述** 285 286请求下一次vsync信号,当信号到来时,调用回调函数callback。 如果在同一帧内中多次调用此接口,每一次传入的callback都会被执行。 287 288**系统能力:** SystemCapability.Graphic.Graphic2D.NativeVsync 289 290**起始版本:** 12 291 292**参数:** 293 294| 名称 | 描述 | 295| -------- | -------- | 296| nativeVsync | 一个指向OH_NativeVSync实例的指针。 | 297| callback | 一个OH_NativeVSync_FrameCallback类型的函数指针,当下一次vsync信号到来时会被调用。 | 298| data | 一个指向用户自定义数据结构的指针,类型是void\*。 | 299 300**返回:** 301 302返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。