* Copyright (c) 2025 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "VSyncFenceTest.h"
#include <native_effect/effect_filter.h>
#include <fcntl.h>
#include <multimedia/image_framework/image/pixelmap_native.h>
#include <native_vsync/native_vsync.h>
#include <native_vsync/graphic_error_code.h>
#include <native_fence/native_fence.h>
#include <filemanagement/environment/oh_environment.h>
#include <common/log_common.h>
#include <common/native_common.h>
void addVSyncFenceTest(std::vector<napi_property_descriptor>& descData)
{
descData.push_back({"requestFrameSuccess", nullptr, OH_NativeVSync_RequestFrameSuccess,
nullptr, nullptr, nullptr, napi_default, nullptr});
descData.push_back({"requestFrameInvalue", nullptr, OH_NativeVSync_RequestFrameInvalue,
nullptr, nullptr, nullptr, napi_default, nullptr});
descData.push_back({"NativeVSyncDVSyncSwitchSuccess", nullptr, OH_NativeVSync_DVSyncSwitchSuccess,
nullptr, nullptr, nullptr, napi_default, nullptr});
descData.push_back({"NativeVSyncDVSyncSwitchInvalue", nullptr, OH_NativeVSync_DVSyncSwitchInvalue,
nullptr, nullptr, nullptr, napi_default, nullptr});
descData.push_back({"fenceIsValidTrue", nullptr, OH_NativeFence_IsValidTrue,
nullptr, nullptr, nullptr, napi_default, nullptr});
descData.push_back({"fenceIsValidFalse", nullptr, OH_NativeFence_IsValidFalse,
nullptr, nullptr, nullptr, napi_default, nullptr});
descData.push_back({"fenceWaitTrue", nullptr, OH_NativeFence_WaitTrue,
nullptr, nullptr, nullptr, napi_default, nullptr});
descData.push_back({"fenceWaitFalse", nullptr, OH_NativeFence_WaitFalse,
nullptr, nullptr, nullptr, napi_default, nullptr});
descData.push_back({"fenceWaitForeverTrue", nullptr, OH_NativeFence_WaitForeverTrue,
nullptr, nullptr, nullptr, napi_default, nullptr});
descData.push_back({"fenceWaitForeverFalse", nullptr, OH_NativeFence_WaitForeverFalse,
nullptr, nullptr, nullptr, napi_default, nullptr});
descData.push_back({"fenceCloseTrue", nullptr, OH_NativeFence_CloseTrue,
nullptr, nullptr, nullptr, napi_default, nullptr});
descData.push_back({"fenceCloseFalse", nullptr, OH_NativeFence_CloseFalse,
nullptr, nullptr, nullptr, napi_default, nullptr});
descData.push_back({"setExpectedFrameRateRangeSuccess", nullptr, OH_NativeVSync_SetExpectedFrameRateRangeSuccess,
nullptr, nullptr, nullptr, napi_default, nullptr});
descData.push_back({"setExpectedFrameRateRangeNull", nullptr, OH_NativeVSync_SetExpectedFrameRateRangeNull,
nullptr, nullptr, nullptr, napi_default, nullptr});
}
napi_value OH_NativeVSync_RequestFrameSuccess(napi_env env, napi_callback_info info)
{
napi_value result = nullptr;
OH_NativeVSync* nativeVsync = OH_NativeVSync_Create("Test", 4);
OH_NativeVSync_FrameCallback callback = [](long long timestamp, void *data) {};
void* data = nullptr;
int32_t res = OH_NativeVSync_RequestFrame(nativeVsync, callback, data);
int32_t res2 = OH_NativeVSync_DVSyncSwitch(nativeVsync, true);
napi_create_int32(env, res == NATIVE_ERROR_OK, &result);
return result;
}
napi_value OH_NativeVSync_RequestFrameInvalue(napi_env env, napi_callback_info info)
{
napi_value result = nullptr;
OH_NativeVSync* nativeVsync = nullptr;
OH_NativeVSync_FrameCallback callback = [](long long timestamp, void *data) {};
void* data = nullptr;
int32_t res = OH_NativeVSync_RequestFrame(nativeVsync, callback, data);
napi_create_int32(env, res == NATIVE_ERROR_INVALID_ARGUMENTS, &result);
return result;
}
napi_value OH_NativeVSync_DVSyncSwitchSuccess(napi_env env, napi_callback_info info)
{
napi_value result = nullptr;
OH_NativeVSync* nativeVsync = OH_NativeVSync_Create("Test", 4);
OH_NativeVSync_FrameCallback callback = [](long long timestamp, void *data) {};
void* data = nullptr;
int32_t res = OH_NativeVSync_DVSyncSwitch(nativeVsync, true);
napi_create_int32(env, res == NATIVE_ERROR_OK, &result);
return result;
}
napi_value OH_NativeVSync_DVSyncSwitchInvalue(napi_env env, napi_callback_info info)
{
napi_value result = nullptr;
OH_NativeVSync* nativeVsync = nullptr;
int32_t res = OH_NativeVSync_DVSyncSwitch(nativeVsync, true);
napi_create_int32(env, res == NATIVE_ERROR_INVALID_ARGUMENTS, &result);
return result;
}
napi_value OH_NativeFence_IsValidTrue(napi_env env, napi_callback_info info)
{
napi_value result = nullptr;
int32_t fenceFd = 1;
bool res = OH_NativeFence_IsValid(fenceFd);
NAPI_ASSERT(env, res == true, "");
napi_create_int32(env, res, &result);
return result;
}
napi_value OH_NativeFence_IsValidFalse(napi_env env, napi_callback_info info)
{
napi_value result = nullptr;
int32_t fenceFd = -1;
bool res = OH_NativeFence_IsValid(fenceFd);
NAPI_ASSERT(env, res == false, "");
napi_create_int32(env, res, &result);
return result;
}
napi_value OH_NativeFence_WaitTrue(napi_env env, napi_callback_info info)
{
napi_value result = nullptr;
int32_t fenceFd = 1;
uint32_t TIMEOUT_MS = 1000;
bool res = OH_NativeFence_Wait(fenceFd, TIMEOUT_MS);
NAPI_ASSERT(env, res == true, "");
napi_create_int32(env, res, &result);
return result;
}
napi_value OH_NativeFence_WaitFalse(napi_env env, napi_callback_info info)
{
napi_value result = nullptr;
int32_t fenceFd = -1;
uint32_t TIMEOUT_MS = 1000;
bool res = OH_NativeFence_Wait(fenceFd, TIMEOUT_MS);
NAPI_ASSERT(env, res == false, "");
napi_create_int32(env, res, &result);
return result;
}
napi_value OH_NativeFence_WaitForeverTrue(napi_env env, napi_callback_info info)
{
napi_value result = nullptr;
int32_t fenceFd = 1;
uint32_t TIMEOUT_MS = 1000;
bool res = OH_NativeFence_WaitForever(fenceFd);
NAPI_ASSERT(env, res == true, "");
napi_create_int32(env, res, &result);
return result;
}
napi_value OH_NativeFence_WaitForeverFalse(napi_env env, napi_callback_info info)
{
napi_value result = nullptr;
int32_t fenceFd = -1;
uint32_t TIMEOUT_MS = 1000;
bool res = OH_NativeFence_WaitForever(fenceFd);
NAPI_ASSERT(env, res == false, "");
napi_create_int32(env, res, &result);
return result;
}
napi_value OH_NativeFence_CloseTrue(napi_env env, napi_callback_info info)
{
napi_value result = nullptr;
int32_t fenceFd = 1;
uint32_t TIMEOUT_MS = 1000;
OH_NativeFence_Close(fenceFd);
napi_create_int32(env, true, &result);
return result;
}
napi_value OH_NativeFence_CloseFalse(napi_env env, napi_callback_info info)
{
napi_value result = nullptr;
int32_t fenceFd = -1;
uint32_t TIMEOUT_MS = 1000;
OH_NativeFence_Close(fenceFd);
napi_create_int32(env, true, &result);
return result;
}
napi_value OH_NativeVSync_SetExpectedFrameRateRangeSuccess(napi_env env, napi_callback_info info)
{
napi_value result = nullptr;
int32_t fenceFd = -1;
char name[] = "test";
OH_NativeVSync* nativeVsync = OH_NativeVSync_Create(name, sizeof(name));
OH_NativeVSync_ExpectedRateRange range = {30, 60, 30};
int res = OH_NativeVSync_SetExpectedFrameRateRange(nativeVsync, &range);
napi_create_int32(env, res == NATIVE_ERROR_OK, &result);
return result;
}
napi_value OH_NativeVSync_SetExpectedFrameRateRangeNull(napi_env env, napi_callback_info info)
{
napi_value result = nullptr;
int32_t fenceFd = -1;
OH_NativeVSync* nativeVsync = nullptr;
OH_NativeVSync_ExpectedRateRange* range = nullptr;
int res = OH_NativeVSync_SetExpectedFrameRateRange(nativeVsync, range);
napi_create_int32(env, res == NATIVE_ERROR_INVALID_ARGUMENTS, &result);
return result;
}