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