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 "napi/native_api.h" 17f6603c60Sopenharmony_ci#include <trace.h> 18f6603c60Sopenharmony_ci#include <thread> 19f6603c60Sopenharmony_ci 20f6603c60Sopenharmony_ci#define FAIL (-1) 21f6603c60Sopenharmony_ci#define SUCCESS 0 22f6603c60Sopenharmony_ci#define PARAM_0 0 23f6603c60Sopenharmony_ci#define PARAM_1 1 24f6603c60Sopenharmony_ci#define PARAM_2 2 25f6603c60Sopenharmony_ci#define PARAM_3 3 26f6603c60Sopenharmony_ci#define PARAM_5 5 27f6603c60Sopenharmony_ci#define PARAM_10 10 28f6603c60Sopenharmony_cistatic const int32_t TASK_ID = 111; 29f6603c60Sopenharmony_cistatic const int32_t TASK_ID_TWO = 112; 30f6603c60Sopenharmony_ci 31f6603c60Sopenharmony_cistatic napi_value OHHiTraceCountTrace(napi_env env, napi_callback_info info) 32f6603c60Sopenharmony_ci{ 33f6603c60Sopenharmony_ci int64_t count = PARAM_0; 34f6603c60Sopenharmony_ci OH_HiTrace_CountTrace("countTraceName", count++); 35f6603c60Sopenharmony_ci int returnValue = FAIL; 36f6603c60Sopenharmony_ci if (count == PARAM_1) { 37f6603c60Sopenharmony_ci returnValue = SUCCESS; 38f6603c60Sopenharmony_ci } 39f6603c60Sopenharmony_ci napi_value result = nullptr; 40f6603c60Sopenharmony_ci napi_create_int32(env, returnValue, &result); 41f6603c60Sopenharmony_ci return result; 42f6603c60Sopenharmony_ci} 43f6603c60Sopenharmony_ci 44f6603c60Sopenharmony_cistatic napi_value OHHiTraceStartTrace(napi_env env, napi_callback_info info) 45f6603c60Sopenharmony_ci{ 46f6603c60Sopenharmony_ci int count = PARAM_0; 47f6603c60Sopenharmony_ci OH_HiTrace_StartTrace("traceName"); 48f6603c60Sopenharmony_ci count++; 49f6603c60Sopenharmony_ci OH_HiTrace_FinishTrace(); 50f6603c60Sopenharmony_ci count++; 51f6603c60Sopenharmony_ci int returnValue = FAIL; 52f6603c60Sopenharmony_ci if (count == PARAM_2) { 53f6603c60Sopenharmony_ci returnValue = SUCCESS; 54f6603c60Sopenharmony_ci } 55f6603c60Sopenharmony_ci napi_value result = nullptr; 56f6603c60Sopenharmony_ci napi_create_int32(env, returnValue, &result); 57f6603c60Sopenharmony_ci return result; 58f6603c60Sopenharmony_ci} 59f6603c60Sopenharmony_ci 60f6603c60Sopenharmony_cistatic napi_value OHHiTraceStartAsyncTrace(napi_env env, napi_callback_info info) 61f6603c60Sopenharmony_ci{ 62f6603c60Sopenharmony_ci int count = PARAM_0; 63f6603c60Sopenharmony_ci OH_HiTrace_StartAsyncTrace("testAsync", TASK_ID); 64f6603c60Sopenharmony_ci count++; 65f6603c60Sopenharmony_ci OH_HiTrace_StartAsyncTrace("testAsync", TASK_ID_TWO); 66f6603c60Sopenharmony_ci OH_HiTrace_FinishAsyncTrace("testAsync", TASK_ID); 67f6603c60Sopenharmony_ci count++; 68f6603c60Sopenharmony_ci OH_HiTrace_FinishAsyncTrace("testAsync", TASK_ID_TWO); 69f6603c60Sopenharmony_ci int returnValue = FAIL; 70f6603c60Sopenharmony_ci if (count == PARAM_2) { 71f6603c60Sopenharmony_ci returnValue = SUCCESS; 72f6603c60Sopenharmony_ci } 73f6603c60Sopenharmony_ci napi_value result = nullptr; 74f6603c60Sopenharmony_ci napi_create_int32(env, returnValue, &result); 75f6603c60Sopenharmony_ci return result; 76f6603c60Sopenharmony_ci} 77f6603c60Sopenharmony_ci 78f6603c60Sopenharmony_cistatic napi_value Begin(napi_env env, napi_callback_info info) 79f6603c60Sopenharmony_ci{ 80f6603c60Sopenharmony_ci int count = PARAM_0; 81f6603c60Sopenharmony_ci HiTraceId hiTraceId = OH_HiTrace_BeginChain("hiTraceChainndktest", HITRACE_FLAG_DEFAULT); 82f6603c60Sopenharmony_ci count++; 83f6603c60Sopenharmony_ci OH_HiTrace_InitId(&hiTraceId); 84f6603c60Sopenharmony_ci OH_HiTrace_ClearId(); 85f6603c60Sopenharmony_ci OH_HiTrace_SetId(&hiTraceId); 86f6603c60Sopenharmony_ci hiTraceId = OH_HiTrace_GetId(); 87f6603c60Sopenharmony_ci OH_HiTrace_IsIdValid(&hiTraceId); 88f6603c60Sopenharmony_ci OH_HiTrace_EndChain(); 89f6603c60Sopenharmony_ci count++; 90f6603c60Sopenharmony_ci HiTraceId traceId5 = OH_HiTrace_BeginChain("hitraceNdkTest5", HITRACE_FLAG_INCLUDE_ASYNC); 91f6603c60Sopenharmony_ci count++; 92f6603c60Sopenharmony_ci uint8_t pIdArray; 93f6603c60Sopenharmony_ci OH_HiTrace_IdToBytes(&traceId5, &pIdArray, sizeof(traceId5)); 94f6603c60Sopenharmony_ci OH_HiTrace_IdFromBytes(&traceId5, &pIdArray, sizeof(traceId5)); 95f6603c60Sopenharmony_ci int returnValue = FAIL; 96f6603c60Sopenharmony_ci if (count == PARAM_3) { 97f6603c60Sopenharmony_ci returnValue = SUCCESS; 98f6603c60Sopenharmony_ci } 99f6603c60Sopenharmony_ci napi_value result = nullptr; 100f6603c60Sopenharmony_ci napi_create_int32(env, returnValue, &result); 101f6603c60Sopenharmony_ci 102f6603c60Sopenharmony_ci return result; 103f6603c60Sopenharmony_ci} 104f6603c60Sopenharmony_ci 105f6603c60Sopenharmony_cistatic napi_value Beginflag(napi_env env, napi_callback_info info) 106f6603c60Sopenharmony_ci{ 107f6603c60Sopenharmony_ci int count = PARAM_0; 108f6603c60Sopenharmony_ci HiTrace_Flag hitraceflag = HITRACE_FLAG_INCLUDE_ASYNC; 109f6603c60Sopenharmony_ci HiTraceId hiTraceId = OH_HiTrace_BeginChain("hiTraceChainndktest", hitraceflag); 110f6603c60Sopenharmony_ci count++; 111f6603c60Sopenharmony_ci OH_HiTrace_IsFlagEnabled(&hiTraceId, HITRACE_FLAG_INCLUDE_ASYNC); 112f6603c60Sopenharmony_ci count++; 113f6603c60Sopenharmony_ci OH_HiTrace_EnableFlag(&hiTraceId, HITRACE_FLAG_FAULT_TRIGGER); 114f6603c60Sopenharmony_ci count++; 115f6603c60Sopenharmony_ci OH_HiTrace_GetFlags(&hiTraceId); 116f6603c60Sopenharmony_ci count++; 117f6603c60Sopenharmony_ci OH_HiTrace_SetFlags(&hiTraceId, HITRACE_FLAG_DEFAULT); 118f6603c60Sopenharmony_ci OH_HiTrace_EndChain(); 119f6603c60Sopenharmony_ci count++; 120f6603c60Sopenharmony_ci int returnValue = FAIL; 121f6603c60Sopenharmony_ci if (count == PARAM_5) { 122f6603c60Sopenharmony_ci returnValue = SUCCESS; 123f6603c60Sopenharmony_ci } 124f6603c60Sopenharmony_ci napi_value result = nullptr; 125f6603c60Sopenharmony_ci napi_create_int32(env, returnValue, &result); 126f6603c60Sopenharmony_ci return result; 127f6603c60Sopenharmony_ci} 128f6603c60Sopenharmony_ci 129f6603c60Sopenharmony_cistatic napi_value BeginSpan(napi_env env, napi_callback_info info) 130f6603c60Sopenharmony_ci{ 131f6603c60Sopenharmony_ci int count = PARAM_0; 132f6603c60Sopenharmony_ci HiTrace_Flag hitraceflag = HITRACE_FLAG_INCLUDE_ASYNC; 133f6603c60Sopenharmony_ci HiTraceId hiTraceId = OH_HiTrace_BeginChain("hiTraceChainndktest", hitraceflag); 134f6603c60Sopenharmony_ci count++; 135f6603c60Sopenharmony_ci uint64_t chainId = 10000; 136f6603c60Sopenharmony_ci OH_HiTrace_SetChainId(&hiTraceId, chainId); 137f6603c60Sopenharmony_ci count++; 138f6603c60Sopenharmony_ci OH_HiTrace_GetChainId(&hiTraceId); 139f6603c60Sopenharmony_ci count++; 140f6603c60Sopenharmony_ci uint64_t spanId = 12345678; 141f6603c60Sopenharmony_ci OH_HiTrace_SetSpanId(&hiTraceId, spanId); 142f6603c60Sopenharmony_ci count++; 143f6603c60Sopenharmony_ci OH_HiTrace_GetSpanId(&hiTraceId); 144f6603c60Sopenharmony_ci count++; 145f6603c60Sopenharmony_ci uint64_t parentSpanId = 66666; 146f6603c60Sopenharmony_ci OH_HiTrace_SetParentSpanId(&hiTraceId, parentSpanId); 147f6603c60Sopenharmony_ci count++; 148f6603c60Sopenharmony_ci OH_HiTrace_GetParentSpanId(&hiTraceId); 149f6603c60Sopenharmony_ci count++; 150f6603c60Sopenharmony_ci OH_HiTrace_CreateSpan(); 151f6603c60Sopenharmony_ci count++; 152f6603c60Sopenharmony_ci OH_HiTrace_Tracepoint(HITRACE_CM_DEFAULT, HITRACE_TP_CS, &hiTraceId, "hitracetest4"); 153f6603c60Sopenharmony_ci count++; 154f6603c60Sopenharmony_ci OH_HiTrace_EndChain(); 155f6603c60Sopenharmony_ci count++; 156f6603c60Sopenharmony_ci int returnValue = FAIL; 157f6603c60Sopenharmony_ci if (count == PARAM_10) { 158f6603c60Sopenharmony_ci returnValue = SUCCESS; 159f6603c60Sopenharmony_ci } 160f6603c60Sopenharmony_ci napi_value result = nullptr; 161f6603c60Sopenharmony_ci napi_create_int32(env, returnValue, &result); 162f6603c60Sopenharmony_ci return result; 163f6603c60Sopenharmony_ci} 164f6603c60Sopenharmony_ci 165f6603c60Sopenharmony_ciEXTERN_C_START 166f6603c60Sopenharmony_cistatic napi_value Init(napi_env env, napi_value exports) 167f6603c60Sopenharmony_ci{ 168f6603c60Sopenharmony_ci napi_property_descriptor desc[] = { 169f6603c60Sopenharmony_ci {"oHHiTraceStartTrace", nullptr, OHHiTraceStartTrace, nullptr, nullptr, nullptr, napi_default, nullptr}, 170f6603c60Sopenharmony_ci {"oHHiTraceStartAsyncTrace", nullptr, OHHiTraceStartAsyncTrace, nullptr, nullptr, nullptr, napi_default, 171f6603c60Sopenharmony_ci nullptr}, 172f6603c60Sopenharmony_ci {"oHHiTraceCountTrace", nullptr, OHHiTraceCountTrace, nullptr, nullptr, nullptr, napi_default, nullptr}, 173f6603c60Sopenharmony_ci {"begin", nullptr, Begin, nullptr, nullptr, nullptr, napi_default, nullptr}, 174f6603c60Sopenharmony_ci {"beginflag", nullptr, Beginflag, nullptr, nullptr, nullptr, napi_default, nullptr}, 175f6603c60Sopenharmony_ci {"beginSpan", nullptr, BeginSpan, nullptr, nullptr, nullptr, napi_default, nullptr}, 176f6603c60Sopenharmony_ci }; 177f6603c60Sopenharmony_ci napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); 178f6603c60Sopenharmony_ci return exports; 179f6603c60Sopenharmony_ci} 180f6603c60Sopenharmony_ci 181f6603c60Sopenharmony_ciEXTERN_C_END 182f6603c60Sopenharmony_ci 183f6603c60Sopenharmony_cistatic napi_module demoModule = { 184f6603c60Sopenharmony_ci .nm_version = 1, 185f6603c60Sopenharmony_ci .nm_flags = 0, 186f6603c60Sopenharmony_ci .nm_filename = nullptr, 187f6603c60Sopenharmony_ci .nm_register_func = Init, 188f6603c60Sopenharmony_ci .nm_modname = "hitrace", 189f6603c60Sopenharmony_ci .nm_priv = ((void *)0), 190f6603c60Sopenharmony_ci .reserved = {0}, 191f6603c60Sopenharmony_ci}; 192f6603c60Sopenharmony_ci 193f6603c60Sopenharmony_ciextern "C" __attribute__((constructor)) void RegisterModule(void) { napi_module_register(&demoModule); } 194