148f512ceSopenharmony_ci/* 248f512ceSopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd. 348f512ceSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 448f512ceSopenharmony_ci * you may not use this file except in compliance with the License. 548f512ceSopenharmony_ci * You may obtain a copy of the License at 648f512ceSopenharmony_ci * 748f512ceSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 848f512ceSopenharmony_ci * 948f512ceSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1048f512ceSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1148f512ceSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1248f512ceSopenharmony_ci * See the License for the specific language governing permissions and 1348f512ceSopenharmony_ci * limitations under the License. 1448f512ceSopenharmony_ci */ 1548f512ceSopenharmony_ci#include "hiperf_client_napi.h" 1648f512ceSopenharmony_ci#include <cstdio> 1748f512ceSopenharmony_ci#include <string> 1848f512ceSopenharmony_ci#include "hiperf_hilog.h" 1948f512ceSopenharmony_ci#include "hiperf_client.h" 2048f512ceSopenharmony_ci#include "napi/native_api.h" 2148f512ceSopenharmony_ci#include "napi/native_node_api.h" 2248f512ceSopenharmony_ci 2348f512ceSopenharmony_cinamespace OHOS { 2448f512ceSopenharmony_cinamespace Developtools { 2548f512ceSopenharmony_cinamespace HiPerf { 2648f512ceSopenharmony_cinamespace HiperfClient { 2748f512ceSopenharmony_cistatic std::unique_ptr<HiperfClient::Client> g_hiperfClient = 2848f512ceSopenharmony_ci std::make_unique<HiperfClient::Client>(); 2948f512ceSopenharmony_ci 3048f512ceSopenharmony_cistatic std::unique_ptr<HiperfClient::RecordOption> g_hiperfRecordOption = 3148f512ceSopenharmony_ci std::make_unique<HiperfClient::RecordOption>(); 3248f512ceSopenharmony_ci 3348f512ceSopenharmony_cistatic std::vector<std::string> StringSplit(std::string source, const std::string &split = ",") 3448f512ceSopenharmony_ci{ 3548f512ceSopenharmony_ci size_t pos = 0; 3648f512ceSopenharmony_ci std::vector<std::string> result; 3748f512ceSopenharmony_ci 3848f512ceSopenharmony_ci // find 3948f512ceSopenharmony_ci while ((pos = source.find(split)) != std::string::npos) { 4048f512ceSopenharmony_ci // split 4148f512ceSopenharmony_ci std::string token = source.substr(0, pos); 4248f512ceSopenharmony_ci if (!token.empty()) { 4348f512ceSopenharmony_ci result.push_back(token); 4448f512ceSopenharmony_ci } 4548f512ceSopenharmony_ci source.erase(0, pos + split.length()); 4648f512ceSopenharmony_ci } 4748f512ceSopenharmony_ci // add last token 4848f512ceSopenharmony_ci if (!source.empty()) { 4948f512ceSopenharmony_ci result.push_back(source); 5048f512ceSopenharmony_ci } 5148f512ceSopenharmony_ci return result; 5248f512ceSopenharmony_ci} 5348f512ceSopenharmony_ci 5448f512ceSopenharmony_cistatic std::vector<int> StringSplitToInt(std::string source, const std::string &split = ",") 5548f512ceSopenharmony_ci{ 5648f512ceSopenharmony_ci size_t pos = 0; 5748f512ceSopenharmony_ci std::vector<int> result; 5848f512ceSopenharmony_ci 5948f512ceSopenharmony_ci // find 6048f512ceSopenharmony_ci while ((pos = source.find(split)) != std::string::npos) { 6148f512ceSopenharmony_ci // split 6248f512ceSopenharmony_ci std::string token = source.substr(0, pos); 6348f512ceSopenharmony_ci if (!token.empty()) { 6448f512ceSopenharmony_ci result.push_back(std::stoi(token)); 6548f512ceSopenharmony_ci } 6648f512ceSopenharmony_ci source.erase(0, pos + split.length()); 6748f512ceSopenharmony_ci } 6848f512ceSopenharmony_ci // add last token 6948f512ceSopenharmony_ci if (!source.empty()) { 7048f512ceSopenharmony_ci result.push_back(std::stoi(source)); 7148f512ceSopenharmony_ci } 7248f512ceSopenharmony_ci return result; 7348f512ceSopenharmony_ci} 7448f512ceSopenharmony_ci 7548f512ceSopenharmony_cistatic std::string GetJsStringFromOption(const napi_env &env, const napi_callback_info &info) 7648f512ceSopenharmony_ci{ 7748f512ceSopenharmony_ci size_t argc = 1; 7848f512ceSopenharmony_ci napi_value args[1] = {0}; 7948f512ceSopenharmony_ci NAPI_CALL_BASE(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr), ""); 8048f512ceSopenharmony_ci NAPI_ASSERT_BASE(env, argc == 1, "requires 1 parameter", ""); 8148f512ceSopenharmony_ci 8248f512ceSopenharmony_ci napi_valuetype inputType = napi_undefined; 8348f512ceSopenharmony_ci napi_typeof(env, args[0], &inputType); 8448f512ceSopenharmony_ci NAPI_ASSERT_BASE(env, inputType == napi_string, "type mismatch for parameter path", ""); 8548f512ceSopenharmony_ci 8648f512ceSopenharmony_ci char value[PATH_MAX] = {0}; 8748f512ceSopenharmony_ci size_t valueLen = 0; 8848f512ceSopenharmony_ci napi_get_value_string_utf8(env, args[0], value, sizeof(value), &valueLen); 8948f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}s", value); 9048f512ceSopenharmony_ci return std::string(value); 9148f512ceSopenharmony_ci} 9248f512ceSopenharmony_ci 9348f512ceSopenharmony_cistatic bool GetBoolFromOption(const napi_env &env, const napi_callback_info &info) 9448f512ceSopenharmony_ci{ 9548f512ceSopenharmony_ci size_t argc = 1; 9648f512ceSopenharmony_ci napi_value args[1] = {0}; 9748f512ceSopenharmony_ci NAPI_CALL_BASE(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr), false); 9848f512ceSopenharmony_ci NAPI_ASSERT_BASE(env, argc == 1, "requires 1 parameter", false); 9948f512ceSopenharmony_ci 10048f512ceSopenharmony_ci napi_valuetype inputType = napi_undefined; 10148f512ceSopenharmony_ci napi_typeof(env, args[0], &inputType); 10248f512ceSopenharmony_ci NAPI_ASSERT_BASE(env, (inputType == napi_boolean), "type mismatch for parameter path", false); 10348f512ceSopenharmony_ci 10448f512ceSopenharmony_ci bool result = false; 10548f512ceSopenharmony_ci napi_get_value_bool(env, args[0], &result); 10648f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 10748f512ceSopenharmony_ci return result; 10848f512ceSopenharmony_ci} 10948f512ceSopenharmony_ci 11048f512ceSopenharmony_cistatic uint32_t GetUintFromOption(const napi_env &env, const napi_callback_info &info) 11148f512ceSopenharmony_ci{ 11248f512ceSopenharmony_ci size_t argc = 1; 11348f512ceSopenharmony_ci napi_value args[1] = {0}; 11448f512ceSopenharmony_ci NAPI_CALL_BASE(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr), 0); 11548f512ceSopenharmony_ci NAPI_ASSERT_BASE(env, argc == 1, "requires 1 parameter", 0); 11648f512ceSopenharmony_ci 11748f512ceSopenharmony_ci napi_valuetype inputType = napi_undefined; 11848f512ceSopenharmony_ci napi_typeof(env, args[0], &inputType); 11948f512ceSopenharmony_ci NAPI_ASSERT_BASE(env, (inputType == napi_number), "type mismatch for parameter path", false); 12048f512ceSopenharmony_ci 12148f512ceSopenharmony_ci uint32_t result = 0; 12248f512ceSopenharmony_ci napi_get_value_uint32(env, args[0], &result); 12348f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 12448f512ceSopenharmony_ci return result; 12548f512ceSopenharmony_ci} 12648f512ceSopenharmony_ci 12748f512ceSopenharmony_cistatic napi_value ResetOption(napi_env env, napi_callback_info info) 12848f512ceSopenharmony_ci{ 12948f512ceSopenharmony_ci napi_value napiValue = nullptr; 13048f512ceSopenharmony_ci bool result = true; 13148f512ceSopenharmony_ci g_hiperfRecordOption = std::make_unique<HiperfClient::RecordOption>(); 13248f512ceSopenharmony_ci 13348f512ceSopenharmony_ci NAPI_CALL(env, napi_create_int32(env, result, &napiValue)); 13448f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 13548f512ceSopenharmony_ci return napiValue; 13648f512ceSopenharmony_ci} 13748f512ceSopenharmony_ci 13848f512ceSopenharmony_cistatic napi_value SetOutputFilename(napi_env env, napi_callback_info info) 13948f512ceSopenharmony_ci{ 14048f512ceSopenharmony_ci napi_value napiValue = nullptr; 14148f512ceSopenharmony_ci bool result = true; 14248f512ceSopenharmony_ci const std::string option = GetJsStringFromOption(env, info); 14348f512ceSopenharmony_ci g_hiperfRecordOption->SetOutputFilename(option); 14448f512ceSopenharmony_ci 14548f512ceSopenharmony_ci NAPI_CALL(env, napi_create_int32(env, result, &napiValue)); 14648f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 14748f512ceSopenharmony_ci return napiValue; 14848f512ceSopenharmony_ci} 14948f512ceSopenharmony_ci 15048f512ceSopenharmony_cistatic napi_value GetOutputFileName(napi_env env, napi_callback_info info) 15148f512ceSopenharmony_ci{ 15248f512ceSopenharmony_ci napi_value napiValue = nullptr; 15348f512ceSopenharmony_ci std::string result = g_hiperfRecordOption->GetOutputFileName(); 15448f512ceSopenharmony_ci NAPI_CALL(env, napi_create_string_utf8(env, result.c_str(), result.size(), &napiValue)); 15548f512ceSopenharmony_ci 15648f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}s", result.c_str()); 15748f512ceSopenharmony_ci return napiValue; 15848f512ceSopenharmony_ci} 15948f512ceSopenharmony_ci 16048f512ceSopenharmony_cistatic napi_value SetTargetSystemWide(napi_env env, napi_callback_info info) 16148f512ceSopenharmony_ci{ 16248f512ceSopenharmony_ci napi_value napiValue = nullptr; 16348f512ceSopenharmony_ci bool result = true; 16448f512ceSopenharmony_ci bool enable = GetBoolFromOption(env, info); 16548f512ceSopenharmony_ci g_hiperfRecordOption->SetTargetSystemWide(enable); 16648f512ceSopenharmony_ci 16748f512ceSopenharmony_ci NAPI_CALL(env, napi_create_int32(env, result, &napiValue)); 16848f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 16948f512ceSopenharmony_ci return napiValue; 17048f512ceSopenharmony_ci} 17148f512ceSopenharmony_ci 17248f512ceSopenharmony_cistatic napi_value SetCompressData(napi_env env, napi_callback_info info) 17348f512ceSopenharmony_ci{ 17448f512ceSopenharmony_ci napi_value napiValue = nullptr; 17548f512ceSopenharmony_ci bool result = true; 17648f512ceSopenharmony_ci bool enable = GetBoolFromOption(env, info); 17748f512ceSopenharmony_ci g_hiperfRecordOption->SetCompressData(enable); 17848f512ceSopenharmony_ci 17948f512ceSopenharmony_ci NAPI_CALL(env, napi_create_int32(env, result, &napiValue)); 18048f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 18148f512ceSopenharmony_ci return napiValue; 18248f512ceSopenharmony_ci} 18348f512ceSopenharmony_ci 18448f512ceSopenharmony_cistatic napi_value SetSelectCpus(napi_env env, napi_callback_info info) 18548f512ceSopenharmony_ci{ 18648f512ceSopenharmony_ci napi_value napiValue = nullptr; 18748f512ceSopenharmony_ci bool result = true; 18848f512ceSopenharmony_ci std::string option = GetJsStringFromOption(env, info); 18948f512ceSopenharmony_ci g_hiperfRecordOption->SetSelectCpus(StringSplitToInt(option)); 19048f512ceSopenharmony_ci 19148f512ceSopenharmony_ci NAPI_CALL(env, napi_create_int32(env, result, &napiValue)); 19248f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 19348f512ceSopenharmony_ci return napiValue; 19448f512ceSopenharmony_ci} 19548f512ceSopenharmony_ci 19648f512ceSopenharmony_cistatic napi_value SetTimeStopSec(napi_env env, napi_callback_info info) 19748f512ceSopenharmony_ci{ 19848f512ceSopenharmony_ci napi_value napiValue = nullptr; 19948f512ceSopenharmony_ci bool result = true; 20048f512ceSopenharmony_ci uint32_t option = GetUintFromOption(env, info); 20148f512ceSopenharmony_ci g_hiperfRecordOption->SetTimeStopSec(option); 20248f512ceSopenharmony_ci 20348f512ceSopenharmony_ci NAPI_CALL(env, napi_create_int32(env, result, &napiValue)); 20448f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 20548f512ceSopenharmony_ci return napiValue; 20648f512ceSopenharmony_ci} 20748f512ceSopenharmony_ci 20848f512ceSopenharmony_cistatic napi_value SetFrequency(napi_env env, napi_callback_info info) 20948f512ceSopenharmony_ci{ 21048f512ceSopenharmony_ci napi_value napiValue = nullptr; 21148f512ceSopenharmony_ci bool result = true; 21248f512ceSopenharmony_ci uint32_t option = GetUintFromOption(env, info); 21348f512ceSopenharmony_ci g_hiperfRecordOption->SetFrequency(option); 21448f512ceSopenharmony_ci 21548f512ceSopenharmony_ci NAPI_CALL(env, napi_create_int32(env, result, &napiValue)); 21648f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 21748f512ceSopenharmony_ci return napiValue; 21848f512ceSopenharmony_ci} 21948f512ceSopenharmony_ci 22048f512ceSopenharmony_cistatic napi_value SetPeriod(napi_env env, napi_callback_info info) 22148f512ceSopenharmony_ci{ 22248f512ceSopenharmony_ci napi_value napiValue = nullptr; 22348f512ceSopenharmony_ci bool result = true; 22448f512ceSopenharmony_ci uint32_t option = GetUintFromOption(env, info); 22548f512ceSopenharmony_ci g_hiperfRecordOption->SetPeriod(option); 22648f512ceSopenharmony_ci 22748f512ceSopenharmony_ci NAPI_CALL(env, napi_create_int32(env, result, &napiValue)); 22848f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 22948f512ceSopenharmony_ci return napiValue; 23048f512ceSopenharmony_ci} 23148f512ceSopenharmony_ci 23248f512ceSopenharmony_cistatic napi_value SetSelectEvents(napi_env env, napi_callback_info info) 23348f512ceSopenharmony_ci{ 23448f512ceSopenharmony_ci napi_value napiValue = nullptr; 23548f512ceSopenharmony_ci bool result = true; 23648f512ceSopenharmony_ci std::string option = GetJsStringFromOption(env, info); 23748f512ceSopenharmony_ci g_hiperfRecordOption->SetSelectEvents(StringSplit(option)); 23848f512ceSopenharmony_ci 23948f512ceSopenharmony_ci NAPI_CALL(env, napi_create_int32(env, result, &napiValue)); 24048f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 24148f512ceSopenharmony_ci return napiValue; 24248f512ceSopenharmony_ci} 24348f512ceSopenharmony_cistatic napi_value SetSelectGroups(napi_env env, napi_callback_info info) 24448f512ceSopenharmony_ci{ 24548f512ceSopenharmony_ci napi_value napiValue = nullptr; 24648f512ceSopenharmony_ci bool result = true; 24748f512ceSopenharmony_ci std::string option = GetJsStringFromOption(env, info); 24848f512ceSopenharmony_ci g_hiperfRecordOption->SetSelectGroups(StringSplit(option)); 24948f512ceSopenharmony_ci 25048f512ceSopenharmony_ci NAPI_CALL(env, napi_create_int32(env, result, &napiValue)); 25148f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 25248f512ceSopenharmony_ci return napiValue; 25348f512ceSopenharmony_ci} 25448f512ceSopenharmony_cistatic napi_value SetNoInherit(napi_env env, napi_callback_info info) 25548f512ceSopenharmony_ci{ 25648f512ceSopenharmony_ci napi_value napiValue = nullptr; 25748f512ceSopenharmony_ci bool result = true; 25848f512ceSopenharmony_ci bool enable = GetBoolFromOption(env, info); 25948f512ceSopenharmony_ci g_hiperfRecordOption->SetNoInherit(enable); 26048f512ceSopenharmony_ci 26148f512ceSopenharmony_ci NAPI_CALL(env, napi_create_int32(env, result, &napiValue)); 26248f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 26348f512ceSopenharmony_ci return napiValue; 26448f512ceSopenharmony_ci} 26548f512ceSopenharmony_cistatic napi_value SetSelectPids(napi_env env, napi_callback_info info) 26648f512ceSopenharmony_ci{ 26748f512ceSopenharmony_ci napi_value napiValue = nullptr; 26848f512ceSopenharmony_ci bool result = true; 26948f512ceSopenharmony_ci std::string option = GetJsStringFromOption(env, info); 27048f512ceSopenharmony_ci g_hiperfRecordOption->SetSelectPids(StringSplitToInt(option)); 27148f512ceSopenharmony_ci 27248f512ceSopenharmony_ci NAPI_CALL(env, napi_create_int32(env, result, &napiValue)); 27348f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 27448f512ceSopenharmony_ci return napiValue; 27548f512ceSopenharmony_ci}; 27648f512ceSopenharmony_cistatic napi_value SetCallStackSamplingConfigs(napi_env env, napi_callback_info info) 27748f512ceSopenharmony_ci{ 27848f512ceSopenharmony_ci napi_value napiValue = nullptr; 27948f512ceSopenharmony_ci bool result = true; 28048f512ceSopenharmony_ci uint32_t option = GetUintFromOption(env, info); 28148f512ceSopenharmony_ci g_hiperfRecordOption->SetCallStackSamplingConfigs(option); 28248f512ceSopenharmony_ci 28348f512ceSopenharmony_ci NAPI_CALL(env, napi_create_int32(env, result, &napiValue)); 28448f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 28548f512ceSopenharmony_ci return napiValue; 28648f512ceSopenharmony_ci} 28748f512ceSopenharmony_ci 28848f512ceSopenharmony_cistatic napi_value SetSelectTids(napi_env env, napi_callback_info info) 28948f512ceSopenharmony_ci{ 29048f512ceSopenharmony_ci napi_value napiValue = nullptr; 29148f512ceSopenharmony_ci bool result = true; 29248f512ceSopenharmony_ci std::string option = GetJsStringFromOption(env, info); 29348f512ceSopenharmony_ci g_hiperfRecordOption->SetSelectTids(StringSplitToInt(option)); 29448f512ceSopenharmony_ci 29548f512ceSopenharmony_ci NAPI_CALL(env, napi_create_int32(env, result, &napiValue)); 29648f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 29748f512ceSopenharmony_ci return napiValue; 29848f512ceSopenharmony_ci} 29948f512ceSopenharmony_ci 30048f512ceSopenharmony_cistatic napi_value SetExcludePerf(napi_env env, napi_callback_info info) 30148f512ceSopenharmony_ci{ 30248f512ceSopenharmony_ci napi_value napiValue = nullptr; 30348f512ceSopenharmony_ci bool result = true; 30448f512ceSopenharmony_ci bool enable = GetBoolFromOption(env, info); 30548f512ceSopenharmony_ci g_hiperfRecordOption->SetExcludePerf(enable); 30648f512ceSopenharmony_ci 30748f512ceSopenharmony_ci NAPI_CALL(env, napi_create_int32(env, result, &napiValue)); 30848f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 30948f512ceSopenharmony_ci return napiValue; 31048f512ceSopenharmony_ci} 31148f512ceSopenharmony_ci 31248f512ceSopenharmony_cistatic napi_value SetCpuPercent(napi_env env, napi_callback_info info) 31348f512ceSopenharmony_ci{ 31448f512ceSopenharmony_ci napi_value napiValue = nullptr; 31548f512ceSopenharmony_ci bool result = true; 31648f512ceSopenharmony_ci uint32_t option = GetUintFromOption(env, info); 31748f512ceSopenharmony_ci g_hiperfRecordOption->SetCpuPercent(option); 31848f512ceSopenharmony_ci 31948f512ceSopenharmony_ci NAPI_CALL(env, napi_create_int32(env, result, &napiValue)); 32048f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 32148f512ceSopenharmony_ci return napiValue; 32248f512ceSopenharmony_ci} 32348f512ceSopenharmony_ci 32448f512ceSopenharmony_cistatic napi_value SetOffCPU(napi_env env, napi_callback_info info) 32548f512ceSopenharmony_ci{ 32648f512ceSopenharmony_ci napi_value napiValue = nullptr; 32748f512ceSopenharmony_ci bool result = true; 32848f512ceSopenharmony_ci bool enable = GetBoolFromOption(env, info); 32948f512ceSopenharmony_ci g_hiperfRecordOption->SetOffCPU(enable); 33048f512ceSopenharmony_ci 33148f512ceSopenharmony_ci NAPI_CALL(env, napi_create_int32(env, result, &napiValue)); 33248f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 33348f512ceSopenharmony_ci return napiValue; 33448f512ceSopenharmony_ci} 33548f512ceSopenharmony_ci 33648f512ceSopenharmony_cistatic napi_value SetCallGraph(napi_env env, napi_callback_info info) 33748f512ceSopenharmony_ci{ 33848f512ceSopenharmony_ci napi_value napiValue = nullptr; 33948f512ceSopenharmony_ci bool result = true; 34048f512ceSopenharmony_ci std::string option = GetJsStringFromOption(env, info); 34148f512ceSopenharmony_ci g_hiperfRecordOption->SetCallGraph((option)); 34248f512ceSopenharmony_ci 34348f512ceSopenharmony_ci NAPI_CALL(env, napi_create_int32(env, result, &napiValue)); 34448f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 34548f512ceSopenharmony_ci return napiValue; 34648f512ceSopenharmony_ci} 34748f512ceSopenharmony_ci 34848f512ceSopenharmony_cistatic napi_value SetDelayUnwind(napi_env env, napi_callback_info info) 34948f512ceSopenharmony_ci{ 35048f512ceSopenharmony_ci napi_value napiValue = nullptr; 35148f512ceSopenharmony_ci bool result = true; 35248f512ceSopenharmony_ci bool enable = GetBoolFromOption(env, info); 35348f512ceSopenharmony_ci g_hiperfRecordOption->SetDelayUnwind(enable); 35448f512ceSopenharmony_ci 35548f512ceSopenharmony_ci NAPI_CALL(env, napi_create_int32(env, result, &napiValue)); 35648f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 35748f512ceSopenharmony_ci return napiValue; 35848f512ceSopenharmony_ci} 35948f512ceSopenharmony_ci 36048f512ceSopenharmony_cistatic napi_value SetDisableUnwind(napi_env env, napi_callback_info info) 36148f512ceSopenharmony_ci{ 36248f512ceSopenharmony_ci napi_value napiValue = nullptr; 36348f512ceSopenharmony_ci bool result = true; 36448f512ceSopenharmony_ci bool enable = GetBoolFromOption(env, info); 36548f512ceSopenharmony_ci g_hiperfRecordOption->SetDisableUnwind(enable); 36648f512ceSopenharmony_ci 36748f512ceSopenharmony_ci NAPI_CALL(env, napi_create_int32(env, result, &napiValue)); 36848f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 36948f512ceSopenharmony_ci return napiValue; 37048f512ceSopenharmony_ci} 37148f512ceSopenharmony_ci 37248f512ceSopenharmony_cistatic napi_value SetDisableCallstackMerge(napi_env env, napi_callback_info info) 37348f512ceSopenharmony_ci{ 37448f512ceSopenharmony_ci napi_value napiValue = nullptr; 37548f512ceSopenharmony_ci bool result = true; 37648f512ceSopenharmony_ci bool enable = GetBoolFromOption(env, info); 37748f512ceSopenharmony_ci g_hiperfRecordOption->SetDisableCallstackMerge(enable); 37848f512ceSopenharmony_ci 37948f512ceSopenharmony_ci NAPI_CALL(env, napi_create_int32(env, result, &napiValue)); 38048f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 38148f512ceSopenharmony_ci return napiValue; 38248f512ceSopenharmony_ci} 38348f512ceSopenharmony_ci 38448f512ceSopenharmony_cistatic napi_value SetSymbolDir(napi_env env, napi_callback_info info) 38548f512ceSopenharmony_ci{ 38648f512ceSopenharmony_ci napi_value napiValue = nullptr; 38748f512ceSopenharmony_ci bool result = true; 38848f512ceSopenharmony_ci std::string option = GetJsStringFromOption(env, info); 38948f512ceSopenharmony_ci g_hiperfRecordOption->SetSymbolDir(option); 39048f512ceSopenharmony_ci 39148f512ceSopenharmony_ci NAPI_CALL(env, napi_create_int32(env, result, &napiValue)); 39248f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 39348f512ceSopenharmony_ci return napiValue; 39448f512ceSopenharmony_ci} 39548f512ceSopenharmony_ci 39648f512ceSopenharmony_cistatic napi_value SetDataLimit(napi_env env, napi_callback_info info) 39748f512ceSopenharmony_ci{ 39848f512ceSopenharmony_ci napi_value napiValue = nullptr; 39948f512ceSopenharmony_ci bool result = true; 40048f512ceSopenharmony_ci std::string option = GetJsStringFromOption(env, info); 40148f512ceSopenharmony_ci g_hiperfRecordOption->SetDataLimit(option); 40248f512ceSopenharmony_ci 40348f512ceSopenharmony_ci NAPI_CALL(env, napi_create_int32(env, result, &napiValue)); 40448f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 40548f512ceSopenharmony_ci return napiValue; 40648f512ceSopenharmony_ci} 40748f512ceSopenharmony_ci 40848f512ceSopenharmony_cistatic napi_value SetAppPackage(napi_env env, napi_callback_info info) 40948f512ceSopenharmony_ci{ 41048f512ceSopenharmony_ci napi_value napiValue = nullptr; 41148f512ceSopenharmony_ci bool result = true; 41248f512ceSopenharmony_ci std::string option = GetJsStringFromOption(env, info); 41348f512ceSopenharmony_ci g_hiperfRecordOption->SetAppPackage(option); 41448f512ceSopenharmony_ci 41548f512ceSopenharmony_ci NAPI_CALL(env, napi_create_int32(env, result, &napiValue)); 41648f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 41748f512ceSopenharmony_ci return napiValue; 41848f512ceSopenharmony_ci} 41948f512ceSopenharmony_ci 42048f512ceSopenharmony_cistatic napi_value SetClockId(napi_env env, napi_callback_info info) 42148f512ceSopenharmony_ci{ 42248f512ceSopenharmony_ci napi_value napiValue = nullptr; 42348f512ceSopenharmony_ci bool result = true; 42448f512ceSopenharmony_ci std::string option = GetJsStringFromOption(env, info); 42548f512ceSopenharmony_ci g_hiperfRecordOption->SetClockId(option); 42648f512ceSopenharmony_ci 42748f512ceSopenharmony_ci NAPI_CALL(env, napi_create_int32(env, result, &napiValue)); 42848f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 42948f512ceSopenharmony_ci return napiValue; 43048f512ceSopenharmony_ci} 43148f512ceSopenharmony_ci 43248f512ceSopenharmony_cistatic napi_value SetVecBranchSampleTypes(napi_env env, napi_callback_info info) 43348f512ceSopenharmony_ci{ 43448f512ceSopenharmony_ci napi_value napiValue = nullptr; 43548f512ceSopenharmony_ci bool result = true; 43648f512ceSopenharmony_ci std::string option = GetJsStringFromOption(env, info); 43748f512ceSopenharmony_ci g_hiperfRecordOption->SetVecBranchSampleTypes(StringSplit(option)); 43848f512ceSopenharmony_ci 43948f512ceSopenharmony_ci NAPI_CALL(env, napi_create_int32(env, result, &napiValue)); 44048f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 44148f512ceSopenharmony_ci return napiValue; 44248f512ceSopenharmony_ci} 44348f512ceSopenharmony_ci 44448f512ceSopenharmony_cistatic napi_value SetMmapPages(napi_env env, napi_callback_info info) 44548f512ceSopenharmony_ci{ 44648f512ceSopenharmony_ci napi_value napiValue = nullptr; 44748f512ceSopenharmony_ci bool result = true; 44848f512ceSopenharmony_ci uint32_t option = GetUintFromOption(env, info); 44948f512ceSopenharmony_ci g_hiperfRecordOption->SetMmapPages(option); 45048f512ceSopenharmony_ci 45148f512ceSopenharmony_ci NAPI_CALL(env, napi_create_int32(env, result, &napiValue)); 45248f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 45348f512ceSopenharmony_ci return napiValue; 45448f512ceSopenharmony_ci} 45548f512ceSopenharmony_ci 45648f512ceSopenharmony_cistatic napi_value GetOptionVecString(napi_env env, napi_callback_info info) 45748f512ceSopenharmony_ci{ 45848f512ceSopenharmony_ci napi_value napiValue = nullptr; 45948f512ceSopenharmony_ci const std::vector<std::string> items = g_hiperfRecordOption->GetOptionVecString(); 46048f512ceSopenharmony_ci std::string result; 46148f512ceSopenharmony_ci const std::string split = ","; 46248f512ceSopenharmony_ci for (auto item : items) { 46348f512ceSopenharmony_ci if (!result.empty()) 46448f512ceSopenharmony_ci result.append(split); 46548f512ceSopenharmony_ci result.append(item); 46648f512ceSopenharmony_ci } 46748f512ceSopenharmony_ci if (result.empty()) { 46848f512ceSopenharmony_ci result.append("<empty>"); 46948f512ceSopenharmony_ci } 47048f512ceSopenharmony_ci 47148f512ceSopenharmony_ci NAPI_CALL(env, napi_create_string_utf8(env, result.c_str(), result.size(), &napiValue)); 47248f512ceSopenharmony_ci 47348f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}s", result.c_str()); 47448f512ceSopenharmony_ci return napiValue; 47548f512ceSopenharmony_ci} 47648f512ceSopenharmony_ci 47748f512ceSopenharmony_cistatic napi_value StartWithOption(napi_env env, napi_callback_info info) 47848f512ceSopenharmony_ci{ 47948f512ceSopenharmony_ci napi_value napiValue = nullptr; 48048f512ceSopenharmony_ci 48148f512ceSopenharmony_ci // for js api , we always use hilog 48248f512ceSopenharmony_ci g_hiperfClient->EnableHilog(); 48348f512ceSopenharmony_ci 48448f512ceSopenharmony_ci bool result = g_hiperfClient->Setup(g_hiperfRecordOption->GetOutputFileName()); 48548f512ceSopenharmony_ci if (result) { 48648f512ceSopenharmony_ci const HiperfClient::RecordOption *option = g_hiperfRecordOption.get(); 48748f512ceSopenharmony_ci result = g_hiperfClient->Start(*option); 48848f512ceSopenharmony_ci } 48948f512ceSopenharmony_ci NAPI_CALL(env, napi_create_int32(env, result, &napiValue)); 49048f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 49148f512ceSopenharmony_ci return napiValue; 49248f512ceSopenharmony_ci} 49348f512ceSopenharmony_ci 49448f512ceSopenharmony_cistatic napi_value Start(napi_env env, napi_callback_info info) 49548f512ceSopenharmony_ci{ 49648f512ceSopenharmony_ci napi_value napiValue = nullptr; 49748f512ceSopenharmony_ci 49848f512ceSopenharmony_ci // for js api , we always use hilog 49948f512ceSopenharmony_ci g_hiperfClient->EnableHilog(); 50048f512ceSopenharmony_ci 50148f512ceSopenharmony_ci bool result = g_hiperfClient->Start(); 50248f512ceSopenharmony_ci 50348f512ceSopenharmony_ci NAPI_CALL(env, napi_create_int32(env, result, &napiValue)); 50448f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 50548f512ceSopenharmony_ci return napiValue; 50648f512ceSopenharmony_ci} 50748f512ceSopenharmony_ci 50848f512ceSopenharmony_cistatic napi_value Setup(napi_env env, napi_callback_info info) 50948f512ceSopenharmony_ci{ 51048f512ceSopenharmony_ci napi_value napiValue = nullptr; 51148f512ceSopenharmony_ci 51248f512ceSopenharmony_ci std::string outputPath = GetJsStringFromOption(env, info); 51348f512ceSopenharmony_ci 51448f512ceSopenharmony_ci // for js api , we always use hilog 51548f512ceSopenharmony_ci g_hiperfClient->EnableHilog(); 51648f512ceSopenharmony_ci bool result = g_hiperfClient->Setup(outputPath); 51748f512ceSopenharmony_ci 51848f512ceSopenharmony_ci NAPI_CALL(env, napi_create_int32(env, result, &napiValue)); 51948f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 52048f512ceSopenharmony_ci return napiValue; 52148f512ceSopenharmony_ci} 52248f512ceSopenharmony_ci 52348f512ceSopenharmony_cistatic napi_value IsReady(napi_env env, napi_callback_info info) 52448f512ceSopenharmony_ci{ 52548f512ceSopenharmony_ci napi_value napiValue = nullptr; 52648f512ceSopenharmony_ci bool result = g_hiperfClient->IsReady(); 52748f512ceSopenharmony_ci 52848f512ceSopenharmony_ci NAPI_CALL(env, napi_create_int32(env, result, &napiValue)); 52948f512ceSopenharmony_ci 53048f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 53148f512ceSopenharmony_ci return napiValue; 53248f512ceSopenharmony_ci} 53348f512ceSopenharmony_ci 53448f512ceSopenharmony_cistatic napi_value Stop(napi_env env, napi_callback_info info) 53548f512ceSopenharmony_ci{ 53648f512ceSopenharmony_ci napi_value napiValue = nullptr; 53748f512ceSopenharmony_ci bool result = g_hiperfClient->Stop(); 53848f512ceSopenharmony_ci 53948f512ceSopenharmony_ci NAPI_CALL(env, napi_create_int32(env, result, &napiValue)); 54048f512ceSopenharmony_ci 54148f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 54248f512ceSopenharmony_ci return napiValue; 54348f512ceSopenharmony_ci} 54448f512ceSopenharmony_ci 54548f512ceSopenharmony_cistatic napi_value Pause(napi_env env, napi_callback_info info) 54648f512ceSopenharmony_ci{ 54748f512ceSopenharmony_ci napi_value napiValue = nullptr; 54848f512ceSopenharmony_ci bool result = g_hiperfClient->Pause(); 54948f512ceSopenharmony_ci 55048f512ceSopenharmony_ci NAPI_CALL(env, napi_create_int32(env, result, &napiValue)); 55148f512ceSopenharmony_ci 55248f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 55348f512ceSopenharmony_ci return napiValue; 55448f512ceSopenharmony_ci} 55548f512ceSopenharmony_ci 55648f512ceSopenharmony_cistatic napi_value Resume(napi_env env, napi_callback_info info) 55748f512ceSopenharmony_ci{ 55848f512ceSopenharmony_ci napi_value napiValue = nullptr; 55948f512ceSopenharmony_ci bool result = g_hiperfClient->Resume(); 56048f512ceSopenharmony_ci 56148f512ceSopenharmony_ci NAPI_CALL(env, napi_create_int32(env, result, &napiValue)); 56248f512ceSopenharmony_ci 56348f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 56448f512ceSopenharmony_ci return napiValue; 56548f512ceSopenharmony_ci} 56648f512ceSopenharmony_ci 56748f512ceSopenharmony_cistatic napi_value GetOutputDir(napi_env env, napi_callback_info info) 56848f512ceSopenharmony_ci{ 56948f512ceSopenharmony_ci napi_value napiValue = nullptr; 57048f512ceSopenharmony_ci std::string result = g_hiperfClient->GetOutputDir(); 57148f512ceSopenharmony_ci 57248f512ceSopenharmony_ci NAPI_CALL(env, napi_create_string_utf8(env, result.c_str(), result.size(), &napiValue)); 57348f512ceSopenharmony_ci 57448f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}s", result.c_str()); 57548f512ceSopenharmony_ci return napiValue; 57648f512ceSopenharmony_ci} 57748f512ceSopenharmony_ci 57848f512ceSopenharmony_cistatic napi_value GetCommandPath(napi_env env, napi_callback_info info) 57948f512ceSopenharmony_ci{ 58048f512ceSopenharmony_ci napi_value napiValue = nullptr; 58148f512ceSopenharmony_ci std::string result = g_hiperfClient->GetCommandPath(); 58248f512ceSopenharmony_ci 58348f512ceSopenharmony_ci NAPI_CALL(env, napi_create_string_utf8(env, result.c_str(), result.size(), &napiValue)); 58448f512ceSopenharmony_ci 58548f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}s", result.c_str()); 58648f512ceSopenharmony_ci return napiValue; 58748f512ceSopenharmony_ci} 58848f512ceSopenharmony_ci 58948f512ceSopenharmony_cistatic napi_value GetOutputPerfDataPath(napi_env env, napi_callback_info info) 59048f512ceSopenharmony_ci{ 59148f512ceSopenharmony_ci napi_value napiValue = nullptr; 59248f512ceSopenharmony_ci std::string result = g_hiperfClient->GetOutputPerfDataPath(); 59348f512ceSopenharmony_ci 59448f512ceSopenharmony_ci NAPI_CALL(env, napi_create_string_utf8(env, result.c_str(), result.size(), &napiValue)); 59548f512ceSopenharmony_ci 59648f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}s", result.c_str()); 59748f512ceSopenharmony_ci return napiValue; 59848f512ceSopenharmony_ci} 59948f512ceSopenharmony_ci 60048f512ceSopenharmony_cistatic napi_value SetDebugMode(napi_env env, napi_callback_info info) 60148f512ceSopenharmony_ci{ 60248f512ceSopenharmony_ci napi_value napiValue = nullptr; 60348f512ceSopenharmony_ci bool result = true; 60448f512ceSopenharmony_ci 60548f512ceSopenharmony_ci g_hiperfClient->SetDebugMode(); 60648f512ceSopenharmony_ci 60748f512ceSopenharmony_ci NAPI_CALL(env, napi_create_int32(env, result, &napiValue)); 60848f512ceSopenharmony_ci 60948f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "%{public}d", result); 61048f512ceSopenharmony_ci return napiValue; 61148f512ceSopenharmony_ci} 61248f512ceSopenharmony_ci} // namespace HiperfClient 61348f512ceSopenharmony_ci} // namespace HiPerf 61448f512ceSopenharmony_ci} // namespace Developtools 61548f512ceSopenharmony_ci} // namespace OHOS 61648f512ceSopenharmony_ci 61748f512ceSopenharmony_ciusing namespace OHOS::Developtools::HiPerf::HiperfClient; 61848f512ceSopenharmony_ci 61948f512ceSopenharmony_ciEXTERN_C_START 62048f512ceSopenharmony_ci/* 62148f512ceSopenharmony_ci * function for module exports 62248f512ceSopenharmony_ci */ 62348f512ceSopenharmony_cistatic napi_value HiperfClientInit(napi_env env, napi_value exports) 62448f512ceSopenharmony_ci{ 62548f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "enter"); 62648f512ceSopenharmony_ci 62748f512ceSopenharmony_ci napi_property_descriptor desc[] = { 62848f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("isReady", IsReady), 62948f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("setup", Setup), 63048f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("start", Start), 63148f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("stop", Stop), 63248f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("pause", Pause), 63348f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("resume", Resume), 63448f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("getOutputDir", GetOutputDir), 63548f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("getOutputPerfDataPath", GetOutputPerfDataPath), 63648f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("getCommandPath", GetCommandPath), 63748f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("setDebugMode", SetDebugMode), 63848f512ceSopenharmony_ci // Option: 63948f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("startWithOption", StartWithOption), 64048f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("resetOption", ResetOption), 64148f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("setOutputFilename", SetOutputFilename), 64248f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("getOutputFileName", GetOutputFileName), 64348f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("setTargetSystemWide", SetTargetSystemWide), 64448f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("setCompressData", SetCompressData), 64548f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("setSelectCpus", SetSelectCpus), 64648f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("setTimeStopSec", SetTimeStopSec), 64748f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("setFrequency", SetFrequency), 64848f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("setPeriod", SetPeriod), 64948f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("setSelectEvents", SetSelectEvents), 65048f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("setSelectGroups", SetSelectGroups), 65148f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("setNoInherit", SetNoInherit), 65248f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("setSelectPids", SetSelectPids), 65348f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("setCallStackSamplingConfigs", SetCallStackSamplingConfigs), 65448f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("setSelectTids", SetSelectTids), 65548f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("setExcludePerf", SetExcludePerf), 65648f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("setCpuPercent", SetCpuPercent), 65748f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("setOffCPU", SetOffCPU), 65848f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("setCallGraph", SetCallGraph), 65948f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("setDelayUnwind", SetDelayUnwind), 66048f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("setDisableUnwind", SetDisableUnwind), 66148f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("setDisableCallstackMerge", SetDisableCallstackMerge), 66248f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("setSymbolDir", SetSymbolDir), 66348f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("setDataLimit", SetDataLimit), 66448f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("setAppPackage", SetAppPackage), 66548f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("setClockId", SetClockId), 66648f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("setVecBranchSampleTypes", SetVecBranchSampleTypes), 66748f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("setMmapPages", SetMmapPages), 66848f512ceSopenharmony_ci DECLARE_NAPI_FUNCTION("getOptionVecString", GetOptionVecString), 66948f512ceSopenharmony_ci }; 67048f512ceSopenharmony_ci NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc)); 67148f512ceSopenharmony_ci HIPERF_HILOGD(MODULE_JS_NAPI, "exit"); 67248f512ceSopenharmony_ci return exports; 67348f512ceSopenharmony_ci} 67448f512ceSopenharmony_ciEXTERN_C_END 67548f512ceSopenharmony_ci 67648f512ceSopenharmony_ci/* 67748f512ceSopenharmony_ci * Module definition 67848f512ceSopenharmony_ci */ 67948f512ceSopenharmony_cistatic napi_module g_module = { 68048f512ceSopenharmony_ci .nm_version = 1, 68148f512ceSopenharmony_ci .nm_flags = 0, 68248f512ceSopenharmony_ci .nm_filename = nullptr, 68348f512ceSopenharmony_ci .nm_register_func = HiperfClientInit, 68448f512ceSopenharmony_ci .nm_modname = "hiperf", 68548f512ceSopenharmony_ci .nm_priv = ((void *)0), 68648f512ceSopenharmony_ci .reserved = {0}, 68748f512ceSopenharmony_ci}; 68848f512ceSopenharmony_ci 68948f512ceSopenharmony_ci/* 69048f512ceSopenharmony_ci * Module registration 69148f512ceSopenharmony_ci */ 69248f512ceSopenharmony_ciextern "C" __attribute__((constructor)) void RegisterModule(void) 69348f512ceSopenharmony_ci{ 69448f512ceSopenharmony_ci napi_module_register(&g_module); 69548f512ceSopenharmony_ci} 696