1f6603c60Sopenharmony_ci/*
2f6603c60Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
3f6603c60Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4f6603c60Sopenharmony_ci * you may not use this file except in compliance with the License.
5f6603c60Sopenharmony_ci * You may obtain a copy of the License at
6f6603c60Sopenharmony_ci *
7f6603c60Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0
8f6603c60Sopenharmony_ci *
9f6603c60Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10f6603c60Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11f6603c60Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12f6603c60Sopenharmony_ci * See the License for the specific language governing permissions and
13f6603c60Sopenharmony_ci * limitations under the License.
14f6603c60Sopenharmony_ci */
15f6603c60Sopenharmony_ci
16f6603c60Sopenharmony_ci#include <iostream>
17f6603c60Sopenharmony_ci#include <stdexcept>
18f6603c60Sopenharmony_ci#include "napi/native_api.h"
19f6603c60Sopenharmony_ci#include <bits/alltypes.h>
20f6603c60Sopenharmony_ci#include <ctime>
21f6603c60Sopenharmony_ci#include <native_vsync/native_vsync.h>
22f6603c60Sopenharmony_ci#include <stdexcept>
23f6603c60Sopenharmony_ci#include <cstdio>
24f6603c60Sopenharmony_ci#include <zconf.h>
25f6603c60Sopenharmony_ci
26f6603c60Sopenharmony_ci#define SUCCESS 0
27f6603c60Sopenharmony_ci#define FAIL (-1)
28f6603c60Sopenharmony_ci#define PARAM_0 0
29f6603c60Sopenharmony_ci#define NUMBER_2 2
30f6603c60Sopenharmony_ci#define NUMBER_3 3
31f6603c60Sopenharmony_ci#define TIMEOUT_FIVE 10
32f6603c60Sopenharmony_ci#define NUMBER_254 254
33f6603c60Sopenharmony_ci#define NUMBER_256 256
34f6603c60Sopenharmony_ci#define NUMBER_500 500
35f6603c60Sopenharmony_ci#define NUMBER_40001000 40001000
36f6603c60Sopenharmony_cistatic bool g_flag = false;
37f6603c60Sopenharmony_cistatic void OnVSync(long long timestamp, void *data) { g_flag = true; }
38f6603c60Sopenharmony_ci
39f6603c60Sopenharmony_cistatic napi_value OHNativeVSyncCreate(napi_env env, napi_callback_info info)
40f6603c60Sopenharmony_ci{
41f6603c60Sopenharmony_ci    napi_value result = nullptr;
42f6603c60Sopenharmony_ci    char name[] = "test";
43f6603c60Sopenharmony_ci    OH_NativeVSync *nativeVSync = OH_NativeVSync_Create(name, sizeof(name));
44f6603c60Sopenharmony_ci    if (nativeVSync != nullptr) {
45f6603c60Sopenharmony_ci        napi_create_int32(env, SUCCESS, &result);
46f6603c60Sopenharmony_ci        OH_NativeVSync_Destroy(nativeVSync);
47f6603c60Sopenharmony_ci    } else {
48f6603c60Sopenharmony_ci        napi_create_int32(env, FAIL, &result);
49f6603c60Sopenharmony_ci    }
50f6603c60Sopenharmony_ci    return result;
51f6603c60Sopenharmony_ci}
52f6603c60Sopenharmony_ci
53f6603c60Sopenharmony_cistatic napi_value OHNativeVSyncCreateFOne(napi_env env, napi_callback_info info)
54f6603c60Sopenharmony_ci{
55f6603c60Sopenharmony_ci    napi_value result = nullptr;
56f6603c60Sopenharmony_ci    unsigned int length = 0;
57f6603c60Sopenharmony_ci    OH_NativeVSync *nativeVSync = OH_NativeVSync_Create(nullptr, length);
58f6603c60Sopenharmony_ci    if (nativeVSync != nullptr) {
59f6603c60Sopenharmony_ci        napi_create_int32(env, FAIL, &result);
60f6603c60Sopenharmony_ci    } else {
61f6603c60Sopenharmony_ci        napi_create_int32(env, SUCCESS, &result);
62f6603c60Sopenharmony_ci    }
63f6603c60Sopenharmony_ci    return result;
64f6603c60Sopenharmony_ci}
65f6603c60Sopenharmony_ci
66f6603c60Sopenharmony_cistatic napi_value OHNativeVSyncRequestFrame(napi_env env, napi_callback_info info)
67f6603c60Sopenharmony_ci{
68f6603c60Sopenharmony_ci    napi_value result = nullptr;
69f6603c60Sopenharmony_ci    char name[] = "test";
70f6603c60Sopenharmony_ci    OH_NativeVSync *nativeVSync = OH_NativeVSync_Create(name, sizeof(name));
71f6603c60Sopenharmony_ci    OH_NativeVSync_FrameCallback callback = OnVSync;
72f6603c60Sopenharmony_ci    int ret = OH_NativeVSync_RequestFrame(nativeVSync, callback, nullptr);
73f6603c60Sopenharmony_ci    if (ret == SUCCESS) {
74f6603c60Sopenharmony_ci        napi_create_int32(env, SUCCESS, &result);
75f6603c60Sopenharmony_ci    } else {
76f6603c60Sopenharmony_ci        napi_create_int32(env, FAIL, &result);
77f6603c60Sopenharmony_ci    }
78f6603c60Sopenharmony_ci    if (nativeVSync) {
79f6603c60Sopenharmony_ci        OH_NativeVSync_Destroy(nativeVSync);
80f6603c60Sopenharmony_ci    }
81f6603c60Sopenharmony_ci    return result;
82f6603c60Sopenharmony_ci}
83f6603c60Sopenharmony_ci
84f6603c60Sopenharmony_cistatic napi_value OHNativeVSyncRequestFrameFOne(napi_env env, napi_callback_info info)
85f6603c60Sopenharmony_ci{
86f6603c60Sopenharmony_ci    napi_value result = nullptr;
87f6603c60Sopenharmony_ci    int ret = OH_NativeVSync_RequestFrame(nullptr, nullptr, nullptr);
88f6603c60Sopenharmony_ci    if (ret != SUCCESS) {
89f6603c60Sopenharmony_ci        napi_create_int32(env, SUCCESS, &result);
90f6603c60Sopenharmony_ci    } else {
91f6603c60Sopenharmony_ci        napi_create_int32(env, FAIL, &result);
92f6603c60Sopenharmony_ci    }
93f6603c60Sopenharmony_ci    return result;
94f6603c60Sopenharmony_ci}
95f6603c60Sopenharmony_ci
96f6603c60Sopenharmony_cistatic napi_value OHNativeVSyncRequestFrameFTwo(napi_env env, napi_callback_info info)
97f6603c60Sopenharmony_ci{
98f6603c60Sopenharmony_ci    napi_value result = nullptr;
99f6603c60Sopenharmony_ci    char name[] = "test";
100f6603c60Sopenharmony_ci    OH_NativeVSync *nativeVSync = OH_NativeVSync_Create(name, sizeof(name));
101f6603c60Sopenharmony_ci    int ret = OH_NativeVSync_RequestFrame(nativeVSync, nullptr, nullptr);
102f6603c60Sopenharmony_ci    if (ret != SUCCESS) {
103f6603c60Sopenharmony_ci        napi_create_int32(env, SUCCESS, &result);
104f6603c60Sopenharmony_ci    } else {
105f6603c60Sopenharmony_ci        napi_create_int32(env, FAIL, &result);
106f6603c60Sopenharmony_ci    }
107f6603c60Sopenharmony_ci    if (nativeVSync) {
108f6603c60Sopenharmony_ci        OH_NativeVSync_Destroy(nativeVSync);
109f6603c60Sopenharmony_ci    }
110f6603c60Sopenharmony_ci    return result;
111f6603c60Sopenharmony_ci}
112f6603c60Sopenharmony_ci
113f6603c60Sopenharmony_cistatic napi_value OHNativeVSyncGetPeriod(napi_env env, napi_callback_info info)
114f6603c60Sopenharmony_ci{
115f6603c60Sopenharmony_ci    napi_value result = nullptr;
116f6603c60Sopenharmony_ci    char name[] = "test";
117f6603c60Sopenharmony_ci    OH_NativeVSync *nativeVSync = OH_NativeVSync_Create(name, sizeof(name));
118f6603c60Sopenharmony_ci    OH_NativeVSync_FrameCallback callback = OnVSync;
119f6603c60Sopenharmony_ci    OH_NativeVSync_RequestFrame(nativeVSync, callback, nullptr);
120f6603c60Sopenharmony_ci    time_t startTime = time(PARAM_0);
121f6603c60Sopenharmony_ci    double diffTime = 0;
122f6603c60Sopenharmony_ci    while (!g_flag && diffTime < TIMEOUT_FIVE) {
123f6603c60Sopenharmony_ci        time_t curTime = time(PARAM_0);
124f6603c60Sopenharmony_ci        diffTime = difftime(curTime, startTime);
125f6603c60Sopenharmony_ci    }
126f6603c60Sopenharmony_ci    long long period;
127f6603c60Sopenharmony_ci    int ret = OH_NativeVSync_GetPeriod(nativeVSync, &period);
128f6603c60Sopenharmony_ci    if (ret == SUCCESS) {
129f6603c60Sopenharmony_ci        napi_create_int32(env, SUCCESS, &result);
130f6603c60Sopenharmony_ci    } else {
131f6603c60Sopenharmony_ci        napi_create_int32(env, FAIL, &result);
132f6603c60Sopenharmony_ci    }
133f6603c60Sopenharmony_ci    if (nativeVSync) {
134f6603c60Sopenharmony_ci        OH_NativeVSync_Destroy(nativeVSync);
135f6603c60Sopenharmony_ci    }
136f6603c60Sopenharmony_ci    return result;
137f6603c60Sopenharmony_ci}
138f6603c60Sopenharmony_ci
139f6603c60Sopenharmony_cistatic napi_value OHNativeVSyncGetPeriodFOne(napi_env env, napi_callback_info info)
140f6603c60Sopenharmony_ci{
141f6603c60Sopenharmony_ci    napi_value result = nullptr;
142f6603c60Sopenharmony_ci    long long period;
143f6603c60Sopenharmony_ci    int ret = OH_NativeVSync_GetPeriod(nullptr, &period);
144f6603c60Sopenharmony_ci    if (ret != SUCCESS) {
145f6603c60Sopenharmony_ci        napi_create_int32(env, SUCCESS, &result);
146f6603c60Sopenharmony_ci    } else {
147f6603c60Sopenharmony_ci        napi_create_int32(env, FAIL, &result);
148f6603c60Sopenharmony_ci    }
149f6603c60Sopenharmony_ci    return result;
150f6603c60Sopenharmony_ci}
151f6603c60Sopenharmony_ci
152f6603c60Sopenharmony_cistatic napi_value OHNativeVSyncCreateNull(napi_env env, napi_callback_info info)
153f6603c60Sopenharmony_ci{
154f6603c60Sopenharmony_ci    napi_value result = nullptr;
155f6603c60Sopenharmony_ci    unsigned int length = 0;
156f6603c60Sopenharmony_ci    OH_NativeVSync *nativeVSync = OH_NativeVSync_Create(nullptr, length);
157f6603c60Sopenharmony_ci    if (nativeVSync == nullptr) {
158f6603c60Sopenharmony_ci        napi_create_int32(env, FAIL, &result);
159f6603c60Sopenharmony_ci    } else {
160f6603c60Sopenharmony_ci        napi_create_int32(env, SUCCESS, &result);
161f6603c60Sopenharmony_ci    }
162f6603c60Sopenharmony_ci    return result;
163f6603c60Sopenharmony_ci}
164f6603c60Sopenharmony_ci
165f6603c60Sopenharmony_cistatic napi_value OHNativeVSyncCreateNotEq(napi_env env, napi_callback_info info)
166f6603c60Sopenharmony_ci{
167f6603c60Sopenharmony_ci    napi_value result = nullptr;
168f6603c60Sopenharmony_ci    char name[] = "testCase";
169f6603c60Sopenharmony_ci    unsigned int length = NUMBER_2;
170f6603c60Sopenharmony_ci    OH_NativeVSync *nativeVSync = OH_NativeVSync_Create(name, length);
171f6603c60Sopenharmony_ci    if (nativeVSync == nullptr) {
172f6603c60Sopenharmony_ci        napi_create_int32(env, FAIL, &result);
173f6603c60Sopenharmony_ci    } else {
174f6603c60Sopenharmony_ci        napi_create_int32(env, SUCCESS, &result);
175f6603c60Sopenharmony_ci    }
176f6603c60Sopenharmony_ci    OH_NativeVSync_Destroy(nativeVSync);
177f6603c60Sopenharmony_ci    return result;
178f6603c60Sopenharmony_ci}
179f6603c60Sopenharmony_ci
180f6603c60Sopenharmony_cistatic napi_value OHNativeVSyncCreateNormal(napi_env env, napi_callback_info info)
181f6603c60Sopenharmony_ci{
182f6603c60Sopenharmony_ci    napi_value result = nullptr;
183f6603c60Sopenharmony_ci    char name[] = "testCase";
184f6603c60Sopenharmony_ci    unsigned int length = strlen(name);
185f6603c60Sopenharmony_ci    OH_NativeVSync *nativeVSync1 = OH_NativeVSync_Create(name, length);
186f6603c60Sopenharmony_ci    napi_create_array_with_length(env, NUMBER_2, &result);
187f6603c60Sopenharmony_ci    napi_value result1 = nullptr;
188f6603c60Sopenharmony_ci    napi_value result2 = nullptr;
189f6603c60Sopenharmony_ci    if (nativeVSync1 == nullptr) {
190f6603c60Sopenharmony_ci        napi_create_int32(env, FAIL, &result1);
191f6603c60Sopenharmony_ci    } else {
192f6603c60Sopenharmony_ci        napi_create_int32(env, SUCCESS, &result1);
193f6603c60Sopenharmony_ci    }
194f6603c60Sopenharmony_ci    napi_set_element(env, result, 0, result1);
195f6603c60Sopenharmony_ci
196f6603c60Sopenharmony_ci    OH_NativeVSync *nativeVSync2 = OH_NativeVSync_Create(name, length);
197f6603c60Sopenharmony_ci    if (nativeVSync2 == nullptr) {
198f6603c60Sopenharmony_ci        napi_create_int32(env, FAIL, &result2);
199f6603c60Sopenharmony_ci    } else {
200f6603c60Sopenharmony_ci        napi_create_int32(env, SUCCESS, &result2);
201f6603c60Sopenharmony_ci    }
202f6603c60Sopenharmony_ci
203f6603c60Sopenharmony_ci    napi_set_element(env, result, 1, result2);
204f6603c60Sopenharmony_ci    OH_NativeVSync_Destroy(nativeVSync1);
205f6603c60Sopenharmony_ci    OH_NativeVSync_Destroy(nativeVSync2);
206f6603c60Sopenharmony_ci    return result;
207f6603c60Sopenharmony_ci}
208f6603c60Sopenharmony_ci
209f6603c60Sopenharmony_cistatic napi_value OHNativeVSyncCreateAbnormal(napi_env env, napi_callback_info info)
210f6603c60Sopenharmony_ci{
211f6603c60Sopenharmony_ci    napi_value result = nullptr;
212f6603c60Sopenharmony_ci    OH_NativeVSync *nativeVSync = OH_NativeVSync_Create(NULL, 0);
213f6603c60Sopenharmony_ci    if (nativeVSync == nullptr) {
214f6603c60Sopenharmony_ci        napi_create_int32(env, SUCCESS, &result);
215f6603c60Sopenharmony_ci    } else {
216f6603c60Sopenharmony_ci        napi_create_int32(env, FAIL, &result);
217f6603c60Sopenharmony_ci        return result;
218f6603c60Sopenharmony_ci    }
219f6603c60Sopenharmony_ci    nativeVSync = OH_NativeVSync_Create(0, 0);
220f6603c60Sopenharmony_ci    if (nativeVSync == nullptr) {
221f6603c60Sopenharmony_ci        napi_create_int32(env, SUCCESS, &result);
222f6603c60Sopenharmony_ci    } else {
223f6603c60Sopenharmony_ci        napi_create_int32(env, FAIL, &result);
224f6603c60Sopenharmony_ci        return result;
225f6603c60Sopenharmony_ci    }
226f6603c60Sopenharmony_ci    OH_NativeVSync_Destroy(nativeVSync);
227f6603c60Sopenharmony_ci    return result;
228f6603c60Sopenharmony_ci}
229f6603c60Sopenharmony_ci
230f6603c60Sopenharmony_civoid MyFrameCallback(long long timestamp, void *data)
231f6603c60Sopenharmony_ci{
232f6603c60Sopenharmony_ci    int *myData = static_cast<int *>(data);
233f6603c60Sopenharmony_ci    return;
234f6603c60Sopenharmony_ci}
235f6603c60Sopenharmony_ci
236f6603c60Sopenharmony_cistatic napi_value OHNativeVSyncCreateDifLenth(napi_env env, napi_callback_info info)
237f6603c60Sopenharmony_ci{
238f6603c60Sopenharmony_ci    napi_value result = nullptr;
239f6603c60Sopenharmony_ci    std::vector<std::string> myArray = {
240f6603c60Sopenharmony_ci        "0",
241f6603c60Sopenharmony_ci        "a",
242f6603c60Sopenharmony_ci        "你",
243f6603c60Sopenharmony_ci        "!@#¥%^&*()_+",
244f6603c60Sopenharmony_ci        " ",
245f6603c60Sopenharmony_ci        "  ",
246f6603c60Sopenharmony_ci        "这里有好多好多字符qazwsxedcrfvtgbyhnujqazwsxedcrfvtgbyhnujqazwsxedcrfvtgbyhnujqazwsxedcrfvtgbyhnuj",
247f6603c60Sopenharmony_ci        "ab_cdefghijklmnopqrstuvwxyz",
248f6603c60Sopenharmony_ci        "abcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcde"};
249f6603c60Sopenharmony_ci    napi_create_array_with_length(env, myArray.size(), &result);
250f6603c60Sopenharmony_ci
251f6603c60Sopenharmony_ci    for (uint32_t index = 0; index < myArray.size(); index++) {
252f6603c60Sopenharmony_ci        unsigned int len = strlen(myArray[index].c_str());
253f6603c60Sopenharmony_ci        OH_NativeVSync *nativeVSync = nullptr;
254f6603c60Sopenharmony_ci        napi_value resultIndex = nullptr;
255f6603c60Sopenharmony_ci        nativeVSync = OH_NativeVSync_Create(myArray[index].c_str(), len);
256f6603c60Sopenharmony_ci        if (nativeVSync == nullptr) {
257f6603c60Sopenharmony_ci            napi_create_int32(env, FAIL+index, &result);
258f6603c60Sopenharmony_ci            OH_NativeVSync_Destroy(nativeVSync);
259f6603c60Sopenharmony_ci            return result;
260f6603c60Sopenharmony_ci        } else {
261f6603c60Sopenharmony_ci            napi_create_int32(env, SUCCESS, &result);
262f6603c60Sopenharmony_ci            OH_NativeVSync_Destroy(nativeVSync);
263f6603c60Sopenharmony_ci            continue;
264f6603c60Sopenharmony_ci        }
265f6603c60Sopenharmony_ci    }
266f6603c60Sopenharmony_ci    return result;
267f6603c60Sopenharmony_ci}
268f6603c60Sopenharmony_ci
269f6603c60Sopenharmony_cistatic napi_value OHNativeVSyncCreateMuch(napi_env env, napi_callback_info info)
270f6603c60Sopenharmony_ci{
271f6603c60Sopenharmony_ci    napi_value result = nullptr;
272f6603c60Sopenharmony_ci    char name[] = "testcase";
273f6603c60Sopenharmony_ci    unsigned int length = strlen(name);
274f6603c60Sopenharmony_ci    OH_NativeVSync *nativeVSyncArr[NUMBER_500];
275f6603c60Sopenharmony_ci    int success = 0;
276f6603c60Sopenharmony_ci    for (uint32_t i = 0; i < NUMBER_500; i++) {
277f6603c60Sopenharmony_ci        nativeVSyncArr[i] = OH_NativeVSync_Create(name, length);
278f6603c60Sopenharmony_ci        if (nativeVSyncArr[i] != nullptr) {
279f6603c60Sopenharmony_ci            success = success + 1;
280f6603c60Sopenharmony_ci            continue;
281f6603c60Sopenharmony_ci        }
282f6603c60Sopenharmony_ci    }
283f6603c60Sopenharmony_ci    if (success == NUMBER_254) {
284f6603c60Sopenharmony_ci        napi_create_int32(env, SUCCESS, &result);
285f6603c60Sopenharmony_ci    } else {
286f6603c60Sopenharmony_ci        napi_create_int32(env, success, &result);
287f6603c60Sopenharmony_ci    }
288f6603c60Sopenharmony_ci    for (uint32_t i = 0; i < NUMBER_500; i++) {
289f6603c60Sopenharmony_ci        OH_NativeVSync_Destroy(nativeVSyncArr[i]);
290f6603c60Sopenharmony_ci    }
291f6603c60Sopenharmony_ci    return result;
292f6603c60Sopenharmony_ci}
293f6603c60Sopenharmony_ci
294f6603c60Sopenharmony_cistatic napi_value OHNativeVSyncGetPeriodNullptr(napi_env env, napi_callback_info info)
295f6603c60Sopenharmony_ci{
296f6603c60Sopenharmony_ci    napi_value result = nullptr;
297f6603c60Sopenharmony_ci    long long period;
298f6603c60Sopenharmony_ci    int res = OH_NativeVSync_GetPeriod(nullptr, &period);
299f6603c60Sopenharmony_ci    napi_create_int32(env, res, &result);
300f6603c60Sopenharmony_ci    return result;
301f6603c60Sopenharmony_ci}
302f6603c60Sopenharmony_ci
303f6603c60Sopenharmony_cistatic napi_value OHNativeVSyncRequestFrameNullptr(napi_env env, napi_callback_info info)
304f6603c60Sopenharmony_ci{
305f6603c60Sopenharmony_ci    napi_value result = nullptr;
306f6603c60Sopenharmony_ci    char name[] = "testcase";
307f6603c60Sopenharmony_ci    unsigned int length = strlen(name);
308f6603c60Sopenharmony_ci    OH_NativeVSync *nativeVSync = OH_NativeVSync_Create(name, length);
309f6603c60Sopenharmony_ci    napi_create_array_with_length(env, NUMBER_3, &result);
310f6603c60Sopenharmony_ci    int param = 0;
311f6603c60Sopenharmony_ci    int res = OH_NativeVSync_RequestFrame(nullptr, MyFrameCallback, &param);
312f6603c60Sopenharmony_ci    if (res != NUMBER_40001000) {
313f6603c60Sopenharmony_ci        napi_create_int32(env, FAIL, &result);
314f6603c60Sopenharmony_ci        return result;
315f6603c60Sopenharmony_ci    }
316f6603c60Sopenharmony_ci    res = OH_NativeVSync_RequestFrame(nativeVSync, nullptr, &param);
317f6603c60Sopenharmony_ci    if (res != NUMBER_40001000) {
318f6603c60Sopenharmony_ci        napi_create_int32(env, FAIL, &result);
319f6603c60Sopenharmony_ci        return result;
320f6603c60Sopenharmony_ci    }
321f6603c60Sopenharmony_ci    res = OH_NativeVSync_RequestFrame(nativeVSync, MyFrameCallback, nullptr);
322f6603c60Sopenharmony_ci    if (res != 0) {
323f6603c60Sopenharmony_ci        napi_create_int32(env, FAIL, &result);
324f6603c60Sopenharmony_ci        return result;
325f6603c60Sopenharmony_ci    }
326f6603c60Sopenharmony_ci    napi_create_int32(env, SUCCESS, &result);
327f6603c60Sopenharmony_ci    return result;
328f6603c60Sopenharmony_ci}
329f6603c60Sopenharmony_ci
330f6603c60Sopenharmony_cistatic napi_value OHNativeVSyncRequestFrameNormal(napi_env env, napi_callback_info info)
331f6603c60Sopenharmony_ci{
332f6603c60Sopenharmony_ci    napi_value result = nullptr;
333f6603c60Sopenharmony_ci    char name[] = "testcase";
334f6603c60Sopenharmony_ci    unsigned int length = strlen(name);
335f6603c60Sopenharmony_ci    OH_NativeVSync *nativeVSync = OH_NativeVSync_Create(name, length);
336f6603c60Sopenharmony_ci    int *param = nullptr;
337f6603c60Sopenharmony_ci    int res = OH_NativeVSync_RequestFrame(nativeVSync, MyFrameCallback, param);
338f6603c60Sopenharmony_ci    napi_create_int32(env, res, &result);
339f6603c60Sopenharmony_ci    OH_NativeVSync_Destroy(nativeVSync);
340f6603c60Sopenharmony_ci    return result;
341f6603c60Sopenharmony_ci}
342f6603c60Sopenharmony_ci
343f6603c60Sopenharmony_cistatic napi_value OHNativeVSyncRequestFrameParamErr(napi_env env, napi_callback_info info)
344f6603c60Sopenharmony_ci{
345f6603c60Sopenharmony_ci    napi_value result = nullptr;
346f6603c60Sopenharmony_ci    char name[] = "testcase";
347f6603c60Sopenharmony_ci    unsigned int length = strlen(name);
348f6603c60Sopenharmony_ci    OH_NativeVSync *nativeVSync = OH_NativeVSync_Create(name, length);
349f6603c60Sopenharmony_ci    char param[] = "test";
350f6603c60Sopenharmony_ci    int res = OH_NativeVSync_RequestFrame(nativeVSync, MyFrameCallback, &param);
351f6603c60Sopenharmony_ci    napi_create_int32(env, res, &result);
352f6603c60Sopenharmony_ci    OH_NativeVSync_Destroy(nativeVSync);
353f6603c60Sopenharmony_ci    return result;
354f6603c60Sopenharmony_ci}
355f6603c60Sopenharmony_ci
356f6603c60Sopenharmony_ciEXTERN_C_START
357f6603c60Sopenharmony_cistatic napi_value Init(napi_env env, napi_value exports)
358f6603c60Sopenharmony_ci{
359f6603c60Sopenharmony_ci    napi_property_descriptor desc[] = {
360f6603c60Sopenharmony_ci        {"oHNativeVSyncCreate", nullptr, OHNativeVSyncCreate, nullptr, nullptr, nullptr, napi_default, nullptr},
361f6603c60Sopenharmony_ci        {"oHNativeVSyncCreateFOne", nullptr, OHNativeVSyncCreateFOne, nullptr, nullptr, nullptr, napi_default, nullptr},
362f6603c60Sopenharmony_ci        {"oHNativeVSyncRequestFrame", nullptr, OHNativeVSyncRequestFrame, nullptr, nullptr, nullptr, napi_default,
363f6603c60Sopenharmony_ci         nullptr},
364f6603c60Sopenharmony_ci        {"oHNativeVSyncRequestFrameFOne", nullptr, OHNativeVSyncRequestFrameFOne, nullptr, nullptr, nullptr,
365f6603c60Sopenharmony_ci         napi_default, nullptr},
366f6603c60Sopenharmony_ci        {"oHNativeVSyncRequestFrameFTwo", nullptr, OHNativeVSyncRequestFrameFTwo, nullptr, nullptr, nullptr,
367f6603c60Sopenharmony_ci         napi_default, nullptr},
368f6603c60Sopenharmony_ci        {"oHNativeVSyncGetPeriod", nullptr, OHNativeVSyncGetPeriod, nullptr, nullptr, nullptr, napi_default, nullptr},
369f6603c60Sopenharmony_ci        {"oHNativeVSyncGetPeriodFOne", nullptr, OHNativeVSyncGetPeriodFOne, nullptr, nullptr, nullptr, napi_default,
370f6603c60Sopenharmony_ci         nullptr},
371f6603c60Sopenharmony_ci        {"oHNativeVSyncCreateNull", nullptr, OHNativeVSyncCreateNull, nullptr, nullptr, nullptr, napi_default, nullptr},
372f6603c60Sopenharmony_ci        {"oHNativeVSyncCreateNotEq", nullptr, OHNativeVSyncCreateNotEq, nullptr, nullptr, nullptr, napi_default,
373f6603c60Sopenharmony_ci         nullptr},
374f6603c60Sopenharmony_ci        {"oHNativeVSyncCreateNormal", nullptr, OHNativeVSyncCreateNormal, nullptr, nullptr, nullptr, napi_default,
375f6603c60Sopenharmony_ci         nullptr},
376f6603c60Sopenharmony_ci        {"oHNativeVSyncCreateAbnormal", nullptr, OHNativeVSyncCreateAbnormal, nullptr, nullptr, nullptr, napi_default,
377f6603c60Sopenharmony_ci         nullptr},
378f6603c60Sopenharmony_ci        {"oHNativeVSyncCreateDifLenth", nullptr, OHNativeVSyncCreateDifLenth, nullptr, nullptr, nullptr, napi_default,
379f6603c60Sopenharmony_ci         nullptr},
380f6603c60Sopenharmony_ci        {"oHNativeVSyncCreateMuch", nullptr, OHNativeVSyncCreateMuch, nullptr, nullptr, nullptr, napi_default, nullptr},
381f6603c60Sopenharmony_ci        {"oHNativeVSyncGetPeriodNullptr", nullptr, OHNativeVSyncGetPeriodNullptr, nullptr, nullptr, nullptr,
382f6603c60Sopenharmony_ci         napi_default, nullptr},
383f6603c60Sopenharmony_ci        {"oHNativeVSyncRequestFrameNullptr", nullptr, OHNativeVSyncRequestFrameNullptr, nullptr, nullptr, nullptr,
384f6603c60Sopenharmony_ci         napi_default, nullptr},
385f6603c60Sopenharmony_ci        {"oHNativeVSyncRequestFrameNormal", nullptr, OHNativeVSyncRequestFrameNormal, nullptr, nullptr, nullptr,
386f6603c60Sopenharmony_ci         napi_default, nullptr},
387f6603c60Sopenharmony_ci        {"oHNativeVSyncRequestFrameParamErr", nullptr, OHNativeVSyncRequestFrameParamErr, nullptr, nullptr, nullptr,
388f6603c60Sopenharmony_ci         napi_default, nullptr},
389f6603c60Sopenharmony_ci    };
390f6603c60Sopenharmony_ci    napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
391f6603c60Sopenharmony_ci    return exports;
392f6603c60Sopenharmony_ci}
393f6603c60Sopenharmony_ciEXTERN_C_END
394f6603c60Sopenharmony_ci
395f6603c60Sopenharmony_cistatic napi_module demoModule = {
396f6603c60Sopenharmony_ci    .nm_version = 1,
397f6603c60Sopenharmony_ci    .nm_flags = 0,
398f6603c60Sopenharmony_ci    .nm_filename = nullptr,
399f6603c60Sopenharmony_ci    .nm_register_func = Init,
400f6603c60Sopenharmony_ci    .nm_modname = "nativevsync",
401f6603c60Sopenharmony_ci    .nm_priv = ((void *)0),
402f6603c60Sopenharmony_ci    .reserved = {0},
403f6603c60Sopenharmony_ci};
404f6603c60Sopenharmony_ci
405f6603c60Sopenharmony_ciextern "C" __attribute__((constructor)) void RegisterModule(void) { napi_module_register(&demoModule); };
406